Bug 1342012 - Refactor nsJSUtils::ExecutionContext to separate compilation and execution steps and allow extraction of compiled JSScript r=nbp r=smaug

This commit is contained in:
Jon Coppeard
2018-12-06 16:52:16 -05:00
parent 30b5587e3d
commit accbd30ca2
7 changed files with 151 additions and 150 deletions

View File

@@ -8,8 +8,8 @@
#include "ScriptLoadHandler.h"
#include "ScriptLoadRequest.h"
#include "ScriptTrace.h"
#include "ModuleLoadRequest.h"
#include "LoadedScript.h"
#include "ModuleLoadRequest.h"
#include "prsystem.h"
#include "jsapi.h"
@@ -2470,13 +2470,14 @@ nsresult ScriptLoader::EvaluateScript(ScriptLoadRequest* aRequest) {
if (aRequest->mOffThreadToken) {
LOG(("ScriptLoadRequest (%p): Decode Bytecode & Join and Execute",
aRequest));
rv = exec.DecodeJoinAndExec(&aRequest->mOffThreadToken);
exec.JoinDecode(&aRequest->mOffThreadToken);
} else {
LOG(("ScriptLoadRequest (%p): Decode Bytecode and Execute",
aRequest));
rv = exec.DecodeAndExec(options, aRequest->mScriptBytecode,
aRequest->mBytecodeOffset);
exec.Decode(options, aRequest->mScriptBytecode,
aRequest->mBytecodeOffset);
}
rv = exec.ExecScript();
// We do not expect to be saving anything when we already have some
// bytecode.
MOZ_ASSERT(!aRequest->mCacheInfo);
@@ -2496,30 +2497,34 @@ nsresult ScriptLoader::EvaluateScript(ScriptLoadRequest* aRequest) {
"Execute",
aRequest));
if (aRequest->IsBinASTSource()) {
rv = exec.DecodeBinASTJoinAndExec(&aRequest->mOffThreadToken,
&script);
rv = exec.JoinDecodeBinAST(&aRequest->mOffThreadToken);
} else {
MOZ_ASSERT(aRequest->IsTextSource());
rv = exec.JoinAndExec(&aRequest->mOffThreadToken, &script);
rv = exec.JoinCompile(&aRequest->mOffThreadToken);
}
} else {
// Main thread parsing (inline and small scripts)
LOG(("ScriptLoadRequest (%p): Compile And Exec", aRequest));
if (aRequest->IsBinASTSource()) {
rv = exec.DecodeBinASTAndExec(
options, aRequest->ScriptBinASTData().begin(),
aRequest->ScriptBinASTData().length(), &script);
rv = exec.DecodeBinAST(options,
aRequest->ScriptBinASTData().begin(),
aRequest->ScriptBinASTData().length());
} else {
MOZ_ASSERT(aRequest->IsTextSource());
auto srcBuf = GetScriptSource(cx, aRequest);
if (srcBuf) {
rv = exec.CompileAndExec(options, *srcBuf, &script);
rv = exec.Compile(options, *srcBuf);
} else {
rv = NS_ERROR_OUT_OF_MEMORY;
}
}
}
if (rv == NS_OK) {
script = exec.GetScript();
rv = exec.ExecScript();
}
}
// Queue the current script load request to later save the bytecode.