pull/12037/head
parent
ce0867f40c
commit
cb149bfa00
|
@ -2811,19 +2811,29 @@ pub fn (mut c Checker) fn_call(mut node ast.CallExpr) ast.Type {
|
||||||
elem_typ := c.table.get_type_symbol(info.elem_type)
|
elem_typ := c.table.get_type_symbol(info.elem_type)
|
||||||
if elem_typ.info is ast.FnType {
|
if elem_typ.info is ast.FnType {
|
||||||
return elem_typ.info.func.return_type
|
return elem_typ.info.func.return_type
|
||||||
|
} else {
|
||||||
|
c.error('cannot call the element of the array, it is not a function',
|
||||||
|
node.pos)
|
||||||
}
|
}
|
||||||
} else if sym.kind == .map {
|
} else if sym.kind == .map {
|
||||||
info := sym.info as ast.Map
|
info := sym.info as ast.Map
|
||||||
value_typ := c.table.get_type_symbol(info.value_type)
|
value_typ := c.table.get_type_symbol(info.value_type)
|
||||||
if value_typ.info is ast.FnType {
|
if value_typ.info is ast.FnType {
|
||||||
return value_typ.info.func.return_type
|
return value_typ.info.func.return_type
|
||||||
|
} else {
|
||||||
|
c.error('cannot call the value of the map, it is not a function', node.pos)
|
||||||
}
|
}
|
||||||
} else if sym.kind == .array_fixed {
|
} else if sym.kind == .array_fixed {
|
||||||
info := sym.info as ast.ArrayFixed
|
info := sym.info as ast.ArrayFixed
|
||||||
elem_typ := c.table.get_type_symbol(info.elem_type)
|
elem_typ := c.table.get_type_symbol(info.elem_type)
|
||||||
if elem_typ.info is ast.FnType {
|
if elem_typ.info is ast.FnType {
|
||||||
return elem_typ.info.func.return_type
|
return elem_typ.info.func.return_type
|
||||||
|
} else {
|
||||||
|
c.error('cannot call the element of the array, it is not a function',
|
||||||
|
node.pos)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// TODO: assert? is this possible?
|
||||||
}
|
}
|
||||||
found = true
|
found = true
|
||||||
return ast.string_type
|
return ast.string_type
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
vlib/v/checker/tests/index_invalid_call.vv:4:20: error: cannot call the value of the map, it is not a function
|
||||||
|
2 | fn main() {
|
||||||
|
3 | m := map[string]string
|
||||||
|
4 | eprintln(m['abc']())
|
||||||
|
| ^
|
||||||
|
5 | array := ["", "1"]
|
||||||
|
6 | array[0]()
|
||||||
|
vlib/v/checker/tests/index_invalid_call.vv:6:11: error: cannot call the element of the array, it is not a function
|
||||||
|
4 | eprintln(m['abc']())
|
||||||
|
5 | array := ["", "1"]
|
||||||
|
6 | array[0]()
|
||||||
|
| ^
|
||||||
|
7 | }
|
|
@ -0,0 +1,7 @@
|
||||||
|
// fixes https://github.com/vlang/v/issues/11539 , copied example map test code from https://github.com/spytheman
|
||||||
|
fn main() {
|
||||||
|
m := map[string]string
|
||||||
|
eprintln(m['abc']())
|
||||||
|
array := ["", "1"]
|
||||||
|
array[0]()
|
||||||
|
}
|
Loading…
Reference in New Issue