cgen/checker: variadic method call fix
parent
b1d15afe61
commit
1d0f3abadf
|
@ -327,7 +327,7 @@ pub fn (c mut Checker) method_call_expr(method_call_expr mut ast.MethodCallExpr)
|
||||||
// println('CLONE nr args=$method.args.len')
|
// println('CLONE nr args=$method.args.len')
|
||||||
// }
|
// }
|
||||||
for i, arg in method_call_expr.args {
|
for i, arg in method_call_expr.args {
|
||||||
c.expected_type = method.args[i + 1].typ
|
c.expected_type = if method.is_variadic && i >= method.args.len-1 { method.args[method.args.len - 1].typ } else { method.args[i + 1].typ }
|
||||||
method_call_expr.args[i].typ = c.expr(arg.expr)
|
method_call_expr.args[i].typ = c.expr(arg.expr)
|
||||||
}
|
}
|
||||||
// TODO: typ optimize.. this node can get processed more than once
|
// TODO: typ optimize.. this node can get processed more than once
|
||||||
|
|
|
@ -1006,7 +1006,8 @@ fn (g mut Gen) expr(node ast.Expr) {
|
||||||
g.write('/*rec*/*')
|
g.write('/*rec*/*')
|
||||||
}
|
}
|
||||||
g.expr(it.expr)
|
g.expr(it.expr)
|
||||||
if it.args.len > 0 {
|
is_variadic := it.exp_arg_types.len > 0 && table.type_is_variadic(it.exp_arg_types[it.exp_arg_types.len-1])
|
||||||
|
if it.args.len > 0 || is_variadic {
|
||||||
g.write(', ')
|
g.write(', ')
|
||||||
}
|
}
|
||||||
// /////////
|
// /////////
|
||||||
|
|
Loading…
Reference in New Issue