Welcome! Log In Create A New Profile

Advanced

[njs] Improved njs_function_native_call().

Dmitry Volyntsev
April 27, 2019 10:34AM
details: https://hg.nginx.org/njs/rev/b9becf29a21d
branches:
changeset: 933:b9becf29a21d
user: hongzhidao <hongzhidao@gmail.com>
date: Fri Apr 26 19:57:54 2019 +0800
description:
Improved njs_function_native_call().

diffstat:

njs/njs_function.c | 4 +++-
njs/njs_function.h | 2 +-
njs/njs_vm.c | 33 ++++++---------------------------
3 files changed, 10 insertions(+), 29 deletions(-)

diffs (99 lines):

diff -r 60e98e247a53 -r b9becf29a21d njs/njs_function.c
--- a/njs/njs_function.c Fri Apr 26 19:30:43 2019 +0300
+++ b/njs/njs_function.c Fri Apr 26 19:57:54 2019 +0800
@@ -566,7 +566,7 @@ njs_function_lambda_call(njs_vm_t *vm, n
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, n
*value = vm->retval;
}

+ vm->current = return_address;
+
njs_function_frame_free(vm, frame);

return NXT_OK;
diff -r 60e98e247a53 -r b9becf29a21d njs/njs_function.h
--- a/njs/njs_function.h Fri Apr 26 19:30:43 2019 +0300
+++ b/njs/njs_function.h Fri Apr 26 19:57:54 2019 +0800
@@ -173,7 +173,7 @@ njs_ret_t njs_function_lambda_call(njs_v
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 -r 60e98e247a53 -r b9becf29a21d njs/njs_vm.c
--- a/njs/njs_vm.c Fri Apr 26 19:30:43 2019 +0300
+++ b/njs/njs_vm.c Fri Apr 26 19:57:54 2019 +0800
@@ -2047,7 +2047,8 @@ njs_vmcode_function_call(njs_vm_t *vm, n
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, n
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_continua
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);
-
- switch (ret) {
- case NXT_OK:
- vm->current = return_address;
- /* Fall through. */
-
- case NJS_APPLIED:
- return 0;
-
- default:
- return ret;
- }
+ cont->retval, cont->return_address);
+
+ return (ret == NJS_APPLIED) ? 0 : ret;
}


_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[njs] Improved njs_function_native_call().

Dmitry Volyntsev 312 April 27, 2019 10:34AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 309
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready