Пример #1
0
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;
}
Пример #2
0
Файл: v7.c Проект: di3online/v7
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;
}