checker: check using a map as a struct init in parameter (#10904)
parent
d7dcb47db3
commit
742f6f849c
|
@ -2801,6 +2801,16 @@ pub fn (mut c Checker) fn_call(mut call_expr ast.CallExpr) ast.Type {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
c.expected_type = param.typ
|
c.expected_type = param.typ
|
||||||
|
|
||||||
|
e_sym := c.table.get_type_symbol(c.expected_type)
|
||||||
|
if call_arg.expr is ast.MapInit && e_sym.kind == .struct_ {
|
||||||
|
c.error('cannot initialize a struct with a map', call_arg.pos)
|
||||||
|
continue
|
||||||
|
} else if call_arg.expr is ast.StructInit && e_sym.kind == .map {
|
||||||
|
c.error('cannot initialize a map with a struct', call_arg.pos)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
typ := c.check_expr_opt_call(call_arg.expr, c.expr(call_arg.expr))
|
typ := c.check_expr_opt_call(call_arg.expr, c.expr(call_arg.expr))
|
||||||
call_expr.args[i].typ = typ
|
call_expr.args[i].typ = typ
|
||||||
typ_sym := c.table.get_type_symbol(typ)
|
typ_sym := c.table.get_type_symbol(typ)
|
||||||
|
|
Loading…
Reference in New Issue