From 872001a36a22d754aa4cb58b3700e50f12391583 Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Sat, 30 Nov 2024 13:48:05 -0800 Subject: [PATCH 1/6] editorial: editor feedback --- README.md | 3 +++ spec.emu | 34 +++++++++++++++++++++------------- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 062f19a..8166e21 100644 --- a/README.md +++ b/README.md @@ -154,6 +154,9 @@ new Worker(workerModule); The current proposed API is for a `ModuleSource` class instance extending `AbstractModuleSource`. +This is a new non-global intrinsic with the same reachability properties of +`AbstractModuleSource` via any source phase import to a JS module. + ### Dynamic Import Since module sources are obtained from the module registry, they are cached at their registry key, diff --git a/spec.emu b/spec.emu index 330cea2..6740352 100644 --- a/spec.emu +++ b/spec.emu @@ -851,10 +851,10 @@ contributors: Luca Casonato, Guy Bedford 1. Return _promiseCapability_.[[Promise]]. 1. Set _attributesObj_ to Completion(Get(_options_, *"with"*)). 1. IfAbruptRejectPromise(_attributesObj_, _promiseCapability_). - 1. If _module_.[[Realm]] is not the current Realm Record, then + 1. If _attributesObj_ is not *undefined*, then 1. Perform ! Call(_promiseCapability_.[[Reject]], *undefined*, « a newly created *TypeError* object »). 1. Return _promiseCapability_.[[Promise]]. - 1. If _attributesObj_ is not *undefined*, then + 1. If _module_.[[Realm]] is not the current Realm Record, then 1. Perform ! Call(_promiseCapability_.[[Reject]], *undefined*, « a newly created *TypeError* object »). 1. Return _promiseCapability_.[[Promise]]. 1. Set _moduleRequest_ to _module_. @@ -985,11 +985,11 @@ contributors: Luca Casonato, Guy Bedford - GetModuleSourceName() + GetModuleSourceKind() -

For Module Records that return a normal completion for GetModuleSource(), returns a constant String for each concrete module record that exposes a source representation through `GetModuleSource()`, to be provided in the strongly branded return value of the @@toStringTag getter on %AbstractModuleSource%.

-

For Module Records that do not have a source representation, GetModuleSourceName() is never called.

+

For Module Records that return a normal completion for GetModuleSource(), returns a constant String for each concrete module record that exposes a source representation through `GetModuleSource()`, to be used as the return value of the %Symbol.toStringTag% getter on %AbstractModuleSource%.

+

For Module Records that do not have a source representation, GetModuleSourceKind() is never called.

@@ -1198,19 +1198,27 @@ contributors: Luca Casonato, Guy Bedford
a Source Text Module Record _module_
description
-
Checks module source equality (not module instance equality) of this module record against another module record
+
It checks module source equality (not module instance equality) of this module record against another module record.
1. If _otherModule_ is not a Source Text Module Record, return *false*. 1. If _otherModule_.[[SourceText]] is _module_.[[SourceText]], return *true*. 1. Return *false*. + + +

This concrete method is not currently called within ECMA-262 but is made available to hosts in order to ensure well-defined module source equality.

+ +

Source equality is a distinct property from key equality, which is necessary to ensure the invariant that HostLoadImportedModule for a module source will always return an instance of that exact same module source, even if its module record may be a different module record.

+ +

By implementing but not using source equality in ECMA-262 we define the meaning of the [[SourceText]] field as distinct from the [[EcmaScriptCode]] in providing this equality.

+

- GetModuleSourceName ( ): a String + GetModuleSourceKind ( ): a String

@@ -1317,7 +1325,7 @@ contributors: Luca Casonato, Guy Bedford
description
-
Provides the concrete Module Record for all Module Source objects.
+
It provides the concrete Module Record for all Module Source objects.
@@ -1349,7 +1357,7 @@ contributors: Luca Casonato, Guy Bedford

