commit cbe156f214fc871ee210f9beda6f5045eb1965b9
parent 3412fc553500750f8b02794298922a4227f2aa6e
Author: Tooru Fujisawa <arai_a@mac.com>
Date: Wed, 8 Oct 2025 04:04:44 +0000
Bug 1991370 - Part 1: Add FrontendContext-based EncodeStencil. r=bthrall
Differential Revision: https://phabricator.services.mozilla.com/D266622
Diffstat:
3 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/js/public/experimental/JSStencil.h b/js/public/experimental/JSStencil.h
@@ -207,6 +207,9 @@ namespace JS {
extern JS_PUBLIC_API TranscodeResult EncodeStencil(JSContext* cx,
Stencil* stencil,
TranscodeBuffer& buffer);
+extern JS_PUBLIC_API TranscodeResult EncodeStencil(JS::FrontendContext* fc,
+ Stencil* stencil,
+ TranscodeBuffer& buffer);
// Deserialize data and create a new Stencil.
extern JS_PUBLIC_API TranscodeResult
diff --git a/js/src/frontend/StencilXdr.cpp b/js/src/frontend/StencilXdr.cpp
@@ -1486,11 +1486,15 @@ static JS::TranscodeResult EncodeStencilImpl(
JS::TranscodeResult JS::EncodeStencil(JSContext* cx, JS::Stencil* stencil,
JS::TranscodeBuffer& buffer) {
AutoReportFrontendContext fc(cx);
+ return JS::EncodeStencil(&fc, stencil, buffer);
+}
+JS::TranscodeResult JS::EncodeStencil(FrontendContext* fc, JS::Stencil* stencil,
+ JS::TranscodeBuffer& buffer) {
const CompilationStencil* initial;
UniquePtr<CompilationStencil> merged;
if (stencil->canLazilyParse()) {
- merged.reset(stencil->getMerged(&fc));
+ merged.reset(stencil->getMerged(fc));
if (!merged) {
return TranscodeResult::Throw;
}
@@ -1499,7 +1503,7 @@ JS::TranscodeResult JS::EncodeStencil(JSContext* cx, JS::Stencil* stencil,
initial = stencil->getInitial();
}
- return EncodeStencilImpl(&fc, initial, buffer);
+ return EncodeStencilImpl(fc, initial, buffer);
}
JS::TranscodeResult js::EncodeStencil(JSContext* cx,
@@ -1509,6 +1513,12 @@ JS::TranscodeResult js::EncodeStencil(JSContext* cx,
return EncodeStencilImpl(&fc, stencil, buffer);
}
+JS::TranscodeResult js::EncodeStencil(FrontendContext* fc,
+ frontend::CompilationStencil* stencil,
+ JS::TranscodeBuffer& buffer) {
+ return EncodeStencilImpl(fc, stencil, buffer);
+}
+
XDRResult XDRStencilDecoder::codeStencil(
const JS::ReadOnlyDecodeOptions& options,
frontend::CompilationStencil& stencil) {
diff --git a/js/src/frontend/StencilXdr.h b/js/src/frontend/StencilXdr.h
@@ -218,6 +218,10 @@ JS::TranscodeResult EncodeStencil(JSContext* cx,
frontend::CompilationStencil* stencil,
JS::TranscodeBuffer& buffer);
+JS::TranscodeResult EncodeStencil(JS::FrontendContext* fc,
+ frontend::CompilationStencil* stencil,
+ JS::TranscodeBuffer& buffer);
+
JS::TranscodeResult DecodeStencil(JS::FrontendContext* fc,
const JS::ReadOnlyDecodeOptions& options,
const JS::TranscodeRange& range,