vbscript: Get rid of no longer needed ITypeInfo in BuiltinDisp.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
4a30e699e8
commit
1a1292833e
|
@ -268,8 +268,7 @@ static const IDispatchVtbl BuiltinDispVtbl = {
|
||||||
Builtin_Invoke
|
Builtin_Invoke
|
||||||
};
|
};
|
||||||
|
|
||||||
static HRESULT create_builtin_dispatch(script_ctx_t *ctx, const builtin_prop_t *members, size_t member_cnt,
|
static HRESULT create_builtin_dispatch(script_ctx_t *ctx, const builtin_prop_t *members, size_t member_cnt, BuiltinDisp **ret)
|
||||||
ITypeInfo *typeinfo, BuiltinDisp **ret)
|
|
||||||
{
|
{
|
||||||
BuiltinDisp *disp;
|
BuiltinDisp *disp;
|
||||||
|
|
||||||
|
@ -281,7 +280,6 @@ static HRESULT create_builtin_dispatch(script_ctx_t *ctx, const builtin_prop_t *
|
||||||
disp->members = members;
|
disp->members = members;
|
||||||
disp->member_cnt = member_cnt;
|
disp->member_cnt = member_cnt;
|
||||||
disp->ctx = ctx;
|
disp->ctx = ctx;
|
||||||
disp->typeinfo = typeinfo;
|
|
||||||
|
|
||||||
*ret = disp;
|
*ret = disp;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
@ -2858,14 +2856,9 @@ void detach_global_objects(script_ctx_t *ctx)
|
||||||
|
|
||||||
HRESULT init_global(script_ctx_t *ctx)
|
HRESULT init_global(script_ctx_t *ctx)
|
||||||
{
|
{
|
||||||
ITypeInfo *typeinfo;
|
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
|
||||||
hres = get_typeinfo(GlobalObj_tid, &typeinfo);
|
hres = create_builtin_dispatch(ctx, global_props, ARRAY_SIZE(global_props), &ctx->global_obj);
|
||||||
if(FAILED(hres))
|
|
||||||
return hres;
|
|
||||||
|
|
||||||
hres = create_builtin_dispatch(ctx, global_props, ARRAY_SIZE(global_props), typeinfo, &ctx->global_obj);
|
|
||||||
if(FAILED(hres))
|
if(FAILED(hres))
|
||||||
return hres;
|
return hres;
|
||||||
|
|
||||||
|
@ -2873,9 +2866,5 @@ HRESULT init_global(script_ctx_t *ctx)
|
||||||
if(FAILED(hres))
|
if(FAILED(hres))
|
||||||
return hres;
|
return hres;
|
||||||
|
|
||||||
hres = get_typeinfo(ErrObj_tid, &typeinfo);
|
return create_builtin_dispatch(ctx, err_props, ARRAY_SIZE(err_props), &ctx->err_obj);
|
||||||
if(FAILED(hres))
|
|
||||||
return hres;
|
|
||||||
|
|
||||||
return create_builtin_dispatch(ctx, err_props, ARRAY_SIZE(err_props), typeinfo, &ctx->err_obj);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -141,7 +141,6 @@ typedef struct {
|
||||||
size_t member_cnt;
|
size_t member_cnt;
|
||||||
const builtin_prop_t *members;
|
const builtin_prop_t *members;
|
||||||
script_ctx_t *ctx;
|
script_ctx_t *ctx;
|
||||||
ITypeInfo *typeinfo;
|
|
||||||
} BuiltinDisp;
|
} BuiltinDisp;
|
||||||
|
|
||||||
HRESULT create_vbdisp(const class_desc_t*,vbdisp_t**) DECLSPEC_HIDDEN;
|
HRESULT create_vbdisp(const class_desc_t*,vbdisp_t**) DECLSPEC_HIDDEN;
|
||||||
|
@ -358,18 +357,6 @@ HRESULT report_script_error(script_ctx_t*) DECLSPEC_HIDDEN;
|
||||||
void detach_global_objects(script_ctx_t*) DECLSPEC_HIDDEN;
|
void detach_global_objects(script_ctx_t*) DECLSPEC_HIDDEN;
|
||||||
HRESULT get_builtin_id(BuiltinDisp*,const WCHAR*,DISPID*) DECLSPEC_HIDDEN;
|
HRESULT get_builtin_id(BuiltinDisp*,const WCHAR*,DISPID*) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
#define TID_LIST \
|
|
||||||
XDIID(ErrObj) \
|
|
||||||
XDIID(GlobalObj)
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
#define XDIID(iface) iface ## _tid,
|
|
||||||
TID_LIST
|
|
||||||
#undef XDIID
|
|
||||||
LAST_tid
|
|
||||||
} tid_t;
|
|
||||||
|
|
||||||
HRESULT get_typeinfo(tid_t,ITypeInfo**) DECLSPEC_HIDDEN;
|
|
||||||
void release_regexp_typelib(void) DECLSPEC_HIDDEN;
|
void release_regexp_typelib(void) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
static inline BOOL is_int32(double d)
|
static inline BOOL is_int32(double d)
|
||||||
|
|
|
@ -35,66 +35,6 @@ DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
|
||||||
|
|
||||||
static HINSTANCE vbscript_hinstance;
|
static HINSTANCE vbscript_hinstance;
|
||||||
|
|
||||||
static ITypeLib *typelib;
|
|
||||||
static ITypeInfo *typeinfos[LAST_tid];
|
|
||||||
|
|
||||||
static REFIID tid_ids[] = {
|
|
||||||
#define XDIID(iface) &DIID_ ## iface,
|
|
||||||
TID_LIST
|
|
||||||
#undef XDIID
|
|
||||||
};
|
|
||||||
|
|
||||||
HRESULT get_typeinfo(tid_t tid, ITypeInfo **typeinfo)
|
|
||||||
{
|
|
||||||
HRESULT hres;
|
|
||||||
|
|
||||||
if (!typelib) {
|
|
||||||
ITypeLib *tl;
|
|
||||||
|
|
||||||
static const WCHAR vbscript_dll1W[] = {'v','b','s','c','r','i','p','t','.','d','l','l','\\','1',0};
|
|
||||||
|
|
||||||
hres = LoadTypeLib(vbscript_dll1W, &tl);
|
|
||||||
if(FAILED(hres)) {
|
|
||||||
ERR("LoadRegTypeLib failed: %08x\n", hres);
|
|
||||||
return hres;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(InterlockedCompareExchangePointer((void**)&typelib, tl, NULL))
|
|
||||||
ITypeLib_Release(tl);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!typeinfos[tid]) {
|
|
||||||
ITypeInfo *ti;
|
|
||||||
|
|
||||||
hres = ITypeLib_GetTypeInfoOfGuid(typelib, tid_ids[tid], &ti);
|
|
||||||
if(FAILED(hres)) {
|
|
||||||
ERR("GetTypeInfoOfGuid(%s) failed: %08x\n", debugstr_guid(tid_ids[tid]), hres);
|
|
||||||
return hres;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(InterlockedCompareExchangePointer((void**)(typeinfos+tid), ti, NULL))
|
|
||||||
ITypeInfo_Release(ti);
|
|
||||||
}
|
|
||||||
|
|
||||||
*typeinfo = typeinfos[tid];
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void release_typelib(void)
|
|
||||||
{
|
|
||||||
unsigned i;
|
|
||||||
|
|
||||||
if(!typelib)
|
|
||||||
return;
|
|
||||||
|
|
||||||
for(i = 0; i < ARRAY_SIZE(typeinfos); i++) {
|
|
||||||
if(typeinfos[i])
|
|
||||||
ITypeInfo_Release(typeinfos[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
ITypeLib_Release(typelib);
|
|
||||||
}
|
|
||||||
|
|
||||||
BSTR get_vbscript_string(int id)
|
BSTR get_vbscript_string(int id)
|
||||||
{
|
{
|
||||||
WCHAR buf[512];
|
WCHAR buf[512];
|
||||||
|
@ -316,7 +256,6 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
|
||||||
break;
|
break;
|
||||||
case DLL_PROCESS_DETACH:
|
case DLL_PROCESS_DETACH:
|
||||||
if (lpv) break;
|
if (lpv) break;
|
||||||
release_typelib();
|
|
||||||
release_regexp_typelib();
|
release_regexp_typelib();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue