?um/p1-90`super を含む super を含むソーステキストが直接 eval によって処理される super に関する追加の早期エラールールは The
スクリプトレコードは、評価されるスクリプトに関する情報をカプセル化する。各
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[Realm]] |
|
このスクリプトが生成された |
| [[ECMAScriptCode]] |
|
このスクリプトのソーステキストを解析した結果。 |
| [[LoadedModules]] |
|
このスクリプトによってインポートされた指定子文字列から解決済み Module |
| [[HostDefined]] |
任意(デフォルト値は |
ホスト環境がスクリプトに追加情報を関連付けるために予約されたフィールド。 |
The
実装はスクリプトソーステキストを事前に解析し、ParseScript の評価前に Early Error 条件を検査してもよい。ただし、エラーの報告はこの仕様が実際にそのソーステキストに対して ParseScript を実行する時点まで遅延されなければならない。
The
The
スクリプト評価のための実行コンテキストが確立されるとき、宣言は現在のグローバル環境にインスタンス化される。コード内で宣言されたすべてのグローバルバインディングがインスタンス化される。
この操作は以下の手順を実行する:
var および function 束縛(非 strict の Early Error は let/const/class と var/function の衝突を防ぐが、複数 Script 間の衝突はここで検出される。
super が含まれている場合、Syntax Error となる。
export default
The
ModuleRequest レコードは、指定されたインポート属性を持つモジュールのインポート要求を表す。以下のフィールドで構成される:
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[Specifier]] | 文字列 | モジュール指定子 |
| [[Attributes]] |
|
インポート属性 |
LoadedModuleRequest レコードは、モジュールのインポート要求とそれに対応する Module
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[Specifier]] | 文字列 | モジュール指定子 |
| [[Attributes]] |
|
インポート属性 |
| [[Module]] |
Module |
このモジュール要求に対応する読み込まれたモジュール |
ImportAttribute レコードは以下のフィールドで構成される:
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[Key]] | 文字列 | 属性キー |
| [[Value]] | 文字列 | 属性値 |
The
The
モジュールレコードは、単一のモジュールのインポートおよびエクスポートの構造情報をカプセル化します。この情報は、接続されたモジュール群のインポートとエクスポートを連結するために使用されます。モジュールレコードには、モジュールを評価するときのみ使用される4つのフィールドが含まれます。
仕様上、モジュールレコード値は
Module
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[Realm]] |
|
このモジュールが作成された |
| [[Environment]] |
|
このモジュールのトップレベルバインディングを含む |
| [[Namespace]] |
オブジェクト または |
このモジュールのために作成された場合のモジュール名前空間オブジェクト( |
| [[HostDefined]] |
任意(デフォルト値は |
モジュールに追加情報を関連付ける必要があるホスト環境用に予約されたフィールドです。 |
| メソッド | 目的 | 定義 |
|---|---|---|
| LoadRequestedModules ( [ hostDefined ] ) | The abstract method LoadRequestedModules takes optional argument hostDefined (anything) and returns Promise. 依存関係を再帰的に全てロードすることで、モジュールのリンキング準備を行います。 |
本仕様では以下の型に定義があります。ホストは追加型に独自定義を持たせてもよい:
|
| GetExportedNames ( [ exportStarSet ] ) | The abstract method GetExportedNames takes optional argument exportStarSet (Source Text Module このモジュールから直接あるいは間接的にエクスポートされるすべての名前のリストを返します。 このメソッドを呼び出す前に |
本仕様では以下の型に定義があります。ホストは追加型に独自定義を持たせてもよい:
|
| ResolveExport ( exportName [ , resolveSet ] ) | The abstract method ResolveExport takes argument exportName (a String) and optional argument resolveSet (a このモジュールによってエクスポートされる名前のバインディングを返します。バインディングは ResolvedBinding Record の形式 { [[Module]]: Module この操作は特定のexportName, resolveSet組み合わせに対して常に同じ結果を返さなければなりません。 このメソッドを呼び出す前に |
本仕様では以下の型に定義があります。ホストは追加型に独自定義を持たせてもよい:
|
| Link ( ) | The abstract method Link takes no arguments and returns 正常終了時 モジュール依存を推移的に解決し、 このメソッドを呼び出す前に |
本仕様では以下の型に定義があります。ホストは追加型に独自定義を持たせてもよい:
|
| Evaluate ( ) | The abstract method Evaluate takes no arguments and returns Promise. このモジュールおよびその依存の評価Promiseを返します。評価が正常に終了した場合、またはすでに正常評価済みの場合には解決され、評価エラーの場合またはすでに評価失敗している場合には拒否されます。Promiseが拒否されるとホストはPromise拒否を処理し、評価エラーを再スローすることが期待されます。このモジュールがCyclic Module このメソッドを呼び出す前に |
本仕様では以下の型に定義があります。ホストは追加型に独自定義を持たせてもよい:
|
The
循環モジュールレコードは、Cyclic Module
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[Status]] |
|
初期値は |
| [[EvaluationError]] |
throw 完了 または |
評価中に発生した例外を表す throw 完了。例外が発生していない場合、または [[Status]] が |
| [[DFSAncestorIndex]] |
整数 または |
|
| [[RequestedModules]] |
ModuleRequest |
このモジュール内の import に関連付けられた ModuleRequest |
| [[LoadedModules]] |
LoadedModuleRequest |
このレコードで表されるモジュールが、解決済み Module |
| [[CycleRoot]] |
|
循環内で最初に訪問されたモジュール、すなわち強連結成分の DFS 祖先のルート。循環に含まれないモジュールの場合は、そのモジュール自身となる。 |
| [[HasTLA]] | Boolean |
このモジュールが個別に非同期であるかどうか(例えば、トップレベル await を含む Source Text Module |
| [[AsyncEvaluationOrder]] |
|
このフィールドは初期値が |
| [[TopLevelCapability]] |
|
このモジュールがある循環の [[CycleRoot]] であり、その循環内のいずれかのモジュールに対して |
| [[AsyncParentModules]] |
|
このモジュールまたは依存関係のいずれかが [[HasTLA]] |
| [[PendingAsyncDependencies]] |
整数 または |
このモジュールが非同期依存を持つ場合、このモジュールの実行のために残っている非同期依存モジュールの数を追跡する。非同期依存を持つモジュールは、このフィールドが 0 になり、かつ実行エラーがないときに実行される。 |
| メソッド | 目的 | 定義 |
|---|---|---|
| InitializeEnvironment ( ) | The abstract method InitializeEnvironment takes no arguments and returns |
本仕様では以下の型で定義されている。ホストは独自の定義を持つ追加型を提供してもよい:
|
| ExecuteModule ( [ capability ] ) | The abstract method ExecuteModule takes optional argument capability ( |
本仕様では以下の型で定義されている。ホストは独自の定義を持つ追加型を提供してもよい:
|
GraphLoadingState レコードは、モジュールグラフのロード処理に関する情報を含むレコードである。これは
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[PromiseCapability]] |
|
ロード処理完了時に解決される Promise。 |
| [[IsLoading]] | Boolean | ロード処理がまだ完了していない場合(成功でもエラーでもない場合)に true。 |
| [[PendingModulesCount]] | 0以上の整数 |
保留中の |
| [[Visited]] |
|
現在のロード処理で既にロードされた |
| [[HostDefined]] |
任意(デフォルト値は |
|
以下は、
The
<link rel="preload" as="..."> タグに対して正しい fetch destination を設定するために使用される。
import() 式は hostDefined パラメータを決して設定しない。
The
The
The
The
The
The
モジュールは、InnerModuleEvaluation によって走査されている間は
非同期サイクルのモジュールに依存している任意のモジュールは、そのサイクルが
The
The
ルート module に対する非同期実行が fulfilled されたとき、この関数は、この完了時に同期的に一緒に実行できるモジュールのリストを決定し、それらを execList に設定する。
The
The
この非規範的な節では、いくつかの一般的なモジュールグラフのリンクおよび評価について、特にエラーがどのように発生し得るかに焦点を当てて、一連の例を示す。
まず、次の単純なモジュールグラフを考える。
まずエラー条件がないと仮定する。ホストが最初に A.
次に、A.
最後に、
次に、別の種類のエラー条件を考える。
このシナリオでは、モジュール A は他のあるモジュールへの依存関係を宣言しているが、そのモジュールの
ここでの読み込み、リンク、評価エラーの違いは、次の特性による。
次に、サイクルを持つモジュールグラフを考える。
ここではエントリポイントがモジュール A であると仮定するため、ホストは A.
次にホストは A.
循環モジュールグラフの評価段階についても、成功の場合には同様の話が成り立つ。
ここで、A にリンクエラーがある場合を考える。例えば、C に存在しない束縛をインポートしようとする場合である。その場合、A に対する
あるいは、A に評価エラーがある場合を考える。例えば、そのソースコードが例外を投げる場合である。その場合、上記の手順の評価時の類似物は、A に対する await を含む、またはそれに依存するモジュールについて、
最後に、すべてのモジュールが非同期に完了する、サイクルを持つモジュールグラフを考える。
読み込みおよびリンクは以前と同様に発生し、すべてのモジュールは [[Status]] が
A.
|
フィールド
|
A | B | C | D | E |
|---|---|---|---|---|---|
| [[DFSAncestorIndex]] | 0 | 0 | 0 | 0 | 4 |
| [[Status]] | |||||
| [[AsyncEvaluationOrder]] | 4 | 1 | 3 | 0 | 2 |
| [[AsyncParentModules]] | « » | « A » | « A » | « B, C » | « C » |
| [[PendingAsyncDependencies]] | 2(B および C) | 1(D) | 2(D および E) | 0 | 0 |
E が最初に実行を完了すると仮定する。それが起こると、
|
フィールド
|
C | E |
|---|---|---|
| [[DFSAncestorIndex]] | 0 | 4 |
| [[Status]] | ||
| [[AsyncEvaluationOrder]] | 3 | |
| [[AsyncParentModules]] | « A » | « C » |
| [[PendingAsyncDependencies]] | 1(D) | 0 |
次に D が完了する(まだ実行中だった唯一のモジュールであったため)。それが起こると、await を含む場合、B と並行する可能性がある)。更新されたモジュールのフィールドは
|
フィールド
|
B | C | D |
|---|---|---|---|
| [[DFSAncestorIndex]] | 0 | 0 | 0 |
| [[Status]] | |||
| [[AsyncEvaluationOrder]] | 1 | 3 | |
| [[AsyncParentModules]] | « A » | « A » | « B, C » |
| [[PendingAsyncDependencies]] | 0 | 0 | 0 |
次に C が実行を完了すると仮定する。それが起こると、
|
フィールド
|
A | C |
|---|---|---|
| [[DFSAncestorIndex]] | 0 | 0 |
| [[Status]] | ||
| [[AsyncEvaluationOrder]] | 4 | |
| [[AsyncParentModules]] | « » | « A » |
| [[PendingAsyncDependencies]] | 1(B) | 0 |
その後、B が実行を完了する。それが起こると、
|
フィールド
|
A | B |
|---|---|---|
| [[DFSAncestorIndex]] | 0 | 0 |
| [[Status]] | ||
| [[AsyncEvaluationOrder]] | 4 | |
| [[AsyncParentModules]] | « » | « A » |
| [[PendingAsyncDependencies]] | 0 | 0 |
最後に、A が実行を完了する。それが起こると、
|
フィールド
|
A |
|---|---|
| [[DFSAncestorIndex]] | 0 |
| [[Status]] | |
| [[AsyncEvaluationOrder]] | |
| [[AsyncParentModules]] | « » |
| [[PendingAsyncDependencies]] | 0 |
あるいは、B が実行を完了する前に C が実行に失敗してエラーを返す失敗の場合を考える。それが起こると、
|
フィールド
|
A | C |
|---|---|---|
| [[DFSAncestorIndex]] | 0 | 0 |
| [[Status]] | ||
| [[AsyncEvaluationOrder]] | ||
| [[AsyncParentModules]] | « » | « A » |
| [[PendingAsyncDependencies]] | 1(B) | 0 |
| [[EvaluationError]] | C の評価エラー |
C は C のエラーで A に対して
|
フィールド
|
A |
|---|---|
| [[DFSAncestorIndex]] | 0 |
| [[Status]] | |
| [[AsyncEvaluationOrder]] | |
| [[AsyncParentModules]] | « » |
| [[PendingAsyncDependencies]] | 0 |
| [[EvaluationError]] | C の評価エラー |
その後、B はエラーなしで実行を完了する。それが起こると、
|
フィールド
|
A | B |
|---|---|---|
| [[DFSAncestorIndex]] | 0 | 0 |
| [[Status]] | ||
| [[AsyncEvaluationOrder]] | 4 | 1 |
| [[AsyncParentModules]] | « » | « A » |
| [[PendingAsyncDependencies]] | 0 | 0 |
| [[EvaluationError]] | C の評価エラー |
ソーステキストモジュールレコードは、目標記号
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[ECMAScriptCode]] |
|
目標記号として |
| [[Context]] |
ECMAScript コード実行コンテキストまたは |
このモジュールに関連付けられた実行コンテキスト。モジュールの環境が初期化されるまでは |
| [[ImportMeta]] |
Object または |
import.meta メタプロパティを通じて公開されるオブジェクト。ECMAScript コードからアクセスされるまでは |
| [[ImportEntries]] |
|
このモジュールのコードから導出された |
| [[LocalExportEntries]] |
|
モジュール内で出現する宣言に対応する、このモジュールのコードから導出された |
| [[IndirectExportEntries]] |
|
モジュール内で出現する再エクスポートされたインポート、または export * as namespace 宣言からのエクスポートに対応する、このモジュールのコードから導出された |
| [[StarExportEntries]] |
|
モジュール内で出現する export * 宣言に対応する、このモジュールのコードから導出された export * as namespace 宣言は含まない。
|
ImportEntry レコードは、単一の宣言的インポートに関する情報を要約するレコードである。各
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[ModuleRequest]] |
|
|
| [[ImportName]] |
String または |
[[ModuleRequest]] によって識別されるモジュールによって、目的の束縛がエクスポートされている名前。値 |
| [[LocalName]] | String | インポートするモジュール内で、インポートされた値にローカルにアクセスするために使用される名前。 |
| インポート文形式 | [[ModuleRequest]] | [[ImportName]] | [[LocalName]] |
|---|---|---|---|
import v from "mod";
|
|
|
|
import * as ns from "mod";
|
|
|
|
import {x} from "mod";
|
|
|
|
import {x as v} from "mod";
|
|
|
|
import "mod";
|
|
||
ExportEntry レコードは、単一の宣言的エクスポートに関する情報を要約するレコードである。各
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[ExportName]] |
String または |
このモジュールによってこの束縛をエクスポートするために使用される名前。 |
| [[ModuleRequest]] |
|
|
| [[ImportName]] |
String、 |
[[ModuleRequest]] によって識別されるモジュールによって、目的の束縛がエクスポートされている名前。export * as ns from "mod" 宣言に使用される。export * from "mod" 宣言に使用される。
|
| [[LocalName]] |
String または |
インポートするモジュール内で、エクスポートされた値にローカルにアクセスするために使用される名前。エクスポートされた値がモジュール内からローカルにアクセス可能でない場合は |
| エクスポート文形式 | [[ExportName]] | [[ModuleRequest]] | [[ImportName]] | [[LocalName]] |
|---|---|---|---|---|
export var v;
|
|
|
|
|
export default function f() {}
|
|
|
|
|
export default function () {}
|
|
|
|
|
export default 42;
|
|
|
|
|
export {x};
|
|
|
|
|
export {v as x};
|
|
|
|
|
export {x} from "mod";
|
|
|
|
|
export {v as x} from "mod";
|
|
|
|
|
export * from "mod";
|
|
|
|
|
export * as ns from "mod";
|
|
|
|
|
以下の定義は、
The
export * from を通じて同じ束縛または名前空間を同じ名前で二重にエクスポートすることから生じるawait とする。実装は、そのモジュールソーステキストに対する ParseModule の評価より前に、モジュールソーステキストを解析し、早期エラー条件について解析してもよい。ただし、いかなるエラーの報告も、この仕様が実際にそのソーステキストに対して ParseModule を実行する時点まで延期されなければならない。
以下は、
The
The
定義モジュールが見つかった場合、ResolvedBinding レコード { [[Module]], [[BindingName]] } が返される。このレコードは、もともと要求されたエクスポートの解決済み束縛を識別する。ただし、これがローカル束縛を持たない名前空間のエクスポートである場合を除く。この場合、[[BindingName]] は
It performs the following steps when called:
以下は、
The
The
合成モジュールレコードは、仕様によって定義されたモジュールに関する情報を表すために使用される。そのエクスポート名は作成時に静的に定義されるが、それに対応する値は
| フィールド名 | 値の型 | 意味 |
|---|---|---|
| [[ExportNames]] | String の |
このモジュールのエクスポート名。このリストには重複は含まれない。 |
| [[EvaluationSteps]] | 抽象クロージャ | モジュール評価時に実行される初期化ロジックであり、唯一の引数として |
The
The
The
以下は、
The
The
The
The
The
The
The
HostLoadImportedModule の実装は、以下の要件に従わなければならない:
この操作が、次の条件を満たす 2 つの (referrer, moduleRequest) の組に対して複数回呼び出される場合:
そして
moduleRequest.[[Attributes]] において、entry.[[Key]] が
実際に行われる処理はホスト定義であるが、通常は適切な
上記のテキストは、type: "json" でインポートされた場合にホストが JSON モジュールをサポートすること(かつ HostLoadImportedModule が正常完了すること)を要求しているが、type: "json" を指定せずにインポートされた場合に JSON モジュールをサポートすることを禁止するものではない。
The
The
The
HostGetSupportedImportAttributes の実装は、以下の要件に従わなければならない:
HostGetSupportedImportAttributes のデフォルト実装は、新しい空の
The
GetModuleNamespace は決して例外を投げない。その代わり、この時点では解決不能な名前は単に名前空間から除外される。それらは、どこからも明示的に要求されていない曖昧なスターエクスポートのみでない限り、後に実際のリンクエラーを引き起こす。
The
The
The
上記の規則は、
The
ExportedBindings は、
It is defined piecewise over the following productions:
The
ExportedNames は、
It is defined piecewise over the following productions:
The
The
The