]> git.kaiwu.me - njs.git/commitdiff
Fixed string object creation using Object() constructor.
authorDmitry Volyntsev <xeioex@nginx.com>
Thu, 25 Apr 2019 12:19:36 +0000 (15:19 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Thu, 25 Apr 2019 12:19:36 +0000 (15:19 +0300)
njs/njs_object.c
njs/njs_string.c
njs/test/njs_unit_test.c

index 8e47f7955e38ad5f0aed3f3de3805bfeec16ca77..8526dda3a5e1b8d9af6174b8fd4ab84ff8dbad69 100644 (file)
@@ -107,7 +107,14 @@ njs_object_value_alloc(njs_vm_t *vm, const njs_value_t *value, nxt_uint_t type)
 
     if (nxt_fast_path(ov != NULL)) {
         nxt_lvlhsh_init(&ov->object.hash);
-        nxt_lvlhsh_init(&ov->object.shared_hash);
+
+        if (type == NJS_STRING) {
+            ov->object.shared_hash = vm->shared->string_instance_hash;
+
+        } else {
+            nxt_lvlhsh_init(&ov->object.shared_hash);
+        }
+
         ov->object.type = njs_object_value_type(type);
         ov->object.shared = 0;
         ov->object.extensible = 1;
index e20a9207ccbad70a3b8c4f9bca929c3f20b33fd0..1a483c251b120b963d74e1905595379d4cc93b3f 100644 (file)
@@ -555,8 +555,6 @@ njs_string_constructor(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
             return NXT_ERROR;
         }
 
-        object->shared_hash = vm->shared->string_instance_hash;
-
         vm->retval.data.u.object = object;
         vm->retval.type = NJS_OBJECT_STRING;
         vm->retval.data.truth = 1;
index 663ac55f609197420edc828126ce189e9380ca8d..7bd183dd50105391fbf8b96079a47f45c2a939d0 100644 (file)
@@ -8437,6 +8437,9 @@ static njs_unit_test_t  njs_test[] =
     { nxt_string("new String(123)"),
       nxt_string("123") },
 
+    { nxt_string("Object('123').length"),
+      nxt_string("3") },
+
     { nxt_string("new String(123).length"),
       nxt_string("3") },