]> git.kaiwu.me - njs.git/commitdiff
Fixed Object's methods for the undefined value.
authorDmitry Volyntsev <xeioex@nginx.com>
Fri, 9 Feb 2018 17:12:41 +0000 (20:12 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Fri, 9 Feb 2018 17:12:41 +0000 (20:12 +0300)
njs/njs_object.c
njs/test/njs_unit_test.c

index 6e962e1e013558f7e4d6696e802adafbcfd626e5..6976195e5c15558a59af9384a00bbdec45d4f707 100644 (file)
@@ -741,8 +741,8 @@ njs_object_freeze(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
     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_value_t *args, nxt_uint_t nargs,
     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_t *args, nxt_uint_t nargs,
     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_value_t *args, nxt_uint_t nargs,
     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 *vm, njs_value_t *args, nxt_uint_t nargs,
     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, njs_value_t *args, nxt_uint_t nargs,
     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
index 3f3f5602d03cd6072ab02d186356a15c9a7d1f81..6b6084b1a939db3e80cf4eb6ad165a532731fbba 100644 (file)
@@ -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") },