summaryrefslogtreecommitdiffhomepage
path: root/value.c
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2021-05-18 10:45:21 +0200
committerJo-Philipp Wich <jo@mein.io>2021-05-18 13:11:33 +0200
commitff6811f29065951ab3917460f3d76ffe6ddb0c81 (patch)
tree7d3925b2640c9dfc07959faaf866699d77a30d00 /value.c
parent5803d8605b84ef362cc7f96f9e523eff5d0d81bc (diff)
syntax: implement `delete` as proper operator
Turn `delete` into a proper operator mimicking ECMAScript semantics. Also ensure to transparently turn deprecated `delete(obj, propname)` function calls into `delete obj.propname` expressions during compilation. When strict mode is active, legacy delete() calls throw a syntax error instead. Finally drop the `delete()` function from the stdlib as it is shadowed by the delete operator syntax now. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'value.c')
-rw-r--r--value.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/value.c b/value.c
index 0827038..c012b78 100644
--- a/value.c
+++ b/value.c
@@ -248,6 +248,22 @@ uc_setval(uc_vm *vm, uc_value_t *scope, uc_value_t *key, uc_value_t *val)
}
bool
+uc_delval(uc_vm *vm, uc_value_t *scope, uc_value_t *key)
+{
+ char *s;
+ bool rv;
+
+ if (!key)
+ return NULL;
+
+ s = uc_tostring(vm, key);
+ rv = ucv_object_delete(scope, s ? s : ucv_string_get(key));
+ free(s);
+
+ return rv;
+}
+
+bool
uc_cmp(int how, uc_value_t *v1, uc_value_t *v2)
{
uc_type_t t1 = ucv_type(v1);