V7_PRIVATE enum v7_err v7_set2(struct v7 *v7, struct v7_val *obj, struct v7_val *k, struct v7_val *v) { struct v7_prop *m = NULL; CHECK(obj != NULL && k != NULL && v != NULL, V7_INTERNAL_ERROR); CHECK(obj->type == V7_TYPE_OBJ, V7_TYPE_ERROR); // Find attribute inside object if ((m = v7_get2(obj, k, 1)) != NULL) { v7_freeval(v7, m->val); inc_ref_count(v); m->val = v; } else { TRY(vinsert(v7, &obj->props, k, v)); } return V7_OK; }
enum v7_err v7_set(struct v7 *v7, struct v7_val *obj, struct v7_val *k, struct v7_val *v) { struct v7_prop *m = NULL; CHECK(obj != NULL && obj->type == V7_OBJ, V7_TYPE_MISMATCH); // Find attribute inside object if ((m = v7_get(obj, k)) == NULL) { m = vinsert(v7, &obj->v.props, k); CHECK(m != NULL, V7_OUT_OF_MEMORY); } if (m != NULL) { struct v7_val *tmp = m->val; v->ref_count++; m->val = v; free_val(v7, tmp); // Deallocate previous value } return V7_OK; }