]> git.kaiwu.me - njs.git/commitdiff
Fixed Object() constructor for object types arguments.
authorDmitry Volyntsev <xeioex@nginx.com>
Wed, 29 Aug 2018 17:32:11 +0000 (20:32 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Wed, 29 Aug 2018 17:32:11 +0000 (20:32 +0300)
njs/njs_object.c
njs/test/njs_unit_test.c

index 86e7b543df8937c4d26043f2c2e8466d39194880..11d52eb75b2db010359f8cf6654490fd950aae3e 100644 (file)
@@ -535,8 +535,8 @@ njs_object_constructor(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
     njs_object_t       *object;
     const njs_value_t  *value;
 
-    type = NJS_OBJECT;
     value = njs_arg(args, nargs, 1);
+    type = value->type;
 
     if (njs_is_null_or_void(value)) {
 
@@ -545,6 +545,8 @@ njs_object_constructor(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
             return NXT_ERROR;
         }
 
+        type = NJS_OBJECT;
+
     } else {
 
         if (njs_is_object(value)) {
@@ -553,16 +555,16 @@ njs_object_constructor(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         } else if (njs_is_primitive(value)) {
 
             /* value->type is the same as prototype offset. */
-            object = njs_object_value_alloc(vm, value, value->type);
+            object = njs_object_value_alloc(vm, value, type);
             if (nxt_slow_path(object == NULL)) {
                 return NXT_ERROR;
             }
 
-            type = njs_object_value_type(value->type);
+            type = njs_object_value_type(type);
 
         } else {
             njs_type_error(vm, "unexpected constructor argument:%s",
-                           njs_type_string(value->type));
+                           njs_type_string(type));
 
             return NXT_ERROR;
         }
index 8d98e950be6267b4b3872aefa73042e223bb33bb..842d5afd59104d6878be73d3fdc5e23006e4969b 100644 (file)
@@ -6060,6 +6060,9 @@ static njs_unit_test_t  njs_test[] =
     { nxt_string("var o = {}; o === new Object(o)"),
       nxt_string("true") },
 
+    { nxt_string("var o = Object([]); Object.prototype.toString.call(o)"),
+      nxt_string("[object Array]") },
+
     { nxt_string("Object.name"),
       nxt_string("Object") },