[njs] Added generic handler for external objects.
Dmitry Volyntsev
xeioex at nginx.com
Sat Aug 20 05:08:20 UTC 2022
details: https://hg.nginx.org/njs/rev/aecd8b5387d2
branches:
changeset: 1930:aecd8b5387d2
user: Dmitry Volyntsev <xeioex at nginx.com>
date: Fri Aug 19 22:03:06 2022 -0700
description:
Added generic handler for external objects.
diffstat:
src/njs.h | 10 ++++++++++
src/njs_extern.c | 36 ++++++++++++++++++++++++++++++++++++
2 files changed, 46 insertions(+), 0 deletions(-)
diffs (70 lines):
diff -r 7d2fb383e424 -r aecd8b5387d2 src/njs.h
--- a/src/njs.h Fri Aug 19 22:02:37 2022 -0700
+++ b/src/njs.h Fri Aug 19 22:03:06 2022 -0700
@@ -139,6 +139,13 @@ typedef enum {
} njs_extern_flag_t;
+typedef enum {
+ NJS_EXTERN_TYPE_INT = 0,
+ NJS_EXTERN_TYPE_UINT = 1,
+ NJS_EXTERN_TYPE_VALUE = 2,
+} njs_extern_type_t;
+
+
struct njs_external_s {
njs_extern_flag_t flags;
@@ -361,6 +368,9 @@ NJS_EXPORT njs_int_t njs_vm_external_cre
njs_int_t proto_id, njs_external_ptr_t external, njs_bool_t shared);
NJS_EXPORT njs_external_ptr_t njs_vm_external(njs_vm_t *vm,
njs_int_t proto_id, const njs_value_t *value);
+NJS_EXPORT njs_int_t njs_external_property(njs_vm_t *vm,
+ njs_object_prop_t *prop, njs_value_t *value, njs_value_t *setval,
+ njs_value_t *retval);
NJS_EXPORT uintptr_t njs_vm_meta(njs_vm_t *vm, njs_uint_t index);
NJS_EXPORT njs_function_t *njs_vm_function_alloc(njs_vm_t *vm,
diff -r 7d2fb383e424 -r aecd8b5387d2 src/njs_extern.c
--- a/src/njs_extern.c Fri Aug 19 22:02:37 2022 -0700
+++ b/src/njs_extern.c Fri Aug 19 22:03:06 2022 -0700
@@ -343,3 +343,39 @@ njs_value_external_tag(const njs_value_t
return -1;
}
+
+
+njs_int_t
+njs_external_property(njs_vm_t *vm, njs_object_prop_t *prop, njs_value_t *value,
+ njs_value_t *setval, njs_value_t *retval)
+{
+ char *p;
+ njs_int_t i;
+ njs_uint_t ui;
+
+ p = njs_vm_external(vm, NJS_PROTO_ID_ANY, value);
+ if (p == NULL) {
+ njs_value_undefined_set(retval);
+ return NJS_DECLINED;
+ }
+
+ switch (njs_vm_prop_magic16(prop)) {
+ case NJS_EXTERN_TYPE_INT:
+ i = *(njs_int_t *) (p + njs_vm_prop_magic32(prop));
+ njs_value_number_set(retval, i);
+ break;
+
+ case NJS_EXTERN_TYPE_UINT:
+ ui = *(njs_uint_t *) (p + njs_vm_prop_magic32(prop));
+ njs_value_number_set(retval, ui);
+ break;
+
+ case NJS_EXTERN_TYPE_VALUE:
+ default:
+ njs_value_assign(retval,
+ (njs_value_t *) (p + njs_vm_prop_magic32(prop)));
+
+ }
+
+ return NJS_OK;
+}
More information about the nginx-devel
mailing list