diff options
author | Jo-Philipp Wich <jo@mein.io> | 2021-05-18 10:45:21 +0200 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2021-05-18 13:11:33 +0200 |
commit | ff6811f29065951ab3917460f3d76ffe6ddb0c81 (patch) | |
tree | 7d3925b2640c9dfc07959faaf866699d77a30d00 /lib.c | |
parent | 5803d8605b84ef362cc7f96f9e523eff5d0d81bc (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 'lib.c')
-rw-r--r-- | lib.c | 30 |
1 files changed, 0 insertions, 30 deletions
@@ -453,35 +453,6 @@ uc_chr(uc_vm *vm, size_t nargs) } static uc_value_t * -uc_delete(uc_vm *vm, size_t nargs) -{ - uc_value_t *obj = uc_get_arg(0); - uc_value_t *key = NULL; - uc_value_t *rv = NULL; - bool freeable; - size_t i; - char *k; - - if (ucv_type(obj) != UC_OBJECT) - return NULL; - - for (i = 1; i < nargs; i++) { - ucv_put(rv); - - key = uc_get_arg(i); - k = uc_cast_string(vm, &key, &freeable); - rv = ucv_get(ucv_object_get(obj, k, NULL)); - - ucv_object_delete(obj, k); - - if (freeable) - free(k); - } - - return rv; -} - -static uc_value_t * uc_die(uc_vm *vm, size_t nargs) { uc_value_t *msg = uc_get_arg(0); @@ -2553,7 +2524,6 @@ uc_wildcard(uc_vm *vm, size_t nargs) static const uc_cfunction_list functions[] = { { "chr", uc_chr }, - { "delete", uc_delete }, { "die", uc_die }, { "exists", uc_exists }, { "exit", uc_exit }, |