[njs] Added Object.is().
Dmitry Volyntsev
xeioex at nginx.com
Thu Nov 28 12:10:48 UTC 2019
details: https://hg.nginx.org/njs/rev/9dfc67399ef5
branches:
changeset: 1268:9dfc67399ef5
user: Artem S. Povalyukhin <artem.povaluhin at gmail.com>
date: Thu Nov 28 09:59:10 2019 +0300
description:
Added Object.is().
This closes #260 issue on Github.
diffstat:
src/njs_object.c | 20 ++++++++++++++++++++
src/test/njs_unit_test.c | 35 +++++++++++++++++++++++++++++++++++
2 files changed, 55 insertions(+), 0 deletions(-)
diffs (82 lines):
diff -r 24b5c0103726 -r 9dfc67399ef5 src/njs_object.c
--- a/src/njs_object.c Wed Nov 27 18:28:13 2019 +0300
+++ b/src/njs_object.c Thu Nov 28 09:59:10 2019 +0300
@@ -1761,6 +1761,17 @@ njs_object_assign(njs_vm_t *vm, njs_valu
}
+static njs_int_t
+njs_object_is(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
+ njs_index_t unused)
+{
+ njs_set_boolean(&vm->retval, njs_values_same(njs_arg(args, nargs, 1),
+ njs_arg(args, nargs, 2)));
+
+ return NJS_OK;
+}
+
+
/*
* The __proto__ property of booleans, numbers and strings primitives,
* of objects created by Boolean(), Number(), and String() constructors,
@@ -2052,6 +2063,15 @@ static const njs_object_prop_t njs_obje
.writable = 1,
.configurable = 1,
},
+
+ /* Object.is(). */
+ {
+ .type = NJS_PROPERTY,
+ .name = njs_string("is"),
+ .value = njs_native_function(njs_object_is, 2),
+ .writable = 1,
+ .configurable = 1,
+ },
};
diff -r 24b5c0103726 -r 9dfc67399ef5 src/test/njs_unit_test.c
--- a/src/test/njs_unit_test.c Wed Nov 27 18:28:13 2019 +0300
+++ b/src/test/njs_unit_test.c Thu Nov 28 09:59:10 2019 +0300
@@ -12036,6 +12036,41 @@ static njs_unit_test_t njs_test[] =
{ njs_str("Object.isExtensible(undefined)"),
njs_str("false") },
+ /* Object.is() */
+
+ { njs_str("typeof Object.is"),
+ njs_str("function") },
+
+ { njs_str("Object.is.length == 2"),
+ njs_str("true") },
+
+ { njs_str("Object.is()"),
+ njs_str("true") },
+
+ { njs_str("[undefined, null, false, NaN, '', Symbol(), {}]"
+ ".map((x) => Object.is(x, x))"
+ ".every((x) => x === true)"),
+ njs_str("true") },
+
+ { njs_str("[null, false, NaN, '', Symbol(), {}]"
+ ".map((x) => Object.is(x) || Object.is(void 0, x))"
+ ".every((x) => x === false)"),
+ njs_str("true") },
+
+ { njs_str("[false, NaN, '', Symbol()]"
+ ".map((x) => Object.is(Object(x), Object(x)))"
+ ".every((x) => x === false)"),
+ njs_str("true") },
+
+ { njs_str("Object.is(0, -0)"),
+ njs_str("false") },
+
+ { njs_str("Object.is(0, null)"),
+ njs_str("false") },
+
+ { njs_str("Object.is(42, '42')"),
+ njs_str("false") },
+
{ njs_str(
"var fail;"
"function isConfigurableMethods(o) {"
More information about the nginx-devel
mailing list