Welcome! Log In Create A New Profile

Advanced

[njs] Introduced njs_object_to_string().

Dmitry Volyntsev
September 16, 2022 02:48AM
details: https://hg.nginx.org/njs/rev/75922905bd9c
branches:
changeset: 1954:75922905bd9c
user: Dmitry Volyntsev <xeioex@nginx.com>
date: Thu Sep 15 17:56:35 2022 -0700
description:
Introduced njs_object_to_string().

diffstat:

src/njs_object.c | 20 +++++++++++++-------
src/njs_object.h | 20 ++++++++++++++++++--
2 files changed, 31 insertions(+), 9 deletions(-)

diffs (100 lines):

diff -r 46d505a902bb -r 75922905bd9c src/njs_object.c
--- a/src/njs_object.c Wed Sep 14 22:14:50 2022 -0700
+++ b/src/njs_object.c Thu Sep 15 17:56:35 2022 -0700
@@ -2343,17 +2343,23 @@ 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
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 -r 46d505a902bb -r 75922905bd9c src/njs_object.h
--- a/src/njs_object.h Wed Sep 14 22:14:50 2022 -0700
+++ b/src/njs_object.h Thu Sep 15 17:56:35 2022 -0700
@@ -65,6 +65,8 @@ njs_int_t njs_object_prototype_create_co
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_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
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;
}
@@ -211,6 +220,13 @@ njs_value_to_key(njs_vm_t *vm, njs_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)
{
njs_int_t ret;
_______________________________________________
nginx-devel mailing list -- nginx-devel@nginx.org
To unsubscribe send an email to nginx-devel-leave@nginx.org
Subject Author Views Posted

[njs] Introduced njs_object_to_string().

Dmitry Volyntsev 250 September 16, 2022 02:48AM



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

Online Users

Guests: 80
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready