]> git.mxchange.org Git - simgear.git/blobdiff - simgear/nasal/code.c
Improve (mostly Canvas event related) documentation.
[simgear.git] / simgear / nasal / code.c
index d1da92a3ef62f4ebb8c51b3f13044b38a5ac1676..2bf46451d8501223ed99e2ea97aa1ceb4786b09c 100644 (file)
@@ -71,7 +71,9 @@ static double numify(naContext ctx, naRef o)
     else if(IS_NIL(o)) ERR(ctx, "nil used in numeric context");
     else if(!IS_STR(o)) ERR(ctx, "non-scalar in numeric context");
     else if(naStr_tonum(o, &n)) return n;
-    else ERR(ctx, "non-numeric string in numeric context");
+    else naRuntimeError( ctx,
+                         "non-numeric string in numeric context: '%s'",
+                         naStr_data(o) );
     return 0;
 }
 
@@ -592,6 +594,9 @@ static naRef run(naContext ctx)
         case OP_LTE:   BINOP(l <= r ? 1 : 0); break;
         case OP_GT:    BINOP(l >  r ? 1 : 0); break;
         case OP_GTE:   BINOP(l >= r ? 1 : 0); break;
+        case OP_BIT_AND: BINOP((int)l & (int)r); break;
+        case OP_BIT_OR:  BINOP((int)l | (int)r); break;
+        case OP_BIT_XOR: BINOP((int)l ^ (int)r); break;
 #undef BINOP
 
         case OP_EQ: case OP_NEQ:
@@ -605,6 +610,9 @@ static naRef run(naContext ctx)
         case OP_NEG:
             STK(1) = naNum(-numify(ctx, STK(1)));
             break;
+        case OP_BIT_NEG:
+            STK(1) = naNum(~(int)numify(ctx, STK(1)));
+            break;
         case OP_NOT:
             STK(1) = naNum(boolify(ctx, STK(1)) ? 0 : 1);
             break;
@@ -941,12 +949,13 @@ naRef naContinue(naContext ctx)
 
 static void logError(naContext ctx)
 {
-    int i;
-    printf("logError\n");
+    int i, stack_depth = naStackDepth(ctx);
     printf("Nasal runtime error: %s\n", naGetError(ctx));
+    if( stack_depth < 1 )
+        return;
     printf("  at %s\n", naStr_data(naGetSourceFile(ctx, 0)));
     printf(", line %d\n", naGetLine(ctx, 0));
-    for(i = 1; i < naStackDepth(ctx); ++i )
+    for(i = 1; i < stack_depth; ++i )
         printf( "  called from: %s, line %d",
                 naStr_data(naGetSourceFile(ctx, i)),
                 naGetLine(ctx, i));