Make the '+' operator merge objects.

This commit is contained in:
Stephen Dolan committed 2012-09-09 19:17:07 +01:00
1 parent a4ff3d4670
commit e258d20ba2
4 files changed
+22

No files matched your search

+2
View File
@@ -24,6 +24,8 @@ static void f_plus(jv input[], jv output[]) {
jv_number_value(b)); jv_number_value(b));
} else if (jv_get_kind(a) == JV_KIND_ARRAY && jv_get_kind(b) == JV_KIND_ARRAY) { } else if (jv_get_kind(a) == JV_KIND_ARRAY && jv_get_kind(b) == JV_KIND_ARRAY) {
output[0] = jv_array_concat(a, b); output[0] = jv_array_concat(a, b);
} else if (jv_get_kind(a) == JV_KIND_OBJECT && jv_get_kind(b) == JV_KIND_OBJECT) {
output[0] = jv_object_merge(a, b);
} else { } else {
output[0] = jv_string("wtf gaize"); output[0] = jv_string("wtf gaize");
jv_free(a); jv_free(a);
+10
View File
@@ -729,6 +729,16 @@ int jv_object_length(jv object) {
return n; return n;
} }
jv jv_object_merge(jv a, jv b) {
assert(jv_get_kind(a) == JV_KIND_OBJECT);
jv_object_foreach(i, b) {
a = jv_object_set(a,
jv_object_iter_key(b, i),
jv_object_iter_value(b, i));
}
return a;
}
/* /*
* Object iteration (internal helpers) * Object iteration (internal helpers)
*/ */
+6
View File
@@ -78,12 +78,18 @@ jv jv_object_get(jv object, jv key);
jv jv_object_set(jv object, jv key, jv value); jv jv_object_set(jv object, jv key, jv value);
jv jv_object_delete(jv object, jv key); jv jv_object_delete(jv object, jv key);
int jv_object_length(jv object); int jv_object_length(jv object);
jv jv_object_merge(jv, jv);
int jv_object_iter(jv); int jv_object_iter(jv);
int jv_object_iter_next(jv, int); int jv_object_iter_next(jv, int);
int jv_object_iter_valid(jv, int); int jv_object_iter_valid(jv, int);
jv jv_object_iter_key(jv, int); jv jv_object_iter_key(jv, int);
jv jv_object_iter_value(jv, int); jv jv_object_iter_value(jv, int);
#define jv_object_foreach(i,t) \
for (int i = jv_object_iter(t); \
jv_object_iter_valid(t, i); \
i = jv_object_iter_next(t, i)) \
int jv_get_refcnt(jv); int jv_get_refcnt(jv);
+4
View File
@@ -155,6 +155,10 @@ null
null null
[1,2,3,null] [1,2,3,null]
{"a":1} + {"b":2} + {"c":3}
"asdfasdf"
{"a":1, "b":2, "c":3}
# #
# User-defined functions # User-defined functions
# Oh god. # Oh god.