Bug 1554362 - Add a UTF-8 overload of nsJSUtils::ExecutionContext::Compile. r=bzbarsky

Differential Revision: https://phabricator.services.mozilla.com/D34822

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Jeff Walden 2019-06-15 20:47:58 +00:00
parent 563e73698d
commit 002d6e30e8
2 changed files with 41 additions and 6 deletions

View File

@ -206,8 +206,29 @@ nsresult nsJSUtils::ExecutionContext::JoinCompile(
return NS_OK;
}
nsresult nsJSUtils::ExecutionContext::Compile(
static JSScript* CompileScript(
JSContext* aCx, JS::Handle<JS::StackGCVector<JSObject*>> aScopeChain,
JS::CompileOptions& aCompileOptions, JS::SourceText<char16_t>& aSrcBuf) {
return aScopeChain.length() == 0
? JS::Compile(aCx, aCompileOptions, aSrcBuf)
: JS::CompileForNonSyntacticScope(aCx, aCompileOptions, aSrcBuf);
}
static JSScript* CompileScript(
JSContext* aCx, JS::Handle<JS::StackGCVector<JSObject*>> aScopeChain,
JS::CompileOptions& aCompileOptions, JS::SourceText<Utf8Unit>& aSrcBuf) {
// Once the UTF-8 overloads don't inflate, we can get rid of these two
// |CompileScript| overloads and just call the JSAPI directly in the one
// caller.
return aScopeChain.length() == 0
? JS::CompileDontInflate(aCx, aCompileOptions, aSrcBuf)
: JS::CompileForNonSyntacticScopeDontInflate(aCx, aCompileOptions,
aSrcBuf);
}
template <typename Unit>
nsresult nsJSUtils::ExecutionContext::InternalCompile(
JS::CompileOptions& aCompileOptions, JS::SourceText<Unit>& aSrcBuf) {
if (mSkip) {
return mRv;
}
@ -219,11 +240,7 @@ nsresult nsJSUtils::ExecutionContext::Compile(
#endif
MOZ_ASSERT(!mScript);
mScript =
mScopeChain.length() == 0
? JS::Compile(mCx, aCompileOptions, aSrcBuf)
: JS::CompileForNonSyntacticScope(mCx, aCompileOptions, aSrcBuf);
mScript = CompileScript(mCx, mScopeChain, aCompileOptions, aSrcBuf);
if (!mScript) {
mSkip = true;
mRv = EvaluationExceptionToNSResult(mCx);
@ -239,6 +256,16 @@ nsresult nsJSUtils::ExecutionContext::Compile(
return NS_OK;
}
nsresult nsJSUtils::ExecutionContext::Compile(
JS::CompileOptions& aCompileOptions, JS::SourceText<char16_t>& aSrcBuf) {
return InternalCompile(aCompileOptions, aSrcBuf);
}
nsresult nsJSUtils::ExecutionContext::Compile(
JS::CompileOptions& aCompileOptions, JS::SourceText<Utf8Unit>& aSrcBuf) {
return InternalCompile(aCompileOptions, aSrcBuf);
}
nsresult nsJSUtils::ExecutionContext::Compile(
JS::CompileOptions& aCompileOptions, const nsAString& aScript) {
if (mSkip) {

View File

@ -109,6 +109,12 @@ class nsJSUtils {
bool mScriptUsed;
#endif
private:
// Compile a script contained in a SourceText.
template <typename Unit>
nsresult InternalCompile(JS::CompileOptions& aCompileOptions,
JS::SourceText<Unit>& aSrcBuf);
public:
// Enter compartment in which the code would be executed. The JSContext
// must come from an AutoEntryScript.
@ -153,6 +159,8 @@ class nsJSUtils {
// Compile a script contained in a SourceText.
nsresult Compile(JS::CompileOptions& aCompileOptions,
JS::SourceText<char16_t>& aSrcBuf);
nsresult Compile(JS::CompileOptions& aCompileOptions,
JS::SourceText<mozilla::Utf8Unit>& aSrcBuf);
// Compile a script contained in a string.
nsresult Compile(JS::CompileOptions& aCompileOptions,