diff options
author | Brian Smith <brian@dbsoft.org> | 2023-04-20 07:38:48 -0500 |
---|---|---|
committer | Brian Smith <brian@dbsoft.org> | 2023-04-27 13:34:41 -0500 |
commit | 8431e52405bf4cd9d34eae9940cb665c7faa2c7e (patch) | |
tree | 526ba2500a3655ee2ac8ffbc22d96a97c412b970 /js/src/jsapi.h | |
parent | 3a59f91dee1135c25333bc27527508bb00827000 (diff) | |
download | uxp-8431e52405bf4cd9d34eae9940cb665c7faa2c7e.tar.gz |
Issue #1691 - Part 7e: Dependencies for required to finish part 7d.
https://bugzilla.mozilla.org/show_bug.cgi?id=1331662
Reimplement EvaluateString using the ExecutionContext class.
https://bugzilla.mozilla.org/show_bug.cgi?id=1316078
Extract redudant code into StartOffThreadParseTask.
Use an ExclusiveContext instead of a JSContext in XDR functions.
Add a script decoder as a valid off-main-thread parse-task.
https://bugzilla.mozilla.org/show_bug.cgi?id=900784
Add nsJSUtils functions for encoding and decoding the bytecode.
https://bugzilla.mozilla.org/show_bug.cgi?id=1316081
Add XDRIncrementalEncoder to replace delazified LazyScript in the encoded XDR buffer.
Add an XDRIncrementalEncoder instance on the ScriptSource.
Expose a new JSAPI to incrementally encode bytecode when it is generated.
https://bugzilla.mozilla.org/show_bug.cgi?id=1334091
XDR function use the sourceObject instead of the enclosingScript as argument.
(cherry picked from commit d6de9a669f4b2f5115670bd771cd53d7cfb3956a)
Diffstat (limited to 'js/src/jsapi.h')
-rw-r--r-- | js/src/jsapi.h | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/js/src/jsapi.h b/js/src/jsapi.h index b4ffd52c6f..589b281975 100644 --- a/js/src/jsapi.h +++ b/js/src/jsapi.h @@ -3748,7 +3748,7 @@ namespace JS { * addrefs/copies/tracing/etc. * * Furthermore, in some cases compile options are propagated from one entity to - * another (e.g. from a scriipt to a function defined in that script). This + * another (e.g. from a script to a function defined in that script). This * involves copying over some, but not all, of the options. * * So, we have a class hierarchy that reflects these four use cases: @@ -4186,6 +4186,17 @@ FinishOffThreadModule(JSContext* cx, void* token); extern JS_PUBLIC_API(void) CancelOffThreadModule(JSContext* cx, void* token); +extern JS_PUBLIC_API(bool) +DecodeOffThreadScript(JSContext* cx, const ReadOnlyCompileOptions& options, + mozilla::Vector<uint8_t>& buffer /* TranscodeBuffer& */, size_t cursor, + OffThreadCompileCallback callback, void* callbackData); + +extern JS_PUBLIC_API(JSScript*) +FinishOffThreadScriptDecoder(JSContext* cx, void* token); + +extern JS_PUBLIC_API(void) +CancelOffThreadScriptDecoder(JSContext* cx, void* token); + /** * Compile a function with envChain plus the global as its scope chain. * envChain must contain objects in the current compartment of cx. The actual @@ -6168,7 +6179,10 @@ enum TranscodeResult TranscodeResult_Failure_AsmJSNotSupported = TranscodeResult_Failure | 0x3, TranscodeResult_Failure_BadDecode = TranscodeResult_Failure | 0x4, - // A error, the JSContext has a pending exception. + TranscodeResult_Failure_WrongCompileOption = TranscodeResult_Failure | 0x5, + TranscodeResult_Failure_NotInterpretedFun = TranscodeResult_Failure | 0x6, + + // There is a pending exception on the context. TranscodeResult_Throw = 0x200 }; @@ -6186,6 +6200,25 @@ extern JS_PUBLIC_API(TranscodeResult) DecodeInterpretedFunction(JSContext* cx, TranscodeBuffer& buffer, JS::MutableHandleFunction funp, size_t cursorIndex = 0); +// Register an encoder on the given script source, such that all functions can +// be encoded as they are parsed. This strategy is used to avoid blocking the +// main thread in a non-interruptible way. +// +// The |script| argument of |StartIncrementalEncoding| and +// |FinishIncrementalEncoding| should be the top-level script returned either as +// an out-param of any of the |Compile| functions, or the result of +// |FinishOffThreadScript|. +// +// The |buffer| argument should not be used before until +// |FinishIncrementalEncoding| is called on the same script, and returns +// successfully. If any of these functions failed, the |buffer| content is +// undefined. +extern JS_PUBLIC_API(bool) +StartIncrementalEncoding(JSContext* cx, TranscodeBuffer& buffer, JS::HandleScript script); + +extern JS_PUBLIC_API(bool) +FinishIncrementalEncoding(JSContext* cx, JS::HandleScript script); + } /* namespace JS */ namespace js { |