checker/parser: anon fn call & return type fix

pull/4550/head
joe-conigliaro 2020-04-22 18:41:57 +10:00
parent 4b8ed3f831
commit 3ca4f5fada
No known key found for this signature in database
GPG Key ID: C12F7136C08206F1
3 changed files with 13 additions and 11 deletions

View File

@ -1361,6 +1361,7 @@ pub fn (c mut Checker) expr(node ast.Expr) table.Type {
return table.string_type return table.string_type
} }
ast.AnonFn { ast.AnonFn {
c.fn_return_type = it.decl.return_type
c.stmts(it.decl.stmts) c.stmts(it.decl.stmts)
return it.typ return it.typ
} }

View File

@ -622,7 +622,7 @@ pub fn (mut p Parser) name_expr() ast.Expr {
name_w_mod := p.prepend_mod(name) name_w_mod := p.prepend_mod(name)
// type cast. TODO: finish // type cast. TODO: finish
// if name in table.builtin_type_names { // if name in table.builtin_type_names {
if (name in p.table.type_idxs || name_w_mod in p.table.type_idxs) && !(name in ['C.stat', if !known_var && (name in p.table.type_idxs || name_w_mod in p.table.type_idxs) && !(name in ['C.stat',
'C.sigaction' 'C.sigaction'
]) { ]) {
// TODO handle C.stat() // TODO handle C.stat()

View File

@ -104,7 +104,8 @@ fn test_mut_ptr() {
} }
fn high_fn(f fn(int) int) { fn high_fn(f fn(int) int) {
x := f(111)
println('x == $x')
} }
fn high_fn_no_ret(f fn(int)) { fn high_fn_no_ret(f fn(int)) {
@ -132,19 +133,19 @@ fn test_anon_fn() {
f1 := fn(a int){ f1 := fn(a int){
println('hello from f1') println('hello from f1')
} }
f1(1) f1(1)
f2 := fn(a int){
f2 := fn(a int) int {
println('hello from f2') println('hello from f2')
return 10
} }
f2res := f2(1)
println('f2res == $f2res')
// assert f2res == 10
f2(1) high_fn(fn (x int) int {
return x + 1
// TODO: fix return })
// high_fn(fn (x int) int {
// println('hello')
// return x + 1
// })
high_fn_no_ret(fn (x int) { high_fn_no_ret(fn (x int) {
println('hello $x') println('hello $x')