} 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;
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,
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;
+}