Welcome! Log In Create A New Profile

Advanced

[njs] Making custom top-level objects enumerable.

Dmitry Volyntsev
November 01, 2019 10:00AM
details: https://hg.nginx.org/njs/rev/9054169baaaf
branches:
changeset: 1218:9054169baaaf
user: Dmitry Volyntsev <xeioex@nginx.com>
date: Fri Nov 01 16:02:21 2019 +0300
description:
Making custom top-level objects enumerable.

diffstat:

src/njs_builtin.c | 4 +++-
src/test/njs_unit_test.c | 7 ++++++-
2 files changed, 9 insertions(+), 2 deletions(-)

diffs (52 lines):

diff -r 3e3b00388d69 -r 9054169baaaf src/njs_builtin.c
--- a/src/njs_builtin.c Fri Nov 01 15:48:21 2019 +0300
+++ b/src/njs_builtin.c Fri Nov 01 16:02:21 2019 +0300
@@ -889,7 +889,7 @@ njs_top_level_object(njs_vm_t *vm, njs_o
/* GC */

prop->value = *retval;
- prop->enumerable = 0;
+ prop->enumerable = self->enumerable;

lhq.value = prop;
njs_string_get(&self->name, &lhq.key);
@@ -1097,6 +1097,7 @@ static const njs_object_prop_t njs_glob
.value = njs_prop_handler2(njs_top_level_object, NJS_OBJECT_NJS,
NJS_NJS_HASH),
.writable = 1,
+ .enumerable = 1,
.configurable = 1,
},

@@ -1106,6 +1107,7 @@ static const njs_object_prop_t njs_glob
.value = njs_prop_handler2(njs_top_level_object, NJS_OBJECT_PROCESS,
NJS_PROCESS_HASH),
.writable = 1,
+ .enumerable = 1,
.configurable = 1,
},

diff -r 3e3b00388d69 -r 9054169baaaf src/test/njs_unit_test.c
--- a/src/test/njs_unit_test.c Fri Nov 01 15:48:21 2019 +0300
+++ b/src/test/njs_unit_test.c Fri Nov 01 16:02:21 2019 +0300
@@ -9249,6 +9249,9 @@ static njs_unit_test_t njs_test[] =
{ njs_str("Object.getOwnPropertyNames(this).includes('NaN')"),
njs_str("true") },

+ { njs_str("Object.keys(this)"),
+ njs_str("njs,process") },
+
{ njs_str("this.a = 1; this.a"),
njs_str("1") },

@@ -13259,7 +13262,9 @@ static njs_unit_test_t njs_test[] =
{ njs_str("var global = this;"
"function isMutableObject(v) {"
" var d = Object.getOwnPropertyDescriptor(global, v);"
- " return d.writable && !d.enumerable && d.configurable;"
+ " /* Custom top-level objects are enumerable. */"
+ " var enumerable = (v in {'njs':1, 'process':1}) ^ !d.enumerable;"
+ " return d.writable && enumerable && d.configurable;"
"};"
"['njs', 'process', 'Math', 'JSON'].every((v)=>isMutableObject(v))"),
njs_str("true") },
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[njs] Making custom top-level objects enumerable.

Dmitry Volyntsev 54 November 01, 2019 10:00AM



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

Online Users

Guests: 72
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