From 40a355a42d4a9444dc753c04c6608dade2f06a23 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 03:13:27 +0200 Subject: Adding upstream version 125.0.1. Signed-off-by: Daniel Baumann --- js/src/builtin/ModuleObject.h | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) (limited to 'js/src/builtin/ModuleObject.h') diff --git a/js/src/builtin/ModuleObject.h b/js/src/builtin/ModuleObject.h index 015cb42a5f..d39d65b18c 100644 --- a/js/src/builtin/ModuleObject.h +++ b/js/src/builtin/ModuleObject.h @@ -43,6 +43,7 @@ namespace js { class ArrayObject; class CyclicModuleFields; +class SyntheticModuleFields; class ListObject; class ModuleEnvironmentObject; class ModuleObject; @@ -51,16 +52,20 @@ class ScriptSourceObject; class ModuleRequestObject : public NativeObject { public: - enum { SpecifierSlot = 0, AssertionSlot, SlotCount }; + enum { SpecifierSlot = 0, AttributesSlot, SlotCount }; static const JSClass class_; static bool isInstance(HandleValue value); [[nodiscard]] static ModuleRequestObject* create( JSContext* cx, Handle specifier, - Handle maybeAssertions); + Handle maybeAttributes); JSAtom* specifier() const; - ArrayObject* assertions() const; + ArrayObject* attributes() const; + bool hasAttributes() const; + static bool getModuleType(JSContext* cx, + const Handle moduleRequest, + JS::ModuleType& moduleType); }; using ModuleRequestVector = @@ -309,6 +314,10 @@ constexpr uint32_t ASYNC_EVALUATING_POST_ORDER_INIT = 1; // Value that the field is set to after being cleared. constexpr uint32_t ASYNC_EVALUATING_POST_ORDER_CLEARED = 0; +// Currently, the ModuleObject class is used to represent both the Source Text +// Module Record and the Synthetic Module Record. Ideally, this is something +// that should be refactored to follow the same hierarchy as in the spec. +// TODO: See Bug 1880519. class ModuleObject : public NativeObject { public: // Module fields including those for AbstractModuleRecords described by: @@ -318,6 +327,8 @@ class ModuleObject : public NativeObject { EnvironmentSlot, NamespaceSlot, CyclicModuleFieldsSlot, + // `SyntheticModuleFields` if a synthetic module. Otherwise `undefined`. + SyntheticModuleFieldsSlot, SlotCount }; @@ -327,6 +338,9 @@ class ModuleObject : public NativeObject { static ModuleObject* create(JSContext* cx); + static ModuleObject* createSynthetic( + JSContext* cx, MutableHandle exportNames); + // Initialize the slots on this object that are dependent on the script. void initScriptSlots(HandleScript script); @@ -364,6 +378,8 @@ class ModuleObject : public NativeObject { mozilla::Span localExportEntries() const; mozilla::Span indirectExportEntries() const; mozilla::Span starExportEntries() const; + const ExportNameVector& syntheticExportNames() const; + IndirectBindingMap& importBindings(); void setStatus(ModuleStatus newStatus); @@ -390,6 +406,8 @@ class ModuleObject : public NativeObject { void clearAsyncEvaluatingPostOrder(); void setCycleRoot(ModuleObject* cycleRoot); ModuleObject* getCycleRoot() const; + bool hasCyclicModuleFields() const; + bool hasSyntheticModuleFields() const; static void onTopLevelEvaluationFinished(ModuleObject* module); @@ -413,6 +431,9 @@ class ModuleObject : public NativeObject { MutableHandle> exports); static bool createEnvironment(JSContext* cx, Handle self); + static bool createSyntheticEnvironment(JSContext* cx, + Handle self, + Handle> values); void initAsyncSlots(JSContext* cx, bool hasTopLevelAwait, Handle asyncParentModules); @@ -423,9 +444,11 @@ class ModuleObject : public NativeObject { static void trace(JSTracer* trc, JSObject* obj); static void finalize(JS::GCContext* gcx, JSObject* obj); - bool hasCyclicModuleFields() const; CyclicModuleFields* cyclicModuleFields(); const CyclicModuleFields* cyclicModuleFields() const; + + SyntheticModuleFields* syntheticModuleFields(); + const SyntheticModuleFields* syntheticModuleFields() const; }; JSObject* GetOrCreateModuleMetaObject(JSContext* cx, HandleObject module); -- cgit v1.2.3