From 5806cbd0e462b88c1cf3fd600cc21cf730b5b2fa Mon Sep 17 00:00:00 2001 From: hongzhidao Date: Fri, 26 Apr 2019 19:57:54 +0800 Subject: [PATCH] Improved njs_function_native_call(). --- njs/njs_function.c | 4 +++- njs/njs_function.h | 2 +- njs/njs_vm.c | 31 +++++-------------------------- 3 files changed, 9 insertions(+), 28 deletions(-) diff --git a/njs/njs_function.c b/njs/njs_function.c index 6d36f9ff..a4bbdba3 100644 --- a/njs/njs_function.c +++ b/njs/njs_function.c @@ -566,7 +566,7 @@ njs_function_lambda_call(njs_vm_t *vm, njs_index_t retval, njs_ret_t njs_function_native_call(njs_vm_t *vm, njs_function_native_t native, njs_value_t *args, uint8_t *args_types, nxt_uint_t nargs, - njs_index_t retval) + njs_index_t retval, u_char *return_address) { njs_ret_t ret; njs_value_t *value; @@ -617,6 +617,8 @@ njs_function_native_call(njs_vm_t *vm, njs_function_native_t native, *value = vm->retval; } + vm->current = return_address; + njs_function_frame_free(vm, frame); return NXT_OK; diff --git a/njs/njs_function.h b/njs/njs_function.h index e07578a9..1d7b388b 100644 --- a/njs/njs_function.h +++ b/njs/njs_function.h @@ -173,7 +173,7 @@ njs_ret_t njs_function_lambda_call(njs_vm_t *vm, njs_index_t retval, u_char *return_address); njs_ret_t njs_function_native_call(njs_vm_t *vm, njs_function_native_t native, njs_value_t *args, uint8_t *args_types, nxt_uint_t nargs, - njs_index_t retval); + njs_index_t retval, u_char *return_address); void njs_function_frame_free(njs_vm_t *vm, njs_native_frame_t *frame); diff --git a/njs/njs_vm.c b/njs/njs_vm.c index c28cb88d..0e9675d0 100644 --- a/njs/njs_vm.c +++ b/njs/njs_vm.c @@ -2047,7 +2047,8 @@ njs_vmcode_function_call(njs_vm_t *vm, njs_value_t *invld, njs_value_t *retval) ret = njs_function_native_call(vm, function->u.native, frame->arguments, function->args_types, frame->nargs, - (njs_index_t) retval); + (njs_index_t) retval, + return_address); } } else { @@ -2055,16 +2056,7 @@ njs_vmcode_function_call(njs_vm_t *vm, njs_value_t *invld, njs_value_t *retval) return_address); } - switch (ret) { - case NXT_OK: - return sizeof(njs_vmcode_function_call_t); - - case NJS_APPLIED: - return 0; - - default: - return ret; - } + return (ret == NJS_APPLIED) ? 0 : ret; } @@ -2292,31 +2284,18 @@ const njs_vmcode_generic_t njs_continuation_nexus[] = { static njs_ret_t njs_vmcode_continuation(njs_vm_t *vm, njs_value_t *invld1, njs_value_t *invld2) { - u_char *return_address; njs_ret_t ret; njs_native_frame_t *frame; njs_continuation_t *cont; frame = vm->top_frame; - cont = njs_vm_continuation(vm); - return_address = cont->return_address; ret = njs_function_native_call(vm, cont->function, frame->arguments, cont->args_types, frame->nargs, - cont->retval); + cont->retval, cont->return_address); - switch (ret) { - case NXT_OK: - vm->current = return_address; - /* Fall through. */ - - case NJS_APPLIED: - return 0; - - default: - return ret; - } + return (ret == NJS_APPLIED) ? 0 : ret; } -- 2.47.3