Piotr Caban : jscript: Fixed var handling.

Alexandre Julliard julliard at winehq.org
Mon Aug 10 10:36:15 CDT 2009


Module: wine
Branch: master
Commit: 561437ad9838347ee75a489cfcdb9d03afffb9d2
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=561437ad9838347ee75a489cfcdb9d03afffb9d2

Author: Piotr Caban <piotr.caban at gmail.com>
Date:   Mon Aug 10 12:57:42 2009 +0200

jscript: Fixed var handling.

---

 dlls/jscript/engine.c    |    9 ++++++++-
 dlls/jscript/tests/run.c |   16 ++++++++++++++++
 2 files changed, 24 insertions(+), 1 deletions(-)

diff --git a/dlls/jscript/engine.c b/dlls/jscript/engine.c
index dbb186f..2f884b2 100644
--- a/dlls/jscript/engine.c
+++ b/dlls/jscript/engine.c
@@ -407,8 +407,15 @@ HRESULT exec_source(exec_ctx_t *ctx, parser_ctx_t *parser, source_elements_t *so
 
     for(var = source->variables; var; var = var->next) {
         DISPID id = 0;
+        BSTR name;
 
-        hres = jsdisp_get_id(ctx->var_disp, var->identifier, fdexNameEnsure, &id);
+        name = SysAllocString(var->identifier);
+        if(!name)
+            return E_OUTOFMEMORY;
+
+        if(!lookup_global_members(parser->script, name, NULL))
+            hres = jsdisp_get_id(ctx->var_disp, var->identifier, fdexNameEnsure, &id);
+        SysFreeString(name);
         if(FAILED(hres))
             return hres;
     }
diff --git a/dlls/jscript/tests/run.c b/dlls/jscript/tests/run.c
index d176533..5475ebb 100644
--- a/dlls/jscript/tests/run.c
+++ b/dlls/jscript/tests/run.c
@@ -63,6 +63,7 @@ DEFINE_EXPECT(global_propput_d);
 DEFINE_EXPECT(global_propput_i);
 DEFINE_EXPECT(global_success_d);
 DEFINE_EXPECT(global_success_i);
+DEFINE_EXPECT(global_notexists_d);
 DEFINE_EXPECT(testobj_delete);
 DEFINE_EXPECT(GetItemInfo_testVal);
 
@@ -288,6 +289,11 @@ static HRESULT WINAPI Global_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD
         *pid = DISPID_GLOBAL_NULL_BSTR;
         return S_OK;
     }
+    if(!strcmp_wa(bstrName, "notExists")) {
+        CHECK_EXPECT(global_notexists_d);
+        ok(grfdex == fdexNameCaseSensitive, "grfdex = %x\n", grfdex);
+        return DISP_E_UNKNOWNNAME;
+    }
 
     if(strict_dispid_check)
         ok(0, "unexpected call %s\n", debugstr_w(bstrName));
@@ -837,6 +843,16 @@ static void run_tests(void)
 
     parse_script_a("function reportSuccess() {}; reportSuccess();");
 
+    SET_EXPECT(global_propget_d);
+    parse_script_a("var testPropGet");
+    CHECK_CALLED(global_propget_d);
+
+    SET_EXPECT(global_notexists_d);
+    parse_script_a("var notExists; notExists = 1;");
+    CHECK_CALLED(global_notexists_d);
+
+    parse_script_a("function f() { var testPropGet; }");
+
     run_from_res("lang.js");
     run_from_res("api.js");
     run_from_res("regexp.js");




More information about the wine-cvs mailing list