]> git.mxchange.org Git - simgear.git/blobdiff - simgear/nasal/code.c
Nasal: allow ghost as 'me' for 'call'
[simgear.git] / simgear / nasal / code.c
index 395a3cdd99ddd9e96153b6556a2d6ff70055006b..5f94217f45d403c769a5f898294994587f3fc99b 100644 (file)
@@ -874,8 +874,10 @@ naRef naCall(naContext ctx, naRef func, int argc, naRef* args,
     }
 
     if(IS_CCODE(PTR(func).func->code)) {
-        naCFunction fp = PTR(PTR(func).func->code).ccode->fptr;
-        result = (*fp)(ctx, obj, argc, args);
+        struct naCCode *ccode = PTR(PTR(func).func->code).ccode;
+        result = ccode->fptru
+               ? (*ccode->fptru)(ctx, obj, argc, args, ccode->user_data)
+               : (*ccode->fptr) (ctx, obj, argc, args);
         if(!ctx->callParent) naModUnlock();
         return result;
     }
@@ -939,12 +941,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));