}
public bool check_arguments (Expression expr, DataType mtype, List<Parameter> params, List<Expression> args) {
+ bool error = false;
+
Expression prev_arg = null;
Iterator<Expression> arg_it = args.iterator ();
var arg = arg_it.get ();
if (!check_argument (arg, i, param.direction)) {
expr.error = true;
- return false;
+ error = true;
}
i++;
} else {
Report.error (expr.source_reference, "Too few arguments, method `%s' does not take %d arguments".printf (mtype.to_string (), args.size));
}
- return false;
+ error = true;
} else {
var invocation_expr = expr as MethodCall;
var object_creation_expr = expr as ObjectCreationExpression;
var arg = arg_it.get ();
if (!check_argument (arg, i, param.direction)) {
expr.error = true;
- return false;
+ error = true;
}
prev_arg = arg;
if (ellipsis && !check_variadic_arguments (arg_it, i, expr.source_reference)) {
expr.error = true;
- return false;
+ error = true;
} else if (!ellipsis && arg_it != null && arg_it.next ()) {
expr.error = true;
var m = mtype as MethodType;
} else {
Report.error (expr.source_reference, "Too many arguments, method `%s' does not take %d arguments".printf (mtype.to_string (), args.size));
}
- return false;
+ error = true;
}
if (diag && prev_arg != null) {
}
}
- return true;
+ return !error;
}
bool check_argument (Expression arg, int i, ParameterDirection direction) {