Exemple #1
0
static HRESULT WINAPI RegExp2_put_Pattern(IRegExp2 *iface, BSTR pattern)
{
    RegExp2 *This = impl_from_IRegExp2(iface);
    WCHAR *p;
    DWORD size;

    TRACE("(%p)->(%s)\n", This, wine_dbgstr_w(pattern));

    if(!pattern) {
        heap_free(This->pattern);
        if(This->regexp) {
            regexp_destroy(This->regexp);
            This->regexp = NULL;
        }
        This->pattern = NULL;
        return S_OK;
    }

    size = (SysStringLen(pattern)+1) * sizeof(WCHAR);
    p = heap_alloc(size);
    if(!p)
        return E_OUTOFMEMORY;

    heap_free(This->pattern);
    This->pattern = p;
    memcpy(p, pattern, size);
    if(This->regexp) {
        regexp_destroy(This->regexp);
        This->regexp = NULL;
    }
    return S_OK;
}
Exemple #2
0
static void RegExp_destructor(jsdisp_t *dispex)
{
    RegExpInstance *This = (RegExpInstance*)dispex;

    if(This->jsregexp)
        regexp_destroy(This->jsregexp);
    jsval_release(This->last_index_val);
    jsstr_release(This->str);
    heap_free(This);
}
Exemple #3
0
static ULONG WINAPI RegExp2_Release(IRegExp2 *iface)
{
    RegExp2 *This = impl_from_IRegExp2(iface);
    LONG ref = InterlockedDecrement(&This->ref);

    TRACE("(%p) ref=%d\n", This, ref);

    if(!ref) {
        heap_free(This->pattern);
        if(This->regexp)
            regexp_destroy(This->regexp);
        heap_pool_free(&This->pool);
        heap_free(This);
    }

    return ref;
}