From: Dmitry Volyntsev Date: Fri, 16 Sep 2022 00:56:35 +0000 (-0700) Subject: Introduced njs_object_to_string(). X-Git-Tag: 0.7.8~28 X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=2f585c83ce424553be466ed41490990371a141f3;p=njs.git Introduced njs_object_to_string(). --- diff --git a/src/njs_object.c b/src/njs_object.c index 31bd2b19..ff74ffe4 100644 --- a/src/njs_object.c +++ b/src/njs_object.c @@ -2342,18 +2342,24 @@ static const njs_value_t njs_object_arguments_string = njs_int_t njs_object_prototype_to_string(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, njs_index_t unused) +{ + return njs_object_to_string(vm, &args[0], &vm->retval); +} + + +njs_int_t +njs_object_to_string(njs_vm_t *vm, njs_value_t *this, njs_value_t *retval) { u_char *p; njs_int_t ret; - njs_value_t tag, *this; + njs_value_t tag; njs_string_prop_t string; const njs_value_t *name; - this = njs_argument(args, 0); - if (njs_is_null_or_undefined(this)) { - vm->retval = njs_is_null(this) ? njs_object_null_string - : njs_object_undefined_string; + njs_value_assign(retval, + njs_is_null(this) ? &njs_object_null_string + : &njs_object_undefined_string); return NJS_OK; } @@ -2418,14 +2424,14 @@ njs_object_prototype_to_string(njs_vm_t *vm, njs_value_t *args, return NJS_ERROR; } - vm->retval = *name; + njs_value_assign(retval, name); return NJS_OK; } (void) njs_string_prop(&string, &tag); - p = njs_string_alloc(vm, &vm->retval, string.size + njs_length("[object ]"), + p = njs_string_alloc(vm, retval, string.size + njs_length("[object ]"), string.length + njs_length("[object ]")); if (njs_slow_path(p == NULL)) { return NJS_ERROR; diff --git a/src/njs_object.h b/src/njs_object.h index db075edb..90cf9235 100644 --- a/src/njs_object.h +++ b/src/njs_object.h @@ -65,6 +65,8 @@ njs_int_t njs_object_prototype_create_constructor(njs_vm_t *vm, njs_value_t *retval); njs_value_t *njs_property_constructor_set(njs_vm_t *vm, njs_lvlhsh_t *hash, njs_value_t *constructor); +njs_int_t njs_object_to_string(njs_vm_t *vm, njs_value_t *value, + njs_value_t *retval); njs_int_t njs_object_prototype_to_string(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, njs_index_t unused); njs_int_t njs_object_length(njs_vm_t *vm, njs_value_t *value, int64_t *dst); @@ -186,7 +188,8 @@ njs_primitive_value_to_key(njs_vm_t *vm, njs_value_t *dst, njs_inline njs_int_t -njs_value_to_key(njs_vm_t *vm, njs_value_t *dst, njs_value_t *value) +njs_value_to_key2(njs_vm_t *vm, njs_value_t *dst, njs_value_t *value, + njs_bool_t convert) { njs_int_t ret; njs_value_t primitive; @@ -197,7 +200,13 @@ njs_value_to_key(njs_vm_t *vm, njs_value_t *dst, njs_value_t *value) value = njs_object_value(value); } else { - ret = njs_value_to_primitive(vm, &primitive, value, 1); + if (convert) { + ret = njs_value_to_primitive(vm, &primitive, value, 1); + + } else { + ret = njs_object_to_string(vm, value, &primitive); + } + if (njs_slow_path(ret != NJS_OK)) { return ret; } @@ -210,6 +219,13 @@ njs_value_to_key(njs_vm_t *vm, njs_value_t *dst, njs_value_t *value) } +njs_inline njs_int_t +njs_value_to_key(njs_vm_t *vm, njs_value_t *dst, njs_value_t *value) +{ + return njs_value_to_key2(vm, dst, value, 1); +} + + njs_inline njs_int_t njs_key_string_get(njs_vm_t *vm, njs_value_t *key, njs_str_t *str) {