details: https://hg.nginx.org/njs/rev/70e7701a4588 branches: changeset: 2112:70e7701a4588 user: Dmitry Volyntsev <xei...@nginx.com> date: Tue May 09 18:58:52 2023 -0700 description: Shell: added $262 as external in CLI.
diffstat: external/njs_shell.c | 60 +++++++++++++++++++++++++++++++++++------- src/njs_array_buffer.c | 25 +++++++++++++++++ src/njs_array_buffer.h | 2 + src/test/njs_externals_test.c | 29 +++----------------- 4 files changed, 82 insertions(+), 34 deletions(-) diffs (205 lines): diff -r fc8d1b125cef -r 70e7701a4588 external/njs_shell.c --- a/external/njs_shell.c Tue May 09 18:18:33 2023 -0700 +++ b/external/njs_shell.c Tue May 09 18:58:52 2023 -0700 @@ -145,6 +145,9 @@ static njs_int_t lvlhsh_key_test(njs_lvl static void *lvlhsh_pool_alloc(void *pool, size_t size); static void lvlhsh_pool_free(void *pool, void *p, size_t size); +njs_int_t njs_array_buffer_detach(njs_vm_t *vm, njs_value_t *args, + njs_uint_t nargs, njs_index_t unused, njs_value_t *retval); + static njs_external_t njs_ext_console[] = { @@ -204,6 +207,30 @@ static njs_external_t njs_ext_console[] }; +static njs_external_t njs_ext_262[] = { + + { + .flags = NJS_EXTERN_PROPERTY | NJS_EXTERN_SYMBOL, + .name.symbol = NJS_SYMBOL_TO_STRING_TAG, + .u.property = { + .value = "$262", + } + }, + + { + .flags = NJS_EXTERN_METHOD, + .name.string = njs_str("detachArrayBuffer"), + .writable = 1, + .configurable = 1, + .enumerable = 1, + .u.method = { + .native = njs_array_buffer_detach, + } + }, + +}; + + static const njs_lvlhsh_proto_t lvlhsh_proto njs_aligned(64) = { NJS_LVLHSH_LARGE_SLAB, lvlhsh_key_test, @@ -779,12 +806,12 @@ njs_console_init(njs_vm_t *vm, njs_conso static njs_int_t njs_externals_init(njs_vm_t *vm) { - njs_int_t ret; - njs_value_t *value; + njs_int_t ret, proto_id; njs_console_t *console; - njs_opaque_value_t method; + njs_opaque_value_t value, method; static const njs_str_t console_name = njs_str("console"); + static const njs_str_t dollar_262 = njs_str("$262"); static const njs_str_t print_name = njs_str("print"); static const njs_str_t console_log = njs_str("console.log"); @@ -797,17 +824,13 @@ njs_externals_init(njs_vm_t *vm) return NJS_ERROR; } - value = njs_mp_zalloc(njs_vm_memory_pool(vm), sizeof(njs_opaque_value_t)); - if (njs_slow_path(value == NULL)) { - return NJS_ERROR; - } - - ret = njs_vm_external_create(vm, value, njs_console_proto_id, console, 0); + ret = njs_vm_external_create(vm, njs_value_arg(&value), + njs_console_proto_id, console, 0); if (njs_slow_path(ret != NJS_OK)) { return NJS_ERROR; } - ret = njs_vm_bind(vm, &console_name, value, 0); + ret = njs_vm_bind(vm, &console_name, njs_value_arg(&value), 0); if (njs_slow_path(ret != NJS_OK)) { return NJS_ERROR; } @@ -827,6 +850,23 @@ njs_externals_init(njs_vm_t *vm) return NJS_ERROR; } + proto_id = njs_vm_external_prototype(vm, njs_ext_262, + njs_nitems(njs_ext_262)); + if (njs_slow_path(proto_id < 0)) { + njs_stderror("failed to add \"$262\" proto\n"); + return NJS_ERROR; + } + + ret = njs_vm_external_create(vm, njs_value_arg(&value), proto_id, NULL, 1); + if (njs_slow_path(ret != NJS_OK)) { + return NJS_ERROR; + } + + ret = njs_vm_bind(vm, &dollar_262, njs_value_arg(&value), 1); + if (njs_slow_path(ret != NJS_OK)) { + return NJS_ERROR; + } + return NJS_OK; } diff -r fc8d1b125cef -r 70e7701a4588 src/njs_array_buffer.c --- a/src/njs_array_buffer.c Tue May 09 18:18:33 2023 -0700 +++ b/src/njs_array_buffer.c Tue May 09 18:58:52 2023 -0700 @@ -240,6 +240,31 @@ njs_array_buffer_prototype_slice(njs_vm_ } +njs_int_t +njs_array_buffer_detach(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, + njs_index_t unused, njs_value_t *retval) +{ + njs_value_t *value; + njs_array_buffer_t *buffer; + + value = njs_arg(args, nargs, 1); + if (njs_slow_path(!njs_is_array_buffer(value))) { + njs_type_error(vm, "\"this\" is not an ArrayBuffer"); + return NJS_ERROR; + } + + buffer = njs_array_buffer(value); + buffer->u.data = NULL; + buffer->size = 0; + + njs_set_null(retval); + + return NJS_OK; +} + + + + static const njs_object_prop_t njs_array_buffer_prototype_properties[] = { NJS_DECLARE_PROP_HANDLER("constructor", diff -r fc8d1b125cef -r 70e7701a4588 src/njs_array_buffer.h --- a/src/njs_array_buffer.h Tue May 09 18:18:33 2023 -0700 +++ b/src/njs_array_buffer.h Tue May 09 18:58:52 2023 -0700 @@ -15,6 +15,8 @@ njs_array_buffer_t *njs_array_buffer_alloc(njs_vm_t *vm, uint64_t size, njs_bool_t zeroing); njs_int_t njs_array_buffer_writable(njs_vm_t *vm, njs_array_buffer_t *buffer); +NJS_EXPORT njs_int_t njs_array_buffer_detach(njs_vm_t *vm, njs_value_t *args, + njs_uint_t nargs, njs_index_t unused, njs_value_t *retval); njs_inline njs_array_buffer_t * njs_array_buffer_slice(njs_vm_t *vm, njs_array_buffer_t *this, int64_t start, diff -r fc8d1b125cef -r 70e7701a4588 src/test/njs_externals_test.c --- a/src/test/njs_externals_test.c Tue May 09 18:18:33 2023 -0700 +++ b/src/test/njs_externals_test.c Tue May 09 18:58:52 2023 -0700 @@ -26,6 +26,10 @@ typedef struct { } njs_unit_test_prop_t; +njs_int_t njs_array_buffer_detach(njs_vm_t *vm, njs_value_t *args, + njs_uint_t nargs, njs_index_t unused, njs_value_t *retval); + + static njs_int_t njs_external_r_proto_id; @@ -548,29 +552,6 @@ njs_unit_test_constructor(njs_vm_t *vm, static njs_int_t -njs_262_detach_array_buffer(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, - njs_index_t unused, njs_value_t *retval) -{ - njs_value_t *value; - njs_array_buffer_t *buffer; - - value = njs_arg(args, nargs, 1); - if (njs_slow_path(!njs_is_array_buffer(value))) { - njs_type_error(vm, "\"this\" is not an ArrayBuffer"); - return NJS_ERROR; - } - - buffer = njs_array_buffer(value); - buffer->u.data = NULL; - buffer->size = 0; - - njs_set_null(retval); - - return NJS_OK; -} - - -static njs_int_t njs_262_bytes_from_array_like(njs_vm_t *vm, njs_value_t *value, njs_value_t *retval) { @@ -749,7 +730,7 @@ static njs_external_t njs_unit_test_262 .configurable = 1, .enumerable = 1, .u.method = { - .native = njs_262_detach_array_buffer, + .native = njs_array_buffer_detach, } }, _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-devel