Bug 1693433 - Part 4: Make StencilModuleMetadata ref-counted. r=tcampbell

To borrow ExtensibleCompilationStencil.moduleMetadata from CompilationStencil.moduleMetadata.

Differential Revision: https://phabricator.services.mozilla.com/D105891
This commit is contained in:
Tooru Fujisawa 2021-02-24 04:22:31 +00:00
parent cb0853be4b
commit 21f7c222fc
4 changed files with 9 additions and 7 deletions

View File

@ -544,7 +544,7 @@ struct CompilationStencil : public BaseCompilationStencil {
RefPtr<ScriptSource> source;
// Module metadata if this is a module compile.
UniquePtr<StencilModuleMetadata> moduleMetadata;
RefPtr<StencilModuleMetadata> moduleMetadata;
// Immutable data computed during initial compilation and never updated during
// delazification.
@ -655,7 +655,7 @@ struct ExtensibleCompilationStencil {
Vector<BigIntStencil, 0, js::SystemAllocPolicy> bigIntData;
Vector<ObjLiteralStencil, 0, js::SystemAllocPolicy> objLiteralData;
UniquePtr<StencilModuleMetadata> moduleMetadata;
RefPtr<StencilModuleMetadata> moduleMetadata;
StencilAsmJSContainer asmJS;

View File

@ -1693,9 +1693,9 @@ ModuleNode* Parser<FullParseHandler, Unit>::moduleBody(
ModuleSharedContext* modulesc) {
MOZ_ASSERT(checkOptionsCalled_);
this->compilationState_.moduleMetadata = MakeUnique<StencilModuleMetadata>();
this->compilationState_.moduleMetadata =
cx_->template new_<StencilModuleMetadata>();
if (!this->compilationState_.moduleMetadata) {
js::ReportOutOfMemory(cx_);
return null();
}

View File

@ -24,6 +24,7 @@
#include "frontend/ScriptIndex.h" // ScriptIndex
#include "frontend/TypedIndex.h" // TypedIndex
#include "js/AllocPolicy.h" // SystemAllocPolicy
#include "js/RefCounted.h" // AtomicRefCounted
#include "js/RegExpFlags.h" // JS::RegExpFlags
#include "js/RootingAPI.h" // Handle
#include "js/TypeDecls.h" // JSContext
@ -580,7 +581,8 @@ class StencilModuleEntry {
};
// Metadata generated by parsing module scripts, including import/export tables.
class StencilModuleMetadata {
class StencilModuleMetadata
: public js::AtomicRefCounted<StencilModuleMetadata> {
public:
using EntryVector = Vector<StencilModuleEntry, 0, js::SystemAllocPolicy>;

View File

@ -643,9 +643,9 @@ XDRResult XDRCompilationStencil(XDRState<mode>* xdr,
if (stencil.scriptExtra[CompilationStencil::TopLevelIndex].isModule()) {
if (mode == XDR_DECODE) {
stencil.moduleMetadata = MakeUnique<StencilModuleMetadata>();
stencil.moduleMetadata =
xdr->cx()->template new_<StencilModuleMetadata>();
if (!stencil.moduleMetadata) {
js::ReportOutOfMemory(xdr->cx());
return xdr->fail(JS::TranscodeResult::Throw);
}
}