summaryrefslogtreecommitdiffhomepage
path: root/object.c
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2021-03-04 15:52:53 +0100
committerJo-Philipp Wich <jo@mein.io>2021-03-08 17:15:16 +0100
commit37d5e35437df393cd23e90f72579dea8d91fdea0 (patch)
tree4de53d110c5ac5e644bcc2beddd47ec1d7f8c91c /object.c
parentc6081c912b2f0f656c90237c9439bf1366f1d18b (diff)
object: introduce uc_protoref_new()
The new uc_protoref_new() function allows creating array or object values with prototype references. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'object.c')
-rw-r--r--object.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/object.c b/object.c
index 5841f76..4e49ac4 100644
--- a/object.c
+++ b/object.c
@@ -316,6 +316,29 @@ uc_prototype_new(uc_prototype *parent)
return proto;
}
+uc_prototype *
+uc_protoref_new(json_object *value, uc_prototype *proto)
+{
+ uc_prototype *ref;
+
+ if (!json_object_is_type(value, json_type_object) &&
+ !json_object_is_type(value, json_type_array))
+ return NULL;
+
+ ref = xalloc(sizeof(*ref));
+ ref->header.type = UC_OBJ_PROTOTYPE;
+ ref->header.jso = value;
+
+ if (proto) {
+ ref->parent = proto;
+ uc_value_get(proto->header.jso);
+ }
+
+ json_object_set_serializer(ref->header.jso, NULL, ref, uc_prototype_gc);
+
+ return ref;
+}
+
static uc_ressource_types res_types;