]> git.mxchange.org Git - simgear.git/blobdiff - simgear/nasal/codegen.c
Fix crash in code generator for some bad lvalue expressions
[simgear.git] / simgear / nasal / codegen.c
index 1664ca4f77d95d4d2ab1a42479a1bdcf51613f81..15276e8c96ec4f59c68278c49eb1a45749371e76 100644 (file)
@@ -110,6 +110,7 @@ static int genScalarConstant(struct Parser* p, struct Token* t)
 
 static int genLValue(struct Parser* p, struct Token* t, int* cidx)
 {
+    if(!t) naParseError(p, "bad lvalue", -1);
     if(t->type == TOK_LPAR && t->rule != PREC_SUFFIX) {
         return genLValue(p, LEFT(t), cidx); // Handle stuff like "(a) = 1"
     } else if(t->type == TOK_SYMBOL) {
@@ -152,6 +153,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_MINUS && RIGHT(t) && 
+       RIGHT(t)->type == TOK_LITERAL && !RIGHT(t)->str)
+    {
+        /* default arguments are constants, but "-1" parses as two
+         * tokens, so we have to subset the expression generator for that
+         * case */
+        RIGHT(t)->num *= -1;
+        return defArg(p, RIGHT(t));
+    }
     return findConstantIndex(p, t);
 }