[njs] Fixed Object's methods for the undefined value.
Dmitry Volyntsev
xeioex at nginx.com
Fri Feb 9 17:14:05 UTC 2018
details: http://hg.nginx.org/njs/rev/0a9fbf9e925f
branches:
changeset: 439:0a9fbf9e925f
user: Dmitry Volyntsev <xeioex at nginx.com>
date: Fri Feb 09 20:12:41 2018 +0300
description:
Fixed Object's methods for the undefined value.
diffstat:
njs/njs_object.c | 24 ++++++++++++------------
njs/test/njs_unit_test.c | 40 ++++++++++++++++++++++++++++++++--------
2 files changed, 44 insertions(+), 20 deletions(-)
diffs (166 lines):
diff -r 03eebf0e08cc -r 0a9fbf9e925f njs/njs_object.c
--- a/njs/njs_object.c Fri Feb 09 20:11:17 2018 +0300
+++ b/njs/njs_object.c Fri Feb 09 20:12:41 2018 +0300
@@ -741,8 +741,8 @@ njs_object_freeze(njs_vm_t *vm, njs_valu
nxt_lvlhsh_each_t lhe;
if (nargs < 2 || !njs_is_object(&args[1])) {
- njs_exception_type_error(vm, NULL, NULL);
- return NXT_ERROR;
+ vm->retval = njs_value_void;
+ return NXT_OK;
}
object = args[1].data.u.object;
@@ -780,8 +780,8 @@ njs_object_is_frozen(njs_vm_t *vm, njs_v
const njs_value_t *retval;
if (nargs < 2 || !njs_is_object(&args[1])) {
- njs_exception_type_error(vm, NULL, NULL);
- return NXT_ERROR;
+ vm->retval = njs_string_true;
+ return NXT_OK;
}
retval = &njs_string_false;
@@ -827,8 +827,8 @@ njs_object_seal(njs_vm_t *vm, njs_value_
nxt_lvlhsh_each_t lhe;
if (nargs < 2 || !njs_is_object(&args[1])) {
- njs_exception_type_error(vm, NULL, NULL);
- return NXT_ERROR;
+ vm->retval = (nargs < 2) ? njs_value_void : args[1];
+ return NXT_OK;
}
object = args[1].data.u.object;
@@ -865,8 +865,8 @@ njs_object_is_sealed(njs_vm_t *vm, njs_v
const njs_value_t *retval;
if (nargs < 2 || !njs_is_object(&args[1])) {
- njs_exception_type_error(vm, NULL, NULL);
- return NXT_ERROR;
+ vm->retval = njs_string_true;
+ return NXT_OK;
}
retval = &njs_string_false;
@@ -907,8 +907,8 @@ njs_object_prevent_extensions(njs_vm_t *
njs_index_t unused)
{
if (nargs < 2 || !njs_is_object(&args[1])) {
- njs_exception_type_error(vm, NULL, NULL);
- return NXT_ERROR;
+ vm->retval = (nargs < 2) ? njs_value_void : args[1];
+ return NXT_OK;
}
args[1].data.u.object->extensible = 0;
@@ -926,8 +926,8 @@ njs_object_is_extensible(njs_vm_t *vm, n
const njs_value_t *retval;
if (nargs < 2 || !njs_is_object(&args[1])) {
- njs_exception_type_error(vm, NULL, NULL);
- return NXT_ERROR;
+ vm->retval = njs_string_false;
+ return NXT_OK;
}
retval = args[1].data.u.object->extensible ? &njs_string_true
diff -r 03eebf0e08cc -r 0a9fbf9e925f njs/test/njs_unit_test.c
--- a/njs/test/njs_unit_test.c Fri Feb 09 20:11:17 2018 +0300
+++ b/njs/test/njs_unit_test.c Fri Feb 09 20:12:41 2018 +0300
@@ -6433,6 +6433,9 @@ static njs_unit_test_t njs_test[] =
{ nxt_string("Object.defineProperties(Object.freeze({}), {b:{}})"),
nxt_string("TypeError") },
+ { nxt_string("Object.freeze()"),
+ nxt_string("undefined") },
+
{ nxt_string("var o = Object.freeze({a:1}); o.a = 2; o.a"),
nxt_string("1") },
@@ -6535,11 +6538,14 @@ static njs_unit_test_t njs_test[] =
{ nxt_string("Object.isFrozen(new RegExp(''))"),
nxt_string("false") },
+ { nxt_string("Object.isFrozen()"),
+ nxt_string("true") },
+
{ nxt_string("Object.isFrozen(1)"),
- nxt_string("TypeError") },
+ nxt_string("true") },
{ nxt_string("Object.isFrozen('')"),
- nxt_string("TypeError") },
+ nxt_string("true") },
{ nxt_string("Object.isFrozen(Object.defineProperties({}, {a:{value:1}}))"),
nxt_string("false") },
@@ -6586,11 +6592,14 @@ static njs_unit_test_t njs_test[] =
{ nxt_string("var o = Object.seal({a:{b:1}}); o.a.b = 2; o.a.b"),
nxt_string("2") },
+ { nxt_string("Object.seal()"),
+ nxt_string("undefined") },
+
{ nxt_string("Object.seal(1)"),
- nxt_string("TypeError") },
+ nxt_string("1") },
{ nxt_string("Object.seal('')"),
- nxt_string("TypeError") },
+ nxt_string("") },
{ nxt_string("Object.isSealed({a:1})"),
nxt_string("false") },
@@ -6607,11 +6616,14 @@ static njs_unit_test_t njs_test[] =
{ nxt_string("Object.isSealed(new RegExp(''))"),
nxt_string("false") },
+ { nxt_string("Object.isSealed()"),
+ nxt_string("true") },
+
{ nxt_string("Object.isSealed(1)"),
- nxt_string("TypeError") },
+ nxt_string("true") },
{ nxt_string("Object.isSealed('')"),
- nxt_string("TypeError") },
+ nxt_string("true") },
{ nxt_string("Object.isSealed(Object.defineProperties({}, {a:{value:1}}))"),
nxt_string("false") },
@@ -6660,6 +6672,15 @@ static njs_unit_test_t njs_test[] =
{ nxt_string("var o = Object.preventExtensions({a:1}); o.b = 1; o.b"),
nxt_string("undefined") },
+ { nxt_string("Object.preventExtensions()"),
+ nxt_string("undefined") },
+
+ { nxt_string("Object.preventExtensions(1)"),
+ nxt_string("1") },
+
+ { nxt_string("Object.preventExtensions('')"),
+ nxt_string("") },
+
{ nxt_string("Object.isExtensible({})"),
nxt_string("true") },
@@ -6675,11 +6696,14 @@ static njs_unit_test_t njs_test[] =
{ nxt_string("Object.isExtensible(new RegExp(''))"),
nxt_string("true") },
+ { nxt_string("Object.isExtensible()"),
+ nxt_string("false") },
+
{ nxt_string("Object.isExtensible(1)"),
- nxt_string("TypeError") },
+ nxt_string("false") },
{ nxt_string("Object.isExtensible('')"),
- nxt_string("TypeError") },
+ nxt_string("false") },
{ nxt_string("Object.isExtensible(Object.preventExtensions({}))"),
nxt_string("false") },
More information about the nginx-devel
mailing list