Jacek Caban : vbscript: Store global functions in script_ctx_t.
Alexandre Julliard
julliard at winehq.org
Wed Sep 14 12:25:40 CDT 2011
Module: wine
Branch: master
Commit: 190ea000104758726de93f91419e183fa8f10039
URL: http://source.winehq.org/git/wine.git/?a=commit;h=190ea000104758726de93f91419e183fa8f10039
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed Sep 14 12:55:32 2011 +0200
vbscript: Store global functions in script_ctx_t.
---
dlls/vbscript/compile.c | 21 +++++++++++++++++++++
dlls/vbscript/vbscript.h | 1 +
2 files changed, 22 insertions(+), 0 deletions(-)
diff --git a/dlls/vbscript/compile.c b/dlls/vbscript/compile.c
index 4e8cd06..651bf7c 100644
--- a/dlls/vbscript/compile.c
+++ b/dlls/vbscript/compile.c
@@ -674,18 +674,25 @@ static HRESULT create_function(compile_ctx_t *ctx, function_decl_t *decl, functi
static BOOL lookup_script_identifier(script_ctx_t *script, const WCHAR *identifier)
{
dynamic_var_t *var;
+ function_t *func;
for(var = script->global_vars; var; var = var->next) {
if(!strcmpiW(var->name, identifier))
return TRUE;
}
+ for(func = script->global_funcs; func; func = func->next) {
+ if(!strcmpiW(func->name, identifier))
+ return TRUE;
+ }
+
return FALSE;
}
static HRESULT check_script_collisions(compile_ctx_t *ctx, script_ctx_t *script)
{
dynamic_var_t *var;
+ function_t *func;
for(var = ctx->global_vars; var; var = var->next) {
if(lookup_script_identifier(script, var->name)) {
@@ -694,6 +701,13 @@ static HRESULT check_script_collisions(compile_ctx_t *ctx, script_ctx_t *script)
}
}
+ for(func = ctx->funcs; func; func = func->next) {
+ if(lookup_script_identifier(script, func->name)) {
+ FIXME("%s: redefined\n", debugstr_w(func->name));
+ return E_FAIL;
+ }
+ }
+
return S_OK;
}
@@ -815,6 +829,13 @@ HRESULT compile_script(script_ctx_t *script, const WCHAR *src, vbscode_t **ret)
script->global_vars = ctx.global_vars;
}
+ if(ctx.funcs) {
+ for(new_func = ctx.funcs; new_func->next; new_func = new_func->next);
+
+ new_func->next = script->global_funcs;
+ script->global_funcs = ctx.funcs;
+ }
+
if(TRACE_ON(vbscript_disas))
dump_code(&ctx);
diff --git a/dlls/vbscript/vbscript.h b/dlls/vbscript/vbscript.h
index 41dea38..32b19ab 100644
--- a/dlls/vbscript/vbscript.h
+++ b/dlls/vbscript/vbscript.h
@@ -80,6 +80,7 @@ struct _script_ctx_t {
vbdisp_t *script_obj;
dynamic_var_t *global_vars;
+ function_t *global_funcs;
struct list code_list;
struct list named_items;
More information about the wine-cvs
mailing list