X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fnasal%2Fcodegen.c;h=15276e8c96ec4f59c68278c49eb1a45749371e76;hb=04c1e95f087b9f9885db1cf8fd61a488c253d742;hp=1664ca4f77d95d4d2ab1a42479a1bdcf51613f81;hpb=b05e32fa8c11e6d66bb70850751e170dc472a1a3;p=simgear.git diff --git a/simgear/nasal/codegen.c b/simgear/nasal/codegen.c index 1664ca4f..15276e8c 100644 --- a/simgear/nasal/codegen.c +++ b/simgear/nasal/codegen.c @@ -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); }