/*=== rc=0, result='21' top after pop: 0 rc=1, result='Error: my error' top after pop: 0 final top: 0 ===*/ void test(duk_context *ctx) { int rc; /* basic success case */ duk_eval_string(ctx, "(function (x,y) { return x+y; })"); duk_push_int(ctx, 10); duk_push_int(ctx, 11); rc = duk_pcall(ctx, 2); printf("rc=%d, result='%s'\n", rc, duk_safe_to_string(ctx, -1)); duk_pop(ctx); printf("top after pop: %d\n", duk_get_top(ctx)); /* basic error case */ duk_eval_string(ctx, "(function (x,y) { throw new Error('my error'); })"); duk_push_int(ctx, 10); duk_push_int(ctx, 11); rc = duk_pcall(ctx, 2); printf("rc=%d, result='%s'\n", rc, duk_safe_to_string(ctx, -1)); duk_pop(ctx); printf("top after pop: %d\n", duk_get_top(ctx)); printf("final top: %d\n", duk_get_top(ctx)); }