X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fnasal%2Fcodegen.c;h=059c1144525b39a41bbd9245376cbfc3874fd110;hb=423eba373389684061fc0a8c7b78292f10011ed7;hp=492b0f207283480119f41c83138cc23d85a6386c;hpb=dd1ea541ecc4403bcea2ca8c60c03971d1f4338f;p=simgear.git diff --git a/simgear/nasal/codegen.c b/simgear/nasal/codegen.c index 492b0f20..059c1144 100644 --- a/simgear/nasal/codegen.c +++ b/simgear/nasal/codegen.c @@ -233,7 +233,7 @@ static void genHashElem(struct Parser* p, struct Token* t) { if(!t || t->type == TOK_EMPTY) return; - if(t->type != TOK_COLON) + if(t->type != TOK_COLON || !LEFT(t)) naParseError(p, "bad hash/object initializer", t->line); if(LEFT(t)->type == TOK_SYMBOL) genScalarConstant(p, LEFT(t)); else if(LEFT(t)->type == TOK_LITERAL) genExpr(p, LEFT(t)); @@ -536,6 +536,9 @@ static void genAssign(struct Parser* p, struct Token* t) { struct Token *lv = LEFT(t), *rv = RIGHT(t); int len, dummy, var=0; + if (!lv) + naParseError(p, "bad assignment, missing variable", t->line); + else if(parListLen(lv) || (lv->type == TOK_VAR && parListLen(RIGHT(lv)))) { if(lv->type == TOK_VAR) { lv = RIGHT(lv); var = 1; } len = parListLen(lv); @@ -560,9 +563,10 @@ static void genAssign(struct Parser* p, struct Token* t) static void genSlice(struct Parser* p, struct Token* t) { + if(!t || t->type==TOK_EMPTY) naParseError(p, "empty slice expression", -1); if(t->type == TOK_COLON) { - genExpr(p, LEFT(t)); - genExpr(p, RIGHT(t)); + if(LEFT(t)) genExpr(p, LEFT(t)); else emit(p, OP_PUSHNIL); + if(RIGHT(t)) genExpr(p, RIGHT(t)); else emit(p, OP_PUSHNIL); emit(p, OP_SLICE2); } else { genExpr(p, t);