aboutsummaryrefslogtreecommitdiff
path: root/src/njs_value.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/njs_value.h')
-rw-r--r--src/njs_value.h40
1 files changed, 18 insertions, 22 deletions
diff --git a/src/njs_value.h b/src/njs_value.h
index 7bc9eff3..3fba344b 100644
--- a/src/njs_value.h
+++ b/src/njs_value.h
@@ -287,7 +287,8 @@ struct njs_object_type_init_s {
typedef enum {
- NJS_PROPERTY = 0,
+ NJS_FREE_FLATHSH_ELEMENT = 0,
+ NJS_PROPERTY,
NJS_ACCESSOR,
NJS_PROPERTY_HANDLER,
@@ -305,22 +306,23 @@ typedef enum {
} njs_prop_query_t;
-/*
- * Attributes are generally used as Boolean values.
- * The UNSET value is can be seen:
- * for newly created property descriptors in njs_define_property(),
- * for writable attribute of accessor descriptors (desc->writable
- * cannot be used as a boolean value).
- */
-typedef enum {
- NJS_ATTRIBUTE_FALSE = 0,
- NJS_ATTRIBUTE_TRUE = 1,
- NJS_ATTRIBUTE_UNSET,
-} njs_object_attribute_t;
-
+/* njs_object_prop_s: same structure and length as njs_flathsh_elt_t. */
struct njs_object_prop_s {
+ /* next_elt + property descriptor : 32 bits */
+
+ uint32_t next_elt:26;
+
+ uint32_t type:3;
+ uint32_t writable:1;
+ uint32_t enumerable:1;
+ uint32_t configurable:1;
+
+ uint32_t atom_id;
+
union {
+ njs_value_t *val;
+ njs_mod_t *mod;
njs_value_t value;
struct {
njs_function_t *getter;
@@ -328,7 +330,8 @@ struct njs_object_prop_s {
} accessor;
} u;
-#define njs_prop_value(_p) (&(_p)->u.value)
+#define njs_prop_value(_p) (&((njs_object_prop_t *) (_p))->u.value)
+#define njs_prop_module(_p) (((njs_object_prop_t *) (_p))->u.mod)
#define njs_prop_handler(_p) (_p)->u.value.data.u.prop_handler
#define njs_prop_ref(_p) (_p)->u.value.data.u.value
#define njs_prop_typed_ref(_p) (_p)->u.value.data.u.typed_array
@@ -338,18 +341,11 @@ struct njs_object_prop_s {
#define njs_prop_getter(_p) (_p)->u.accessor.getter
#define njs_prop_setter(_p) (_p)->u.accessor.setter
- njs_object_prop_type_t type:8; /* 3 bits */
- njs_object_prop_type_t enum_in_object_hash:8; /* 3 bits */
-
- njs_object_attribute_t writable:8; /* 2 bits */
- njs_object_attribute_t enumerable:8; /* 2 bits */
- njs_object_attribute_t configurable:8; /* 2 bits */
};
struct njs_object_prop_init_s {
struct njs_object_prop_s desc;
- uint32_t atom_id;
};