details: https://hg.nginx.org/njs/rev/7f43ac9cdc30 branches: changeset: 1970:7f43ac9cdc30 user: Dmitry Volyntsev <xei...@nginx.com> date: Thu Sep 29 16:32:45 2022 -0700 description: Introduced njs_object_proto_lookup() where appropriate.
diffstat: src/njs_function.c | 21 +++++---------------- src/njs_string.c | 16 +++------------- 2 files changed, 8 insertions(+), 29 deletions(-) diffs (68 lines): diff -r c2a05d35ad72 -r 7f43ac9cdc30 src/njs_function.c --- a/src/njs_function.c Thu Sep 29 00:47:43 2022 -0700 +++ b/src/njs_function.c Thu Sep 29 16:32:45 2022 -0700 @@ -1302,26 +1302,15 @@ njs_int_t njs_function_instance_length(njs_vm_t *vm, njs_object_prop_t *prop, njs_value_t *value, njs_value_t *setval, njs_value_t *retval) { - njs_object_t *proto; njs_function_t *function; - proto = njs_object(value); - - do { - if (njs_fast_path(proto->type == NJS_FUNCTION)) { - break; - } - - proto = proto->__proto__; - } while (proto != NULL); - - if (njs_slow_path(proto == NULL)) { - njs_internal_error(vm, "no function in proto chain"); - return NJS_ERROR; + function = njs_object_proto_lookup(njs_object(value), NJS_FUNCTION, + njs_function_t); + if (njs_slow_path(function == NULL)) { + njs_set_undefined(retval); + return NJS_DECLINED; } - function = (njs_function_t *) proto; - njs_set_number(retval, function->args_count); return NJS_OK; diff -r c2a05d35ad72 -r 7f43ac9cdc30 src/njs_string.c --- a/src/njs_string.c Thu Sep 29 00:47:43 2022 -0700 +++ b/src/njs_string.c Thu Sep 29 16:32:45 2022 -0700 @@ -664,7 +664,6 @@ njs_string_instance_length(njs_vm_t *vm, { size_t size; uintptr_t length; - njs_object_t *proto; njs_object_value_t *ov; /* @@ -674,18 +673,9 @@ njs_string_instance_length(njs_vm_t *vm, length = 0; if (njs_slow_path(njs_is_object(value))) { - proto = njs_object(value); - - do { - if (njs_fast_path(proto->type == NJS_OBJECT_VALUE)) { - break; - } - - proto = proto->__proto__; - } while (proto != NULL); - - if (proto != NULL) { - ov = (njs_object_value_t *) proto; + ov = njs_object_proto_lookup(njs_object(value), NJS_OBJECT_VALUE, + njs_object_value_t); + if (ov != NULL) { value = &ov->value; } } _______________________________________________ nginx-devel mailing list -- nginx-devel@nginx.org To unsubscribe send an email to nginx-devel-le...@nginx.org