From 190ea000104758726de93f91419e183fa8f10039 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Wed, 14 Sep 2011 12:55:32 +0200 Subject: [PATCH] vbscript: Store global functions in script_ctx_t. --- dlls/vbscript/compile.c | 21 +++++++++++++++++++++ dlls/vbscript/vbscript.h | 1 + 2 files changed, 22 insertions(+) diff --git a/dlls/vbscript/compile.c b/dlls/vbscript/compile.c index 4e8cd0662bf..651bf7c6c52 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 41dea38c5ce..32b19aba8f5 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;