From: Jürg Billeter Date: Mon, 13 Sep 2010 20:19:39 +0000 (+0200) Subject: Fix crash on invalid constructor chain up X-Git-Tag: 0.10.0~23 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2acd56c41bb0f7c3449322d0c20ad5d6b91b6009;p=thirdparty%2Fvala.git Fix crash on invalid constructor chain up Fixes bug 628182. --- diff --git a/vala/valasemanticanalyzer.vala b/vala/valasemanticanalyzer.vala index e710912c5..0d9057ffa 100644 --- a/vala/valasemanticanalyzer.vala +++ b/vala/valasemanticanalyzer.vala @@ -418,9 +418,13 @@ public class Vala.SemanticAnalyzer : CodeVisitor { if (arg_it == null || !arg_it.next ()) { if (param.initializer == null) { - var m = (MethodType) mtype; expr.error = true; - Report.error (expr.source_reference, "%d missing arguments for `%s'".printf (m.get_parameters ().size - args.size, m.to_prototype_string ())); + var m = mtype as MethodType; + if (m != null) { + Report.error (expr.source_reference, "%d missing arguments for `%s'".printf (m.get_parameters ().size - args.size, m.to_prototype_string ())); + } else { + Report.error (expr.source_reference, "Too few arguments, method `%s' does not take %d arguments".printf (mtype.to_string (), args.size)); + } return false; } else { var invocation_expr = expr as MethodCall; @@ -475,9 +479,13 @@ public class Vala.SemanticAnalyzer : CodeVisitor { i++; } } else if (!ellipsis && arg_it != null && arg_it.next ()) { - var m = (MethodType) mtype; expr.error = true; - Report.error (expr.source_reference, "%d extra arguments for `%s'".printf (args.size - m.get_parameters ().size, m.to_prototype_string ())); + var m = mtype as MethodType; + if (m != null) { + Report.error (expr.source_reference, "%d extra arguments for `%s'".printf (args.size - m.get_parameters ().size, m.to_prototype_string ())); + } else { + Report.error (expr.source_reference, "Too many arguments, method `%s' does not take %d arguments".printf (mtype.to_string (), args.size)); + } return false; }