idx = njs_string_to_index(&keys->start[i]);
if (idx >= length) {
ret = njs_value_property_delete(vm, value, &keys->start[i],
- NULL);
+ NULL, 1);
if (njs_slow_path(ret == NJS_ERROR)) {
goto done;
}
while (from > 0) {
ret = njs_value_property_delete(vm, this, &keys->start[--from],
- &entry);
+ &entry, 1);
if (njs_slow_path(ret == NJS_ERROR)) {
njs_array_destroy(vm, keys);
return ret;
njs_int_t
njs_value_property_delete(njs_vm_t *vm, njs_value_t *value, njs_value_t *key,
- njs_value_t *removed)
+ njs_value_t *removed, njs_bool_t thrw)
{
njs_int_t ret;
njs_object_prop_t *prop;
prop = pq.lhq.value;
if (njs_slow_path(!prop->configurable)) {
- njs_key_string_get(vm, &pq.key, &pq.lhq.key);
- njs_type_error(vm, "Cannot delete property \"%V\" of %s",
- &pq.lhq.key, njs_type_string(value->type));
- return NJS_ERROR;
+ if (thrw) {
+ njs_key_string_get(vm, &pq.key, &pq.lhq.key);
+ njs_type_error(vm, "Cannot delete property \"%V\" of %s",
+ &pq.lhq.key, njs_type_string(value->type));
+ return NJS_ERROR;
+ }
+
+ return NJS_OK;
}
switch (prop->type) {
njs_int_t njs_value_property_set(njs_vm_t *vm, njs_value_t *value,
njs_value_t *key, njs_value_t *setval);
njs_int_t njs_value_property_delete(njs_vm_t *vm, njs_value_t *value,
- njs_value_t *key, njs_value_t *removed);
+ njs_value_t *key, njs_value_t *removed, njs_bool_t thrw);
njs_int_t njs_value_to_object(njs_vm_t *vm, njs_value_t *value);
void njs_symbol_conversion_failed(njs_vm_t *vm, njs_bool_t to_string);
return ret;
}
- return njs_value_property_delete(vm, value, &key, removed);
+ return njs_value_property_delete(vm, value, &key, removed, 1);
}
break;
case NJS_VMCODE_PROPERTY_DELETE:
- ret = njs_value_property_delete(vm, value1, value2, NULL);
+ ret = njs_value_property_delete(vm, value1, value2, NULL, 1);
if (njs_fast_path(ret != NJS_ERROR)) {
vm->retval = njs_value_true;