1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

require unsafe for dereferencing

This commit is contained in:
Alexander Medvednikov 2019-11-10 19:57:17 +03:00
parent c7f3413d70
commit fdf6682254
3 changed files with 9 additions and 1 deletions

View File

@ -1441,7 +1441,9 @@ fn (p mut Parser) dispatch_generic_fn_instance(f mut Fn, ti TypeInst) {
p.cgen.tmp_line = ''
p.cgen.cur_line = ''
p.cgen.lines = []string
p.cur_fn = *f
unsafe { // TODO
p.cur_fn = *f
}
for arg in f.args {
p.register_var(arg)
}

View File

@ -1481,6 +1481,10 @@ fn (p mut Parser) get_var_type(name string, is_ptr bool, is_deref bool) string {
mut typ := p.var_expr(v)
// *var
if is_deref {
if !p.inside_unsafe {
p.warn('dereferencing can only be done inside an `unsafe` block')
}
if !typ.contains('*') && !typ.ends_with('ptr') {
println('name="$name", t=$v.typ')
p.error('dereferencing requires a pointer, but got `$typ`')

View File

@ -22,8 +22,10 @@ fn C.rand() int
* @return a value between 0 and C.RAND_MAX (inclusive)
*/
pub fn rand_r(seed &int) int {
unsafe {
mut rs := seed
ns := ( *rs * 1103515245 + 12345 )
*rs = ns
return ns & 0x7fffffff
}
}