Module: wine Branch: master Commit: 1b51a43a7c7403ff903fbcc8436f99628e78265a URL: http://source.winehq.org/git/wine.git/?a=commit;h=1b51a43a7c7403ff903fbcc843...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Nov 5 01:03:38 2008 +0100
jscript: Added SCRIPTITEM_ISVISIBLE flag implementation.
---
dlls/jscript/engine.c | 10 ++++++++++ dlls/jscript/jscript.c | 8 ++++++++ dlls/jscript/jscript.h | 1 + dlls/jscript/tests/run.c | 2 ++ 4 files changed, 21 insertions(+), 0 deletions(-)
diff --git a/dlls/jscript/engine.c b/dlls/jscript/engine.c index ec503f6..ecf62ae 100644 --- a/dlls/jscript/engine.c +++ b/dlls/jscript/engine.c @@ -458,6 +458,16 @@ static HRESULT identifier_eval(exec_ctx_t *ctx, BSTR identifier, DWORD flags, ex }
for(item = ctx->parser->script->named_items; item; item = item->next) { + if((item->flags & SCRIPTITEM_ISVISIBLE) && !strcmpW(item->name, identifier)) { + ret->type = EXPRVAL_VARIANT; + V_VT(&ret->u.var) = VT_DISPATCH; + V_DISPATCH(&ret->u.var) = item->disp; + IDispatch_AddRef(item->disp); + return S_OK; + } + } + + for(item = ctx->parser->script->named_items; item; item = item->next) { hres = disp_get_id(item->disp, identifier, 0, &id); if(SUCCEEDED(hres)) break; diff --git a/dlls/jscript/jscript.c b/dlls/jscript/jscript.c index c4bd890..fb13d08 100644 --- a/dlls/jscript/jscript.c +++ b/dlls/jscript/jscript.c @@ -326,6 +326,7 @@ static HRESULT WINAPI JScript_Close(IActiveScript *iface) iter2 = iter->next;
IDispatch_Release(iter->disp); + heap_free(iter->name); heap_free(iter); iter = iter2; } @@ -390,6 +391,13 @@ static HRESULT WINAPI JScript_AddNamedItem(IActiveScript *iface,
item->disp = disp; item->flags = dwFlags; + item->name = heap_strdupW(pstrName); + if(!item->name) { + IDispatch_Release(disp); + heap_free(item); + return E_OUTOFMEMORY; + } + item->next = This->ctx->named_items; This->ctx->named_items = item;
diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h index b416f6e..6930ec6 100644 --- a/dlls/jscript/jscript.h +++ b/dlls/jscript/jscript.h @@ -154,6 +154,7 @@ HRESULT to_object(exec_ctx_t*,VARIANT*,IDispatch**); typedef struct named_item_t { IDispatch *disp; DWORD flags; + LPWSTR name;
struct named_item_t *next; } named_item_t; diff --git a/dlls/jscript/tests/run.c b/dlls/jscript/tests/run.c index 3904a36..20d710d 100644 --- a/dlls/jscript/tests/run.c +++ b/dlls/jscript/tests/run.c @@ -702,6 +702,8 @@ static void run_tests(void) parse_script_a("delete testObj.deleteTest;"); CHECK_CALLED(testobj_delete);
+ parse_script_a("ok(typeof(test) === 'object', "typeof(test) != 'object'");"); + run_from_res("lang.js"); run_from_res("api.js"); run_from_res("regexp.js");