Module: wine Branch: master Commit: 561437ad9838347ee75a489cfcdb9d03afffb9d2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=561437ad9838347ee75a489cfc...
Author: Piotr Caban piotr.caban@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");