]> git.mxchange.org Git - simgear.git/commitdiff
Bug 737, crash parsing default args.
authorJames Turner <zakalawe@mac.com>
Tue, 23 Jul 2013 08:43:08 +0000 (09:43 +0100)
committerJames Turner <zakalawe@mac.com>
Tue, 23 Jul 2013 08:45:22 +0000 (09:45 +0100)
Reject function evaluation explicitly when building
default arguments.

simgear/nasal/codegen.c

index 059c1144525b39a41bbd9245376cbfc3874fd110..d8b701b6940a19904a458421da08f714a92caf16 100644 (file)
@@ -147,7 +147,15 @@ static void genEqOp(int op, struct Parser* p, struct Token* t)
 
 static int defArg(struct Parser* p, struct Token* t)
 {
-    if(t->type == TOK_LPAR) return defArg(p, RIGHT(t));
+    if(t->type == TOK_LPAR) {
+        // http://code.google.com/p/flightgear-bugs/issues/detail?id=737
+        // TOK_LPAR can mean multi-value assignment or function call,
+        // disambigaute by checking the rule of the token
+        if (t->rule == PREC_SUFFIX)
+            naParseError(p, "default arguments cannot be function calls", t->line);
+        return defArg(p, RIGHT(t));
+    }
+    
     if(t->type == TOK_MINUS && RIGHT(t) && 
        RIGHT(t)->type == TOK_LITERAL && !RIGHT(t)->str)
     {