From be29a73845461aff1ae5c6572699127be87d4005 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Mon, 12 Mar 2012 19:22:59 +0100 Subject: [PATCH] jscript: Call script_parse from compile_script, not the other way around. --- dlls/jscript/compile.c | 17 ++++++++++++++--- dlls/jscript/engine.h | 2 +- dlls/jscript/function.c | 2 +- dlls/jscript/global.c | 2 +- dlls/jscript/jscript.c | 4 ++-- dlls/jscript/parser.y | 2 -- 6 files changed, 19 insertions(+), 10 deletions(-) diff --git a/dlls/jscript/compile.c b/dlls/jscript/compile.c index 8d1487baa12..dc6f0994d80 100644 --- a/dlls/jscript/compile.c +++ b/dlls/jscript/compile.c @@ -1778,13 +1778,24 @@ static HRESULT compile_function(compiler_ctx_t *ctx, source_elements_t *source, return S_OK; } -HRESULT compile_script(parser_ctx_t *parser, BOOL from_eval) +HRESULT compile_script(script_ctx_t *ctx, const WCHAR *code, const WCHAR *delimiter, BOOL from_eval, + parser_ctx_t **ret) { + parser_ctx_t *parser; HRESULT hres; - hres = init_compiler(parser); + hres = script_parse(ctx, code, delimiter, from_eval, &parser); if(FAILED(hres)) return hres; - return compile_function(parser->compiler, parser->source, from_eval); + hres = init_compiler(parser); + if(SUCCEEDED(hres)) + hres = compile_function(parser->compiler, parser->source, from_eval); + if(FAILED(hres)) { + parser_release(parser); + return hres; + } + + *ret = parser; + return S_OK; } diff --git a/dlls/jscript/engine.h b/dlls/jscript/engine.h index 71355784a6c..73553b6bf81 100644 --- a/dlls/jscript/engine.h +++ b/dlls/jscript/engine.h @@ -577,4 +577,4 @@ typedef struct { prop_val_t *property_list; } property_value_expression_t; -HRESULT compile_script(parser_ctx_t*,BOOL) DECLSPEC_HIDDEN; +HRESULT compile_script(script_ctx_t*,const WCHAR*,const WCHAR*,BOOL,parser_ctx_t**) DECLSPEC_HIDDEN; diff --git a/dlls/jscript/function.c b/dlls/jscript/function.c index abccae59024..23f7e47aabb 100644 --- a/dlls/jscript/function.c +++ b/dlls/jscript/function.c @@ -774,7 +774,7 @@ static HRESULT construct_function(script_ctx_t *ctx, DISPPARAMS *dp, jsexcept_t if(FAILED(hres)) return hres; - hres = script_parse(ctx, str, NULL, FALSE, &parser); + hres = compile_script(ctx, str, NULL, FALSE, &parser); heap_free(str); if(FAILED(hres)) return hres; diff --git a/dlls/jscript/global.c b/dlls/jscript/global.c index 620b554fdc3..8a6fe380d13 100644 --- a/dlls/jscript/global.c +++ b/dlls/jscript/global.c @@ -371,7 +371,7 @@ static HRESULT JSGlobal_eval(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DIS } TRACE("parsing %s\n", debugstr_w(V_BSTR(arg))); - hres = script_parse(ctx, V_BSTR(arg), NULL, TRUE, &parser_ctx); + hres = compile_script(ctx, V_BSTR(arg), NULL, TRUE, &parser_ctx); if(FAILED(hres)) { WARN("parse (%s) failed: %08x\n", debugstr_w(V_BSTR(arg)), hres); return throw_syntax_error(ctx, ei, hres, NULL); diff --git a/dlls/jscript/jscript.c b/dlls/jscript/jscript.c index 8b0c28b64fc..81c8f21c791 100644 --- a/dlls/jscript/jscript.c +++ b/dlls/jscript/jscript.c @@ -762,7 +762,7 @@ static HRESULT WINAPI JScriptParse_ParseScriptText(IActiveScriptParse *iface, if(This->thread_id != GetCurrentThreadId() || This->ctx->state == SCRIPTSTATE_CLOSED) return E_UNEXPECTED; - hres = script_parse(This->ctx, pstrCode, pstrDelimiter, FALSE, &parser_ctx); + hres = compile_script(This->ctx, pstrCode, pstrDelimiter, FALSE, &parser_ctx); if(FAILED(hres)) return hres; @@ -829,7 +829,7 @@ static HRESULT WINAPI JScriptParseProcedure_ParseProcedureText(IActiveScriptPars if(This->thread_id != GetCurrentThreadId() || This->ctx->state == SCRIPTSTATE_CLOSED) return E_UNEXPECTED; - hres = script_parse(This->ctx, pstrCode, pstrDelimiter, FALSE, &parser_ctx); + hres = compile_script(This->ctx, pstrCode, pstrDelimiter, FALSE, &parser_ctx); if(FAILED(hres)) { WARN("Parse failed %08x\n", hres); return hres; diff --git a/dlls/jscript/parser.y b/dlls/jscript/parser.y index 2a420346911..66b547635e1 100644 --- a/dlls/jscript/parser.y +++ b/dlls/jscript/parser.y @@ -1582,8 +1582,6 @@ HRESULT script_parse(script_ctx_t *ctx, const WCHAR *code, const WCHAR *delimite parser_parse(parser_ctx); jsheap_clear(mark); hres = parser_ctx->hres; - if(SUCCEEDED(hres)) - hres = compile_script(parser_ctx, from_eval); if(FAILED(hres)) { parser_release(parser_ctx); return hres; -- 2.11.4.GIT