?
u
m
/
p
1-9
0
`
super
を含むソーステキストが直接 eval によって処理される eval コードでない限り、super
を含む場合は構文エラーである。直接 eval 内での super
に関する追加のThe syntax-directed operation UNKNOWN takes UNPARSEABLE ARGUMENTS. It is defined piecewise over the following productions:
Script Record は、評価されるスクリプトに関する情報をカプセル化する。各
フィールド名 | 値の型 | 意味 |
---|---|---|
[[Realm]] |
|
このスクリプトが作成されたレルム。 |
[[ECMAScriptCode]] |
|
このスクリプトのソーステキストを解析した結果。 |
[[LoadedModules]] |
|
このスクリプトによってインポートされた指定子文字列から解決された |
[[HostDefined]] |
任意(デフォルト値は |
スクリプトに追加情報を関連付ける必要がある |
The abstract operation ParseScript takes arguments sourceText (
実装は、そのスクリプトソーステキストに対する ParseScript の評価より前に、スクリプトソーステキストを解析し早期エラー条件を分析してもよい。ただし、エラーの報告は、この仕様が実際にそのソーステキストに対して ParseScript を実行する時点まで延期されなければならない。
The abstract operation ScriptEvaluation takes argument scriptRecord (
The abstract operation GlobalDeclarationInstantiation takes arguments script (
スクリプトを評価するために実行コンテキストが確立されるとき、宣言は現在のグローバル環境でインスタンス化される。コードで宣言された各グローバル束縛がインスタンス化される。
呼び出されたとき、次の手順を実行する:
var
および function
束縛(非 strict 直接 eval によって導入されるものを除く)は非設定可能であり、したがって制限されたグローバルプロパティである。明示的な var または function 宣言とは異なり、
super
を含む場合、構文エラーである。
重複する ExportedNames ルールは、export default
The abstract operation UNKNOWN takes UNPARSEABLE ARGUMENTS. importEntries によって定義されるすべてのローカル名束縛のリストを作成する。 It performs the following steps when called:
ModuleRequest Record は、指定されたインポート属性でモジュールをインポートするリクエストを表す。次のフィールドで構成される:
フィールド名 | 値の型 | 意味 |
---|---|---|
[[Specifier]] | 文字列 | モジュール指定子 |
[[Attributes]] |
|
インポート属性 |
LoadedModuleRequest Record は、モジュールをインポートするリクエストと結果として得られる
フィールド名 | 値の型 | 意味 |
---|---|---|
[[Specifier]] | 文字列 | モジュール指定子 |
[[Attributes]] |
|
インポート属性 |
[[Module]] |
|
このモジュールリクエストに対応するロードされたモジュール |
ImportAttribute Record は次のフィールドで構成される:
フィールド名 | 値の型 | 意味 |
---|---|---|
[[Key]] | 文字列 | 属性キー |
[[Value]] | 文字列 | 属性値 |
The abstract operation ModuleRequestsEqual takes arguments left (
The syntax-directed operation UNKNOWN takes UNPARSEABLE ARGUMENTS. It is defined piecewise over the following productions:
Module Record は、単一のモジュールのインポートとエクスポートの構造情報をカプセル化する。この情報は、接続されたモジュール群のインポートとエクスポートをリンクするために使用される。Module Record には、モジュールを評価するときにのみ使用される4つのフィールドが含まれている。
仕様の目的上、Module Record 値は
Module Record は
フィールド名 | 値の型 | 意味 |
---|---|---|
[[Realm]] |
|
このモジュールが作成されたレルム。 |
[[Environment]] |
|
このモジュールのトップレベル束縛を含む |
[[Namespace]] |
Object または |
このモジュールに対して作成されている場合の Module Namespace Object( |
[[HostDefined]] |
任意(デフォルト値は |
モジュールに追加情報を関連付ける必要がある |
メソッド | 目的 |
---|---|
LoadRequestedModules([hostDefined]) |
すべての依存関係を再帰的にロードしてモジュールをリンキング用に準備し、プロミスを返す。 |
GetExportedNames([exportStarSet]) |
このモジュールから直接または間接的にエクスポートされるすべての名前のリストを返す。 このメソッドを呼び出す前に LoadRequestedModules が正常に完了している必要がある。 |
ResolveExport(exportName [, resolveSet]) |
このモジュールによってエクスポートされる名前の束縛を返す。束縛は { [[Module]]: この操作が特定の exportName, resolveSet ペアを引数として呼び出されるたびに、同じ結果を返さなければならない。 このメソッドを呼び出す前に LoadRequestedModules が正常に完了している必要がある。 |
Link() |
すべてのモジュール依存関係を遷移的に解決し、 このメソッドを呼び出す前に LoadRequestedModules が正常に完了している必要がある。 |
Evaluate() |
このモジュールとその依存関係の評価のプロミスを返す。評価が成功した場合または既に正常に評価されている場合は解決し、評価エラーまたは既に評価に失敗している場合は拒否する。プロミスが拒否された場合、 このメソッドを呼び出す前に Link が正常に完了している必要がある。 |
The abstract operation EvaluateModuleSync takes argument module (
Cyclic Module Record は、
フィールド名 | 値の型 | 意味 |
---|---|---|
[[Status]] |
|
初期値は |
[[EvaluationError]] |
|
評価中に発生した例外を表す |
[[DFSAncestorIndex]] |
|
Link と Evaluate 中のみ使用される補助フィールド。[[Status]] が |
[[RequestedModules]] |
|
そのモジュール内の import に対応する |
[[LoadedModules]] |
|
このレコードが表すモジュールが使用した指定子文字列と解決済み |
[[CycleRoot]] |
|
サイクル内で最初に訪れたモジュール(強連結成分の DFS ルート)。サイクル外ならモジュール自身。Evaluate 完了後、モジュールの [[DFSAncestorIndex]] はその [[CycleRoot]] の深さ優先インデックスとなる。 |
[[HasTLA]] | Boolean |
このモジュール自体が個別に非同期かどうか(例: top-level await を含む |
[[AsyncEvaluationOrder]] |
|
初期値 |
[[TopLevelCapability]] |
|
あるサイクルの [[CycleRoot]] で、かつそのサイクル内のモジュールに Evaluate() が呼ばれた場合、その全評価の |
[[AsyncParentModules]] |
|
このモジュールまたは依存に [[HasTLA]] |
[[PendingAsyncDependencies]] |
|
非同期依存がある場合、残り非同期依存モジュールの数。これが 0 になり実行エラーがなければモジュールは実行される。 |
メソッド | 目的 |
---|---|
InitializeEnvironment() |
すべてのインポート束縛解決を含めモジュールの |
ExecuteModule([promiseCapability]) |
モジュールのコードをその実行コンテキスト内で評価。[[HasTLA]] が |
GraphLoadingState Record はモジュールグラフの読み込み過程に関する情報を保持し、
フィールド名 | 値の型 | 意味 |
---|---|---|
[[PromiseCapability]] |
|
読み込み処理完了時に解決する Promise。 |
[[IsLoading]] | Boolean |
成功またはエラーでまだ終了していなければ |
[[PendingModulesCount]] |
非負 |
保留中の |
[[Visited]] |
|
現在の読み込み過程ですでにロードされた |
[[HostDefined]] |
任意(初期値 |
LoadRequestedModules 呼び出し元から |
以下は
The LoadRequestedModules concrete method of
<link rel="preload" as="...">
の適切な fetch destination 設定に使う。import()
式は hostDefined を設定しない。
The abstract operation InnerModuleLoading takes arguments state (
The abstract operation ContinueModuleLoading takes arguments state (
The Link concrete method of
The abstract operation InnerModuleLinking takes arguments module (
The Evaluate concrete method of
The abstract operation InnerModuleEvaluation takes arguments module (
モジュールは InnerModuleEvaluation に走査されている間
非同期サイクルに属するモジュールに依存するモジュールは、サイクルが
The abstract operation ExecuteAsyncModule takes argument module (
The abstract operation GatherAvailableAncestors takes arguments module (
非同期実行が root module で充足された際、この関数は同期的に一括実行可能なモジュール集合を決定し execList を構築する。
The abstract operation AsyncModuleExecutionFulfilled takes argument module (
The abstract operation AsyncModuleExecutionRejected takes arguments module (
この非規範節では、よくあるモジュールグラフのリンクおよび評価例と、エラー発生の様態に焦点を当てた事例を示す。
まず次の単純なモジュールグラフを考える:
先にエラー条件が無いと仮定する。
次にリンクエラーを含むケースを考える(A.LoadRequestedModules() が成功後)。もし C の
最後に、Link() 成功後の評価エラーを含むケース。C の
次に別種のエラー条件を考える:
このシナリオではモジュール A が他モジュールへの依存を宣言するが、その
読み込み・リンク・評価エラーの差異は以下の特徴による:
次にサイクルを持つモジュールグラフ:
エントリポイントを A と仮定し、
続いて A.Link() により A の
成功ケースでは評価段階も同様の物語。
次に A がリンクエラー(例: C に存在しない束縛 import)を持つケース。上述のステップは(二度目の
別に A が評価エラー(ソースが例外 throw)ケース。評価版のステップが進み、二度目の
最後に、全モジュールが非同期に完了するサイクル付きグラフ:
読み込みとリンクは同様で全て [[Status]]
A.Evaluate() は A, B, D に
Field
|
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 が終了すると仮定。終了で
Field
|
C | E |
---|---|---|
[[DFSAncestorIndex]] | 0 | 4 |
[[Status]] | ||
[[AsyncEvaluationOrder]] | 3 | |
[[AsyncParentModules]] | « A » | « C » |
[[PendingAsyncDependencies]] | 1 (D) | 0 |
次に D が終了(唯一の実行中だった)。
Field
|
B | C | D |
---|---|---|---|
[[DFSAncestorIndex]] | 0 | 0 | 0 |
[[Status]] | |||
[[AsyncEvaluationOrder]] | 1 | 3 | |
[[AsyncParentModules]] | « A » | « A » | « B, C » |
[[PendingAsyncDependencies]] | 0 | 0 | 0 |
次に C が終了。
Field
|
A | C |
---|---|---|
[[DFSAncestorIndex]] | 0 | 0 |
[[Status]] | ||
[[AsyncEvaluationOrder]] | 4 | |
[[AsyncParentModules]] | « » | « A » |
[[PendingAsyncDependencies]] | 1 (B) | 0 |
次いで B が終了。
Field
|
A | B |
---|---|---|
[[DFSAncestorIndex]] | 0 | 0 |
[[Status]] | ||
[[AsyncEvaluationOrder]] | 4 | |
[[AsyncParentModules]] | « » | « A » |
[[PendingAsyncDependencies]] | 0 | 0 |
最後に A が終了し
Field
|
A |
---|---|
[[DFSAncestorIndex]] | 0 |
[[Status]] | |
[[AsyncEvaluationOrder]] | |
[[AsyncParentModules]] | « » |
[[PendingAsyncDependencies]] | 0 |
別の失敗例として B 完了前に C がエラーで失敗。
Field
|
A | C |
---|---|---|
[[DFSAncestorIndex]] | 0 | 0 |
[[Status]] | ||
[[AsyncEvaluationOrder]] | ||
[[AsyncParentModules]] | « » | « A » |
[[PendingAsyncDependencies]] | 1 (B) | 0 |
[[EvaluationError]] | C の評価エラー |
C が A に対しそのエラーで
Field
|
A |
---|---|
[[DFSAncestorIndex]] | 0 |
[[Status]] | |
[[AsyncEvaluationOrder]] | |
[[AsyncParentModules]] | « » |
[[PendingAsyncDependencies]] | 0 |
[[EvaluationError]] | C の Evaluation Error |
その後 B がエラーなく完了。
Field
|
A | B |
---|---|---|
[[DFSAncestorIndex]] | 0 | 0 |
[[Status]] | ||
[[AsyncEvaluationOrder]] | 4 | 1 |
[[AsyncParentModules]] | « » | « A » |
[[PendingAsyncDependencies]] | 0 | 0 |
[[EvaluationError]] | C の Evaluation Error |
Source Text Module Record は、
フィールド名 | 値の型 | 意味 |
---|---|---|
[[ECMAScriptCode]] | Parse Node |
|
[[Context]] |
ECMAScript 実行コンテキストまたは |
このモジュールに関連付けられる実行コンテキスト。環境初期化まで |
[[ImportMeta]] |
Object または |
import.meta メタプロパティを通じて公開されるオブジェクト。アクセスされるまで |
[[ImportEntries]] |
|
モジュールコードから導出された ImportEntry レコードのリスト。 |
[[LocalExportEntries]] |
|
モジュール内部宣言に対応する ExportEntry のリスト。 |
[[IndirectExportEntries]] |
|
モジュール内の再エクスポート import または export * as namespace 宣言に対応する ExportEntry のリスト。
|
[[StarExportEntries]] |
|
export * 宣言(export * as namespace を除く)に対応する ExportEntry のリスト。
|
ImportEntry Record は単一の宣言的 import を要約する
フィールド名 | 値の型 | 意味 |
---|---|---|
[[ModuleRequest]] |
|
|
[[ImportName]] |
文字列または |
[[ModuleRequest]] が指すモジュールで束縛がエクスポートされる名前。 |
[[LocalName]] | 文字列 | インポート値へローカルアクセスするための名前。 |
Import 文形式 | [[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 Record は単一の宣言的 export を要約する
フィールド名 | 値の型 | 意味 |
---|---|---|
[[ExportName]] |
文字列または |
このモジュールがこの束縛をエクスポートする際の名前。 |
[[ModuleRequest]] |
|
|
[[ImportName]] |
文字列, |
[[ModuleRequest]] が指すモジュールがこの束縛をエクスポートする名前。export * as ns from "mod" 、export * from "mod" に使用。
|
[[LocalName]] |
文字列または |
モジュール内部からエクスポート値へアクセスするためのローカル名。内部で直接アクセスできない場合 |
Export 文形式 | [[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 abstract operation ParseModule takes arguments sourceText (
await
とする。実装は ParseModule 評価前にモジュールソースをパースし早期エラー解析を行ってもよいが、エラー報告は仕様が実際に ParseModule を行う時点まで遅延しなければならない。
以下は
The GetExportedNames concrete method of
export *
循環の開始点に到達。GetExportedNames は曖昧な star export の名前を除去も例外化もしない。
The ResolveExport concrete method of
ResolveExport は要求されたエクスポート名を最終的な定義モジュールとローカル束縛名へ解決する。定義モジュールは自身または import 先モジュール。resolveSet は循環 import/export 経路検出に使われ、既に同一 (module, exportName) ペアが存在すれば循環で
定義が見つかれば
It performs the following steps when called:
default
export 非定義。export * from "mod"
で default
は供給されない。The InitializeEnvironment concrete method of
The ExecuteModule concrete method of
Synthetic Module Record は仕様によって定義されるモジュール情報を表す。エクスポート名は作成時に静的定義され、対応値は
フィールド名 | 値の型 | 意味 |
---|---|---|
[[ExportNames]] | 文字列のリスト | モジュールのエクスポート名(重複なし)。 |
[[EvaluationSteps]] | 評価時に実行する初期化ロジック。 |
The abstract operation CreateDefaultExportSyntheticModule takes argument defaultExport (ECMAScript 言語値) and returns
The abstract operation ParseJSONModule takes argument source (文字列) and returns
The abstract operation SetSyntheticModuleExport takes arguments module (
以下は
The LoadRequestedModules concrete method of
The GetExportedNames concrete method of
The ResolveExport concrete method of
The Link concrete method of
The Evaluate concrete method of
The abstract operation GetImportedModule takes arguments referrer (
The host-defined abstract operation HostLoadImportedModule takes arguments referrer (
referrer が
<button type="button" onclick="import('./foo.mjs')">Click me</button>
をクリックすると、import()
式実行時点でアクティブなスクリプトやモジュールが存在しない。
HostLoadImportedModule の実装は以下要件に従う:
同じ referrer かつ
moduleRequest.[[Attributes]] に [[Key]]
実際の処理は
上記は type: "json"
でインポートされた JSON モジュールをtype: "json"
なしでの JSON モジュールサポートを禁止しない。
The abstract operation FinishLoadingImportedModule takes arguments referrer (
The abstract operation AllImportAttributesSupported takes argument attributes (
The host-defined abstract operation HostGetSupportedImportAttributes takes no arguments and returns 文字列リスト.
HostGetSupportedImportAttributes の実装は次の要件に従わなければならない:
HostGetSupportedImportAttributes のデフォルト実装は、新しい空リストを返すことである。
The abstract operation GetModuleNamespace takes argument module (
GetModuleNamespace は例外を投げない。解決不能な名前はこの時点では単に namespace から除外される。それらがすべてどこからも明示的に要求されない曖昧な star export でない限り、後で実際のリンクエラーにつながる。
The syntax-directed operation UNKNOWN takes UNPARSEABLE ARGUMENTS. It is defined piecewise over the following productions:
The syntax-directed operation UNKNOWN takes UNPARSEABLE ARGUMENTS. It is defined piecewise over the following productions:
The syntax-directed operation UNKNOWN takes UNPARSEABLE ARGUMENTS. It is defined piecewise over the following productions:
上記規則により
The syntax-directed operation UNKNOWN takes UNPARSEABLE ARGUMENTS.
ExportedBindings は
It is defined piecewise over the following productions:
The syntax-directed operation UNKNOWN takes UNPARSEABLE ARGUMENTS.
ExportedNames は
It is defined piecewise over the following productions:
The syntax-directed operation UNKNOWN takes UNPARSEABLE ARGUMENTS. It is defined piecewise over the following productions:
The syntax-directed operation UNKNOWN takes UNPARSEABLE ARGUMENTS. It is defined piecewise over the following productions:
The syntax-directed operation UNKNOWN takes UNPARSEABLE ARGUMENTS. It is defined piecewise over the following productions: