V7_PRIVATE enum v7_err vinsert(struct v7 *v7, struct v7_prop **h, struct v7_val *key, struct v7_val *val) { struct v7_prop *m = mkprop(v7); CHECK(m != NULL, V7_OUT_OF_MEMORY); inc_ref_count(key); inc_ref_count(val); m->key = key; m->val = val; m->next = *h; *h = m; return V7_OK; }
void frame_add(Hash *frame, char *key, boxed_value *value){ if (hash_contains(frame, key)){ boxed_value *current_value = hash_value(frame, key); if (value == current_value) return; else dec_ref_count(current_value); } inc_ref_count(value); hash_add(frame, strdup(key), value); }
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; }
V7_PRIVATE enum v7_err v7_setv(struct v7 *v7, struct v7_val *obj, enum v7_type key_type, enum v7_type val_type, ...) { struct v7_val *k = NULL, *v = NULL; va_list ap; va_start(ap, val_type); k = key_type == V7_TYPE_OBJ ? va_arg(ap, struct v7_val *) : v7_mkvv(v7, key_type, &ap); v = val_type == V7_TYPE_OBJ ? va_arg(ap, struct v7_val *) : v7_mkvv(v7, val_type, &ap); va_end(ap); // TODO: do not leak here CHECK(k != NULL && v != NULL, V7_OUT_OF_MEMORY); inc_ref_count(k); TRY(v7_set2(v7, obj, k, v)); v7_freeval(v7, k); return V7_OK; }
/*********************************************************************** * SelectObject (GDI32.@) */ HGDIOBJ WINAPI SelectObject( HDC hdc, HGDIOBJ handle ) { HGDIOBJ ret = 0; DC * dc = DC_GetDCUpdate( hdc ); if (!dc) return 0; TRACE("hdc=%04x %04x\n", hdc, handle ); /* Fonts get a rather different treatment so we'll handle them separately */ if(GetObjectType(handle) == OBJ_FONT) ret = FONT_SelectObject(dc, handle); else if (dc->funcs->pSelectObject) ret = dc->funcs->pSelectObject( dc, handle ); GDI_ReleaseObj( hdc ); if (ret && ret != handle) { inc_ref_count( handle ); dec_ref_count( ret ); } return ret; }
V7_PRIVATE enum v7_err v7_push(struct v7 *v7, struct v7_val *v) { inc_ref_count(v); TRY(inc_stack(v7, 1)); v7->stack[v7->sp - 1] = v; return V7_OK; }