]> 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>
Mon, 13 Sep 2010 20:19:39 +0000 (22:19 +0200)
Fixes bug 628182.

vala/valasemanticanalyzer.vala

index db788fdc4aadc3bf71fc1f0bad9931bbefd736bb..576412c37e6c2407ec752631ba2b7fdd653c02f7 100644 (file)
@@ -409,9 +409,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;
@@ -466,9 +470,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;
                }