cgen/checker: variadic method call fix

pull/4123/head
Joe Conigliaro 2020-03-26 22:40:14 +11:00
parent b1d15afe61
commit 1d0f3abadf
2 changed files with 3 additions and 2 deletions

View File

@ -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

View File

@ -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(', ')
} }
// ///////// // /////////