]> git.kaiwu.me - njs.git/commitdiff
Fixed return value on deleting non-existent property.
authorValentin Bartenev <vbart@nginx.com>
Mon, 6 May 2019 18:24:31 +0000 (21:24 +0300)
committerValentin Bartenev <vbart@nginx.com>
Mon, 6 May 2019 18:24:31 +0000 (21:24 +0300)
njs/njs_vm.c
njs/test/njs_unit_test.c

index 0e9675d0fc3fa56da61a6098352a8679dff2dd49..00fa2dc35c690606c6ecfe9889685cbc7b8c9504 100644 (file)
@@ -712,12 +712,9 @@ njs_vmcode_property_delete(njs_vm_t *vm, njs_value_t *object,
     njs_value_t *property)
 {
     njs_ret_t             ret;
-    const njs_value_t     *retval;
     njs_object_prop_t     *prop;
     njs_property_query_t  pq;
 
-    retval = &njs_value_false;
-
     njs_property_query_init(&pq, NJS_PROPERTY_QUERY_DELETE, 1);
 
     ret = njs_property_query(vm, &pq, object, property);
@@ -734,7 +731,6 @@ njs_vmcode_property_delete(njs_vm_t *vm, njs_value_t *object,
 
         case NJS_PROPERTY_REF:
             njs_set_invalid(prop->value.data.u.value);
-            retval = &njs_value_true;
             goto done;
 
         case NJS_PROPERTY_HANDLER:
@@ -744,7 +740,6 @@ njs_vmcode_property_delete(njs_vm_t *vm, njs_value_t *object,
                     return ret;
                 }
 
-                retval = &njs_value_true;
                 goto done;
             }
 
@@ -768,8 +763,6 @@ njs_vmcode_property_delete(njs_vm_t *vm, njs_value_t *object,
         prop->type = NJS_WHITEOUT;
         njs_set_invalid(&prop->value);
 
-        retval = &njs_value_true;
-
         break;
 
     case NXT_DECLINED:
@@ -784,7 +777,7 @@ njs_vmcode_property_delete(njs_vm_t *vm, njs_value_t *object,
 
 done:
 
-    vm->retval = *retval;
+    vm->retval = njs_value_true;
 
     return sizeof(njs_vmcode_3addr_t);
 }
index 366f1863368c35ccb51cb97b4e0a69d92ac0cf8c..9abf5ed92782a18058aeb7e2e13e4a88cc8847a0 100644 (file)
@@ -3128,6 +3128,15 @@ static njs_unit_test_t  njs_test[] =
     { nxt_string("delete 1"),
       nxt_string("true") },
 
+    { nxt_string("var a = []; delete a[1]"),
+      nxt_string("true") },
+
+    { nxt_string("var o = {}; [delete o.m, delete o.m]"),
+      nxt_string("true,true") },
+
+    { nxt_string("[delete Array.nonexistent, delete Array.Array]"),
+      nxt_string("true,true") },
+
     { nxt_string("var a; delete (a = 1); a"),
       nxt_string("1") },
 
@@ -3261,7 +3270,7 @@ static njs_unit_test_t  njs_test[] =
       nxt_string("1,2,34") },
 
     { nxt_string("delete[]['4e9']"),
-      nxt_string("false") },
+      nxt_string("true") },
 
     { nxt_string("var n = 1, a = [ n += 1 ]; a"),
       nxt_string("2") },