An implementation of HostGetModuleSourceName must conform to the following requirements:

  • - For any object that is a Module Source Object, returns a normal completion for a String corresponding to the source record type to be used as the strongly branded return value of the @@toStringTag getter on %AbstractModuleSource%. + For any object that is a Module Source Object, returns a normal completion for a String corresponding to the source record type to be used as the strongly branded return value of the %Symbol.toStringTag% getter on %AbstractModuleSource%.
  • For any object which is not a Module Source Object, returns a throw completion. @@ -1400,9 +1408,9 @@ contributors: Luca Casonato, Guy Bedford

    Properties of the %AbstractModuleSource% Prototype Object

    - -

    get %AbstractModuleSource%.prototype [ @@toStringTag ]

    -

    %AbstractModuleSource%.prototype `[@@toStringTag]` is an accessor property whose set accessor function is *undefined*. Its get accessor function performs the following steps when called:

    + +

    get %AbstractModuleSource%.prototype [ %Symbol.toStringTag% ]

    +

    %AbstractModuleSource%.prototype `[%Symbol.toStringTag%]` is an accessor property whose set accessor function is *undefined*. Its get accessor function performs the following steps when called:

    1. Let _O_ be the *this* value. 1. If _O_ is not an Object, return *undefined*. @@ -1411,7 +1419,7 @@ contributors: Luca Casonato, Guy Bedford 1. Let _name_ be ! _sourceNameResult_. 1. Let _module_ be GetModuleSourceModuleRecord(_O_). 1. If _module_ is ~not-a-source~, return *undefined*. - 1. Let _name_ be _module_.GetModuleSourceName(). + 1. Let _name_ be _module_.GetModuleSourceKind(). 1. Assert: _name_ is a String. 1. Return _name_. From 8d030ebed68c5b14d3835dc15766ecde50e10353 Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Sat, 30 Nov 2024 13:52:06 -0800 Subject: [PATCH 2/6] rebuild --- build/index.html | 74 +++++++++++++++++++++++++++--------------------- 1 file changed, 41 insertions(+), 33 deletions(-) diff --git a/build/index.html b/build/index.html index 5f10be2..19474c4 100644 --- a/build/index.html +++ b/build/index.html @@ -1423,7 +1423,7 @@ }); let sdoMap = JSON.parse(`{}`); -let biblio = JSON.parse(`{"refsByClause":{"sec-well-known-intrinsic-objects":["_ref_0","_ref_1"],"sec-abstract-module-records":["_ref_2","_ref_10","_ref_11","_ref_12","_ref_13","_ref_14","_ref_15","_ref_16","_ref_17","_ref_18","_ref_19"],"sec-HostLoadImportedModule":["_ref_3","_ref_24","_ref_25","_ref_26","_ref_27","_ref_28","_ref_29","_ref_30","_ref_31","_ref_32","_ref_33"],"sec-evaluate-import-call":["_ref_4","_ref_5","_ref_6","_ref_7","_ref_8","_ref_9"],"sec-source-text-module-records":["_ref_20","_ref_21"],"sec-source-text-module-record-getmodulesource":["_ref_22"],"sec-source-text-module-record-sourceequals":["_ref_23"],"sec-FinishLoadingImportedModule":["_ref_34","_ref_35","_ref_36"],"sec-getmodulesourcemodulerecord":["_ref_37","_ref_38","_ref_39","_ref_40"],"sec-HostGetModuleSourceName":["_ref_41","_ref_42"],"sec-HostGetModuleSourceModuleRecord":["_ref_43","_ref_44","_ref_45"],"sec-module-semantics":["_ref_46","_ref_47"],"sec-module-source-objects":["_ref_48","_ref_49"],"sec-get-%abstractmodulesource%.prototype.@@tostringtag":["_ref_50","_ref_51","_ref_52","_ref_53"],"sec-properties-of-modulesource-instances":["_ref_54"],"sec-host-hooks-summary":["_ref_55","_ref_56","_ref_57"]},"entries":[{"type":"table","id":"table-well-known-intrinsic-objects","number":1,"caption":"Table 1: Well-Known Intrinsic Objects","referencingIds":["_ref_0"]},{"type":"clause","id":"sec-well-known-intrinsic-objects","titleHTML":"Well-Known Intrinsic Objects","number":"1.1.1.1"},{"type":"clause","id":"sec-object-type","titleHTML":"Object Type","number":"1.1.1","referencingIds":["_ref_4","_ref_6","_ref_7","_ref_8","_ref_50","_ref_51"]},{"type":"clause","id":"sec-ecmascript-language-types","titleHTML":"ECMAScript Language Types","number":"1.1"},{"type":"op","aoid":"Type","refId":"sec-ecmascript-data-types-and-values"},{"type":"clause","id":"sec-ecmascript-data-types-and-values","titleHTML":"ECMAScript Data Types and Values","number":"1"},{"type":"op","aoid":"EvaluateImportCall","refId":"sec-evaluate-import-call"},{"type":"clause","id":"sec-evaluate-import-call","title":"EvaluateImportCall ( specifierExpression, phase [ , optionsExpression ] )","titleHTML":"EvaluateImportCall ( specifierExpression, phase [ , optionsExpression ] )","number":"13.3.10.1"},{"type":"clause","id":"sec-import-calls","titleHTML":"Import Calls","number":"13.3.10","referencingIds":["_ref_3"]},{"type":"clause","id":"sec-left-hand-side-expressions","titleHTML":"Left-Hand-Side Expressions","number":"13.3"},{"type":"clause","id":"sec-ecmascript-language-expressions","titleHTML":"ECMAScript Language: Expressions","number":"13"},{"type":"table","id":"table-abstract-methods-of-module-records","number":2,"caption":"Table 2: Abstract Methods of Module Records"},{"type":"term","term":"ResolvedBinding Record","id":"resolvedbinding-record"},{"type":"clause","id":"sec-abstract-module-records","titleHTML":"Abstract Module Records","number":"16.1.1.1","referencingIds":["_ref_10","_ref_11","_ref_13","_ref_14","_ref_15","_ref_16","_ref_17","_ref_18","_ref_19","_ref_23","_ref_24","_ref_26","_ref_29","_ref_32","_ref_33","_ref_34","_ref_35","_ref_36","_ref_37","_ref_38","_ref_40","_ref_43","_ref_44","_ref_45"]},{"type":"table","id":"table-additional-fields-of-source-text-module-records","number":3,"caption":"Table 3: Additional Fields of Source Text Module Records"},{"type":"op","aoid":"ParseModule","refId":"sec-parsemodule"},{"type":"clause","id":"sec-parsemodule","title":"ParseModule ( sourceText, realm, hostDefined )","titleHTML":"ParseModule ( sourceText, realm, hostDefined )","number":"16.1.1.2.1"},{"type":"clause","id":"sec-source-text-module-record-getmodulesource","titleHTML":"GetModuleSource ( )","number":"16.1.1.2.2"},{"type":"clause","id":"sec-source-text-module-record-sourceequals","title":"ModuleSourcesEqual ( otherModule )","titleHTML":"ModuleSourcesEqual ( otherModule )","number":"16.1.1.2.3"},{"type":"clause","id":"sec-source-text-module-record-getmodulesourcename","title":"GetModuleSourceName ( )","titleHTML":"GetModuleSourceName ( )","number":"16.1.1.2.4"},{"type":"note","id":"note-HostLoadImportedModule-referrer-Realm-Record","number":1},{"type":"op","aoid":"HostLoadImportedModule","refId":"sec-HostLoadImportedModule"},{"type":"clause","id":"sec-HostLoadImportedModule","title":"HostLoadImportedModule ( referrer, moduleRequest, hostDefined, payload )","titleHTML":"HostLoadImportedModule ( referrer, moduleRequest, hostDefined, payload )","number":"16.1.1.2.5","referencingIds":["_ref_9","_ref_57"]},{"type":"op","aoid":"FinishLoadingImportedModule","refId":"sec-FinishLoadingImportedModule"},{"type":"clause","id":"sec-FinishLoadingImportedModule","title":"FinishLoadingImportedModule ( referrer, moduleRequest, payload, result )","titleHTML":"FinishLoadingImportedModule ( referrer, moduleRequest, payload, result )","number":"16.1.1.2.6","referencingIds":["_ref_25","_ref_27","_ref_28","_ref_31"]},{"type":"clause","id":"sec-source-text-module-records","titleHTML":"Source Text Module Records","number":"16.1.1.2"},{"type":"op","aoid":"GetModuleSourceModuleRecord","refId":"sec-getmodulesourcemodulerecord"},{"type":"clause","id":"sec-getmodulesourcemodulerecord","title":"GetModuleSourceModuleRecord ( specifier )","titleHTML":"GetModuleSourceModuleRecord ( specifier )","number":"16.1.1.3","referencingIds":["_ref_5","_ref_47","_ref_49","_ref_53"]},{"type":"op","aoid":"HostGetModuleSourceName","refId":"sec-HostGetModuleSourceName"},{"type":"clause","id":"sec-HostGetModuleSourceName","title":"HostGetModuleSourceName ( moduleSource )","titleHTML":"HostGetModuleSourceName ( moduleSource )","number":"16.1.1.4","referencingIds":["_ref_48","_ref_52","_ref_55"]},{"type":"op","aoid":"HostGetModuleSourceModuleRecord","refId":"sec-HostGetModuleSourceModuleRecord"},{"type":"clause","id":"sec-HostGetModuleSourceModuleRecord","title":"HostGetModuleSourceModuleRecord ( specifier )","titleHTML":"HostGetModuleSourceModuleRecord ( specifier )","number":"16.1.1.5","referencingIds":["_ref_39","_ref_46","_ref_56"]},{"type":"clause","id":"sec-module-semantics","titleHTML":"Module Semantics","number":"16.1.1"},{"type":"clause","id":"sec-modules","titleHTML":"Modules","number":"16.1"},{"type":"clause","id":"sec-ecmascript-language-scripts-and-modules","titleHTML":"ECMAScript Language: Scripts and Modules","number":"16"},{"type":"term","term":"Module Source Object","refId":"sec-module-source-objects"},{"type":"clause","id":"sec-get-%abstractmodulesource%.prototype.@@tostringtag","titleHTML":"get %AbstractModuleSource%.prototype [ @@toStringTag ]","number":"28.1.1.1"},{"type":"clause","id":"sec-properties-of-the-%abstractmodulesource%-prototype-object","titleHTML":"Properties of the %AbstractModuleSource% Prototype Object","number":"28.1.1"},{"type":"clause","id":"sec-modulesource","titleHTML":"ModuleSource ( )","number":"28.1.2.1"},{"type":"clause","id":"sec-module-source-object","title":"The ModuleSource Constructor","titleHTML":"The ModuleSource Constructor","number":"28.1.2","referencingIds":["_ref_1"]},{"type":"term","term":"%ModuleSource% prototype object","refId":"sec-properties-of-the-%modulesource%-prototype-object"},{"type":"term","term":"%ModuleSource.prototype%","refId":"sec-properties-of-the-%modulesource%-prototype-object"},{"type":"clause","id":"sec-%modulesource%.prototype.constructor","title":"%ModuleSource%.prototype.constructor","titleHTML":"%ModuleSource%.prototype.constructor","number":"28.1.3.1"},{"type":"clause","id":"sec-properties-of-the-%modulesource%-prototype-object","title":"Properties of the %ModuleSource% Prototype Object","titleHTML":"Properties of the %ModuleSource% Prototype Object","number":"28.1.3","referencingIds":["_ref_22","_ref_54"]},{"type":"clause","id":"sec-properties-of-modulesource-instances","title":"Properties of ModuleSource Instances","titleHTML":"Properties of ModuleSource Instances","number":"28.1.4"},{"type":"clause","id":"sec-module-source-objects","titleHTML":"Module Source Objects","number":"28.1","referencingIds":["_ref_2","_ref_12","_ref_20","_ref_21","_ref_30","_ref_41","_ref_42"]},{"type":"clause","id":"sec-reflection","titleHTML":"Reflection","number":"28"},{"type":"clause","id":"sec-host-hooks-summary","titleHTML":"Host Hooks","number":"A.1"},{"type":"clause","id":"sec-host-layering-points","titleHTML":"Host Layering Points","number":"A"},{"type":"clause","id":"sec-copyright-and-software-license","title":"Copyright & Software License","titleHTML":"Copyright & Software License","number":"B"}]}`); +let biblio = JSON.parse(`{"refsByClause":{"sec-well-known-intrinsic-objects":["_ref_0","_ref_1"],"sec-abstract-module-records":["_ref_2","_ref_10","_ref_11","_ref_12","_ref_13","_ref_14","_ref_15","_ref_16","_ref_17","_ref_18","_ref_19"],"sec-HostLoadImportedModule":["_ref_3","_ref_25","_ref_26","_ref_27","_ref_28","_ref_29","_ref_30","_ref_31","_ref_32","_ref_33","_ref_34"],"sec-evaluate-import-call":["_ref_4","_ref_5","_ref_6","_ref_7","_ref_8","_ref_9"],"sec-source-text-module-records":["_ref_20","_ref_21"],"sec-source-text-module-record-getmodulesource":["_ref_22"],"sec-source-text-module-record-sourceequals":["_ref_23","_ref_24"],"sec-FinishLoadingImportedModule":["_ref_35","_ref_36","_ref_37"],"sec-getmodulesourcemodulerecord":["_ref_38","_ref_39","_ref_40","_ref_41"],"sec-HostGetModuleSourceName":["_ref_42","_ref_43"],"sec-HostGetModuleSourceModuleRecord":["_ref_44","_ref_45","_ref_46"],"sec-module-semantics":["_ref_47","_ref_48"],"sec-module-source-objects":["_ref_49","_ref_50"],"sec-get-%abstractmodulesource%.prototype.%Symbol.tostringtag%":["_ref_51","_ref_52","_ref_53","_ref_54"],"sec-properties-of-modulesource-instances":["_ref_55"],"sec-host-hooks-summary":["_ref_56","_ref_57","_ref_58"]},"entries":[{"type":"table","id":"table-well-known-intrinsic-objects","number":1,"caption":"Table 1: Well-Known Intrinsic Objects","referencingIds":["_ref_0"]},{"type":"clause","id":"sec-well-known-intrinsic-objects","titleHTML":"Well-Known Intrinsic Objects","number":"1.1.1.1"},{"type":"clause","id":"sec-object-type","titleHTML":"Object Type","number":"1.1.1","referencingIds":["_ref_4","_ref_6","_ref_7","_ref_8","_ref_51","_ref_52"]},{"type":"clause","id":"sec-ecmascript-language-types","titleHTML":"ECMAScript Language Types","number":"1.1"},{"type":"op","aoid":"Type","refId":"sec-ecmascript-data-types-and-values"},{"type":"clause","id":"sec-ecmascript-data-types-and-values","titleHTML":"ECMAScript Data Types and Values","number":"1"},{"type":"op","aoid":"EvaluateImportCall","refId":"sec-evaluate-import-call"},{"type":"clause","id":"sec-evaluate-import-call","title":"EvaluateImportCall ( specifierExpression, phase [ , optionsExpression ] )","titleHTML":"EvaluateImportCall ( specifierExpression, phase [ , optionsExpression ] )","number":"13.3.10.1"},{"type":"clause","id":"sec-import-calls","titleHTML":"Import Calls","number":"13.3.10","referencingIds":["_ref_3"]},{"type":"clause","id":"sec-left-hand-side-expressions","titleHTML":"Left-Hand-Side Expressions","number":"13.3"},{"type":"clause","id":"sec-ecmascript-language-expressions","titleHTML":"ECMAScript Language: Expressions","number":"13"},{"type":"table","id":"table-abstract-methods-of-module-records","number":2,"caption":"Table 2: Abstract Methods of Module Records"},{"type":"term","term":"ResolvedBinding Record","id":"resolvedbinding-record"},{"type":"clause","id":"sec-abstract-module-records","titleHTML":"Abstract Module Records","number":"16.1.1.1","referencingIds":["_ref_10","_ref_11","_ref_13","_ref_14","_ref_15","_ref_16","_ref_17","_ref_18","_ref_19","_ref_23","_ref_25","_ref_27","_ref_30","_ref_33","_ref_34","_ref_35","_ref_36","_ref_37","_ref_38","_ref_39","_ref_41","_ref_44","_ref_45","_ref_46"]},{"type":"table","id":"table-additional-fields-of-source-text-module-records","number":3,"caption":"Table 3: Additional Fields of Source Text Module Records"},{"type":"op","aoid":"ParseModule","refId":"sec-parsemodule"},{"type":"clause","id":"sec-parsemodule","title":"ParseModule ( sourceText, realm, hostDefined )","titleHTML":"ParseModule ( sourceText, realm, hostDefined )","number":"16.1.1.2.1"},{"type":"clause","id":"sec-source-text-module-record-getmodulesource","titleHTML":"GetModuleSource ( )","number":"16.1.1.2.2"},{"type":"clause","id":"sec-source-text-module-record-sourceequals","title":"ModuleSourcesEqual ( otherModule )","titleHTML":"ModuleSourcesEqual ( otherModule )","number":"16.1.1.2.3"},{"type":"clause","id":"sec-source-text-module-record-getmodulesourcename","title":"GetModuleSourceKind ( )","titleHTML":"GetModuleSourceKind ( )","number":"16.1.1.2.4"},{"type":"note","id":"note-HostLoadImportedModule-referrer-Realm-Record","number":1},{"type":"op","aoid":"HostLoadImportedModule","refId":"sec-HostLoadImportedModule"},{"type":"clause","id":"sec-HostLoadImportedModule","title":"HostLoadImportedModule ( referrer, moduleRequest, hostDefined, payload )","titleHTML":"HostLoadImportedModule ( referrer, moduleRequest, hostDefined, payload )","number":"16.1.1.2.5","referencingIds":["_ref_9","_ref_24","_ref_58"]},{"type":"op","aoid":"FinishLoadingImportedModule","refId":"sec-FinishLoadingImportedModule"},{"type":"clause","id":"sec-FinishLoadingImportedModule","title":"FinishLoadingImportedModule ( referrer, moduleRequest, payload, result )","titleHTML":"FinishLoadingImportedModule ( referrer, moduleRequest, payload, result )","number":"16.1.1.2.6","referencingIds":["_ref_26","_ref_28","_ref_29","_ref_32"]},{"type":"clause","id":"sec-source-text-module-records","titleHTML":"Source Text Module Records","number":"16.1.1.2"},{"type":"op","aoid":"GetModuleSourceModuleRecord","refId":"sec-getmodulesourcemodulerecord"},{"type":"clause","id":"sec-getmodulesourcemodulerecord","title":"GetModuleSourceModuleRecord ( specifier )","titleHTML":"GetModuleSourceModuleRecord ( specifier )","number":"16.1.1.3","referencingIds":["_ref_5","_ref_48","_ref_50","_ref_54"]},{"type":"op","aoid":"HostGetModuleSourceName","refId":"sec-HostGetModuleSourceName"},{"type":"clause","id":"sec-HostGetModuleSourceName","title":"HostGetModuleSourceName ( moduleSource )","titleHTML":"HostGetModuleSourceName ( moduleSource )","number":"16.1.1.4","referencingIds":["_ref_49","_ref_53","_ref_56"]},{"type":"op","aoid":"HostGetModuleSourceModuleRecord","refId":"sec-HostGetModuleSourceModuleRecord"},{"type":"clause","id":"sec-HostGetModuleSourceModuleRecord","title":"HostGetModuleSourceModuleRecord ( specifier )","titleHTML":"HostGetModuleSourceModuleRecord ( specifier )","number":"16.1.1.5","referencingIds":["_ref_40","_ref_47","_ref_57"]},{"type":"clause","id":"sec-module-semantics","titleHTML":"Module Semantics","number":"16.1.1"},{"type":"clause","id":"sec-modules","titleHTML":"Modules","number":"16.1"},{"type":"clause","id":"sec-ecmascript-language-scripts-and-modules","titleHTML":"ECMAScript Language: Scripts and Modules","number":"16"},{"type":"term","term":"Module Source Object","refId":"sec-module-source-objects"},{"type":"clause","id":"sec-get-%abstractmodulesource%.prototype.%Symbol.tostringtag%","titleHTML":"get %AbstractModuleSource%.prototype [ %Symbol.toStringTag% ]","number":"28.1.1.1"},{"type":"clause","id":"sec-properties-of-the-%abstractmodulesource%-prototype-object","titleHTML":"Properties of the %AbstractModuleSource% Prototype Object","number":"28.1.1"},{"type":"clause","id":"sec-modulesource","titleHTML":"ModuleSource ( )","number":"28.1.2.1"},{"type":"clause","id":"sec-module-source-object","title":"The ModuleSource Constructor","titleHTML":"The ModuleSource Constructor","number":"28.1.2","referencingIds":["_ref_1"]},{"type":"term","term":"%ModuleSource% prototype object","refId":"sec-properties-of-the-%modulesource%-prototype-object"},{"type":"term","term":"%ModuleSource.prototype%","refId":"sec-properties-of-the-%modulesource%-prototype-object"},{"type":"clause","id":"sec-%modulesource%.prototype.constructor","title":"%ModuleSource%.prototype.constructor","titleHTML":"%ModuleSource%.prototype.constructor","number":"28.1.3.1"},{"type":"clause","id":"sec-properties-of-the-%modulesource%-prototype-object","title":"Properties of the %ModuleSource% Prototype Object","titleHTML":"Properties of the %ModuleSource% Prototype Object","number":"28.1.3","referencingIds":["_ref_22","_ref_55"]},{"type":"clause","id":"sec-properties-of-modulesource-instances","title":"Properties of ModuleSource Instances","titleHTML":"Properties of ModuleSource Instances","number":"28.1.4"},{"type":"clause","id":"sec-module-source-objects","titleHTML":"Module Source Objects","number":"28.1","referencingIds":["_ref_2","_ref_12","_ref_20","_ref_21","_ref_31","_ref_42","_ref_43"]},{"type":"clause","id":"sec-reflection","titleHTML":"Reflection","number":"28"},{"type":"clause","id":"sec-host-hooks-summary","titleHTML":"Host Hooks","number":"A.1"},{"type":"clause","id":"sec-host-layering-points","titleHTML":"Host Layering Points","number":"A"},{"type":"clause","id":"sec-copyright-and-software-license","title":"Copyright & Software License","titleHTML":"Copyright & Software License","number":"B"}]}`); ;let usesMultipage = false