]> git.mxchange.org Git - simgear.git/blobdiff - simgear/nasal/codegen.c
Alas. Fix #pragma magic for GCC <= 4.5.
[simgear.git] / simgear / nasal / codegen.c
index 492b0f207283480119f41c83138cc23d85a6386c..059c1144525b39a41bbd9245376cbfc3874fd110 100644 (file)
@@ -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);