diff --git a/dlls/jscript/compile.c b/dlls/jscript/compile.c index 8d1487baa1..dc6f0994d8 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 71355784a6..73553b6bf8 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 abccae5902..23f7e47aab 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 620b554fdc..8a6fe380d1 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 8b0c28b64f..81c8f21c79 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 2a42034691..66b547635e 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;