HRESULT WINAPI VBScriptRegExpFactory_CreateInstance(IClassFactory *iface, IUnknown *pUnkOuter, REFIID riid, void **ppv) { RegExp2 *ret; HRESULT hres; TRACE("(%p %s %p)\n", pUnkOuter, debugstr_guid(riid), ppv); hres = init_regexp_typeinfo(RegExp2_tid); if(FAILED(hres)) return hres; ret = heap_alloc_zero(sizeof(*ret)); if(!ret) return E_OUTOFMEMORY; ret->IRegExp2_iface.lpVtbl = &RegExp2Vtbl; ret->IRegExp_iface.lpVtbl = &RegExpVtbl; ret->ref = 1; heap_pool_init(&ret->pool); hres = IRegExp2_QueryInterface(&ret->IRegExp2_iface, riid, ppv); IRegExp2_Release(&ret->IRegExp2_iface); return hres; }
void heap_pool_free(heap_pool_t *heap) { DWORD i; heap_pool_clear(heap); for(i=0; i < heap->block_cnt; i++) heap_free(heap->blocks[i]); heap_free(heap->blocks); heap_pool_init(heap); }
static HRESULT WINAPI JScriptParse_InitNew(IActiveScriptParse *iface) { JScript *This = impl_from_IActiveScriptParse(iface); script_ctx_t *ctx; HRESULT hres; TRACE("(%p)\n", This); if(This->ctx) return E_UNEXPECTED; ctx = heap_alloc_zero(sizeof(script_ctx_t)); if(!ctx) return E_OUTOFMEMORY; ctx->ref = 1; ctx->state = SCRIPTSTATE_UNINITIALIZED; ctx->active_script = &This->IActiveScript_iface; ctx->safeopt = This->safeopt; ctx->version = This->version; ctx->html_mode = This->html_mode; ctx->ei.val = jsval_undefined(); ctx->acc = jsval_undefined(); heap_pool_init(&ctx->tmp_heap); hres = create_jscaller(ctx); if(FAILED(hres)) { heap_free(ctx); return hres; } ctx->last_match = jsstr_empty(); ctx = InterlockedCompareExchangePointer((void**)&This->ctx, ctx, NULL); if(ctx) { script_release(ctx); return E_UNEXPECTED; } return This->site ? set_ctx_site(This) : S_OK; }
HRESULT create_regexp(IDispatch **ret) { RegExp2 *regexp; HRESULT hres; hres = init_regexp_typeinfo(RegExp2_tid); if(FAILED(hres)) return hres; regexp = heap_alloc_zero(sizeof(*regexp)); if(!regexp) return E_OUTOFMEMORY; regexp->IRegExp2_iface.lpVtbl = &RegExp2Vtbl; regexp->IRegExp_iface.lpVtbl = &RegExpVtbl; regexp->ref = 1; heap_pool_init(®exp->pool); *ret = (IDispatch*)®exp->IRegExp2_iface; return S_OK; }