static void execute_code (JSVirtualMachine *vm, JSNode *object, Function *f, unsigned int argc, JSNode *argv) { JSNode *sp; JSNode *fp; JSNode *function; JSNode builtin_result; unsigned char *pc; JSInt32 i, j; JSInt8 i8; char buf[512]; /* Create the initial stack frame by hand. */ sp = vm->sp; /* Protect the function from gc. */ JS_SP0->type = JS_FUNC; JS_SP0->u.vfunction = js_vm_make_function (vm, f); JS_PUSH (); /* Push arguments to the stack. */ i = argc; for (i--; i >= 0; i--) { JS_COPY (JS_SP0, &argv[i]); JS_PUSH (); } /* This pointer. */ if (object) JS_COPY (JS_SP0, object); else JS_SP0->type = JS_NULL; JS_PUSH (); /* Init fp and pc so our SUBROUTINE_CALL will work. */ fp = NULL; pc = NULL; JS_SUBROUTINE_CALL (f); /* Ok, now we are ready to run. */ while (1) { switch (*pc++) { /* include eswt0.h */ #include "eswt0.h" /* end include eswt0.h */ default: sprintf_P (buf, vmswt0_string_5, *(pc - 1), JS_HOST_LINE_BREAK); //js_iostream_write (vm->s_stderr, buf, strlen (buf)); //js_iostream_flush (vm->s_stderr); abort (); break; } } done: /* All done. */ JS_COPY (&vm->exec_result, JS_SP1); }
static void execute_code (JSVirtualMachine *vm, Function *f, unsigned int argc, JSNode *argv) { JSNode *sp; JSNode *fp; JSNode *function; JSNode builtin_result; Compiled *pc; JSInt32 i, j; JSInt8 i8; /* Create the initial stack frame by hand. */ sp = vm->sp; /* Protect the function from gc. */ JS_SP0->type = JS_FUNC; JS_SP0->u.vfunction = js_vm_make_function (vm, f); JS_PUSH (); /* Push arguments to the stack. */ i = argc; for (i--; i >= 0; i--) { JS_COPY (JS_SP0, &argv[i]); JS_PUSH (); } /* Empty this pointer. */ JS_SP0->type = JS_NULL; JS_PUSH (); /* Init fp and pc so our SUBROUTINE_CALL will work. */ fp = NULL; pc = NULL; JS_SUBROUTINE_CALL (f); /* Ok, now we are ready to run. */ while (1) { switch ((pc++)->u.op) { /* include eswitch.h */ #include "eswitch.h" /* end include eswitch.h */ default: fprintf (stderr, "execute_code: unknown opcode %d\n", (pc - 1)->u.op); exit (1); break; } } done: /* All done. */ JS_COPY (&vm->exec_result, JS_SP1); }