Jacek Caban : vbscript: Added functions lookup implementation.
Alexandre Julliard
julliard at winehq.org
Wed Sep 14 12:25:40 CDT 2011
Module: wine
Branch: master
Commit: f00a8ec04dd5f3e30a6527390875aa73d8379f81
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f00a8ec04dd5f3e30a6527390875aa73d8379f81
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed Sep 14 12:55:42 2011 +0200
vbscript: Added functions lookup implementation.
---
dlls/vbscript/interp.c | 19 ++++++++++++++++++-
1 files changed, 18 insertions(+), 1 deletions(-)
diff --git a/dlls/vbscript/interp.c b/dlls/vbscript/interp.c
index 66c2cf1..adec28f 100644
--- a/dlls/vbscript/interp.c
+++ b/dlls/vbscript/interp.c
@@ -41,7 +41,8 @@ typedef HRESULT (*instr_func_t)(exec_ctx_t*);
typedef enum {
REF_NONE,
REF_DISP,
- REF_VAR
+ REF_VAR,
+ REF_FUNC
} ref_type_t;
typedef struct {
@@ -52,6 +53,7 @@ typedef struct {
DISPID id;
} d;
VARIANT *v;
+ function_t *f;
} u;
} ref_t;
@@ -79,12 +81,21 @@ static BOOL lookup_dynamic_vars(dynamic_var_t *var, const WCHAR *name, ref_t *re
static HRESULT lookup_identifier(exec_ctx_t *ctx, BSTR name, ref_t *ref)
{
named_item_t *item;
+ function_t *func;
DISPID id;
HRESULT hres;
if(lookup_dynamic_vars(ctx->script->global_vars, name, ref))
return S_OK;
+ for(func = ctx->script->global_funcs; func; func = func->next) {
+ if(!strcmpiW(func->name, name)) {
+ ref->type = REF_FUNC;
+ ref->u.f = func;
+ return S_OK;
+ }
+ }
+
LIST_FOR_EACH_ENTRY(item, &ctx->script->named_items, named_item_t, entry) {
if(item->flags & SCRIPTITEM_GLOBALMEMBERS) {
hres = disp_get_id(item->disp, name, &id);
@@ -254,6 +265,9 @@ static HRESULT do_icall(exec_ctx_t *ctx, VARIANT *res)
if(FAILED(hres))
return hres;
break;
+ case REF_FUNC:
+ FIXME("functions not implemented\n");
+ return E_NOTIMPL;
case REF_NONE:
FIXME("%s not found\n", debugstr_w(identifier));
return DISP_E_UNKNOWNNAME;
@@ -313,6 +327,9 @@ static HRESULT assign_ident(exec_ctx_t *ctx, BSTR name, VARIANT *val, BOOL own_v
if(own_val)
VariantClear(val);
break;
+ case REF_FUNC:
+ FIXME("functions not implemented\n");
+ return E_NOTIMPL;
case REF_NONE:
FIXME("%s not found\n", debugstr_w(name));
if(own_val)
More information about the wine-cvs
mailing list