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