mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-20 00:35:44 +00:00
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:
parent
563e73698d
commit
002d6e30e8
@ -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) {
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user