details: https://hg.nginx.org/njs/rev/7aa15ae3d8be branches: changeset: 2168:7aa15ae3d8be user: Dmitry Volyntsev <xei...@nginx.com> date: Thu Jun 29 18:58:45 2023 -0700 description: Introduced njs_vm_bind_handler().
diffstat: src/njs.h | 3 +++ src/njs_vm.c | 49 +++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 44 insertions(+), 8 deletions(-) diffs (86 lines): diff -r bc69e9407e66 -r 7aa15ae3d8be src/njs.h --- a/src/njs.h Wed Jun 28 22:15:59 2023 -0700 +++ b/src/njs.h Thu Jun 29 18:58:45 2023 -0700 @@ -424,6 +424,9 @@ NJS_EXPORT void njs_disassembler(njs_vm_ NJS_EXPORT njs_int_t njs_vm_bind(njs_vm_t *vm, const njs_str_t *var_name, const njs_value_t *value, njs_bool_t shared); +njs_int_t njs_vm_bind_handler(njs_vm_t *vm, const njs_str_t *var_name, + njs_prop_handler_t handler, uint16_t magic16, uint32_t magic32, + njs_bool_t shared); NJS_EXPORT njs_int_t njs_vm_value(njs_vm_t *vm, const njs_str_t *path, njs_value_t *retval); NJS_EXPORT njs_function_t *njs_vm_function(njs_vm_t *vm, const njs_str_t *name); diff -r bc69e9407e66 -r 7aa15ae3d8be src/njs_vm.c --- a/src/njs_vm.c Wed Jun 28 22:15:59 2023 -0700 +++ b/src/njs_vm.c Thu Jun 29 18:58:45 2023 -0700 @@ -792,21 +792,15 @@ njs_vm_value(njs_vm_t *vm, const njs_str } -njs_int_t -njs_vm_bind(njs_vm_t *vm, const njs_str_t *var_name, const njs_value_t *value, +static njs_int_t +njs_vm_bind2(njs_vm_t *vm, const njs_str_t *var_name, njs_object_prop_t *prop, njs_bool_t shared) { njs_int_t ret; njs_object_t *global; njs_lvlhsh_t *hash; - njs_object_prop_t *prop; njs_lvlhsh_query_t lhq; - prop = njs_object_prop_alloc(vm, &njs_value_undefined, value, 1); - if (njs_slow_path(prop == NULL)) { - return NJS_ERROR; - } - ret = njs_string_new(vm, &prop->name, var_name->start, var_name->length, 0); if (njs_slow_path(ret != NJS_OK)) { return NJS_ERROR; @@ -832,6 +826,45 @@ njs_vm_bind(njs_vm_t *vm, const njs_str_ } +njs_int_t +njs_vm_bind(njs_vm_t *vm, const njs_str_t *var_name, const njs_value_t *value, + njs_bool_t shared) +{ + njs_object_prop_t *prop; + + prop = njs_object_prop_alloc(vm, &njs_value_undefined, value, 1); + if (njs_slow_path(prop == NULL)) { + return NJS_ERROR; + } + + return njs_vm_bind2(vm, var_name, prop, shared); +} + + +njs_int_t +njs_vm_bind_handler(njs_vm_t *vm, const njs_str_t *var_name, + njs_prop_handler_t handler, uint16_t magic16, uint32_t magic32, + njs_bool_t shared) +{ + njs_object_prop_t *prop; + + prop = njs_object_prop_alloc(vm, &njs_string_empty, + &njs_value_invalid, 1); + if (njs_slow_path(prop == NULL)) { + return NJS_ERROR; + } + + prop->type = NJS_PROPERTY_HANDLER; + prop->u.value.type = NJS_INVALID; + prop->u.value.data.truth = 1; + njs_prop_magic16(prop) = magic16; + njs_prop_magic32(prop) = magic32; + njs_prop_handler(prop) = handler; + + return njs_vm_bind2(vm, var_name, prop, shared); +} + + void njs_value_string_get(njs_value_t *value, njs_str_t *dst) { _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-devel