require `unsafe` for dereferencing
parent
c7f3413d70
commit
fdf6682254
|
@ -1441,7 +1441,9 @@ fn (p mut Parser) dispatch_generic_fn_instance(f mut Fn, ti TypeInst) {
|
||||||
p.cgen.tmp_line = ''
|
p.cgen.tmp_line = ''
|
||||||
p.cgen.cur_line = ''
|
p.cgen.cur_line = ''
|
||||||
p.cgen.lines = []string
|
p.cgen.lines = []string
|
||||||
|
unsafe { // TODO
|
||||||
p.cur_fn = *f
|
p.cur_fn = *f
|
||||||
|
}
|
||||||
for arg in f.args {
|
for arg in f.args {
|
||||||
p.register_var(arg)
|
p.register_var(arg)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
mut typ := p.var_expr(v)
|
||||||
// *var
|
// *var
|
||||||
if is_deref {
|
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') {
|
if !typ.contains('*') && !typ.ends_with('ptr') {
|
||||||
println('name="$name", t=$v.typ')
|
println('name="$name", t=$v.typ')
|
||||||
p.error('dereferencing requires a pointer, but got `$typ`')
|
p.error('dereferencing requires a pointer, but got `$typ`')
|
||||||
|
|
|
@ -22,8 +22,10 @@ fn C.rand() int
|
||||||
* @return a value between 0 and C.RAND_MAX (inclusive)
|
* @return a value between 0 and C.RAND_MAX (inclusive)
|
||||||
*/
|
*/
|
||||||
pub fn rand_r(seed &int) int {
|
pub fn rand_r(seed &int) int {
|
||||||
|
unsafe {
|
||||||
mut rs := seed
|
mut rs := seed
|
||||||
ns := ( *rs * 1103515245 + 12345 )
|
ns := ( *rs * 1103515245 + 12345 )
|
||||||
*rs = ns
|
*rs = ns
|
||||||
return ns & 0x7fffffff
|
return ns & 0x7fffffff
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue