]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Fix crash on invalid constructor chain up
authorJürg Billeter <j@bitron.ch>
Mon, 13 Sep 2010 20:19:39 +0000 (22:19 +0200)
committerJürg Billeter <j@bitron.ch>
Wed, 15 Sep 2010 19:24:14 +0000 (21:24 +0200)
Fixes bug 628182.

vala/valasemanticanalyzer.vala

index e710912c50329546d95a9785de84d2fe9b623234..0d9057ffad9648a87ac4517290c37e3e449a2e23 100644 (file)
@@ -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;
                }