16 エラー
実装は、関連するECMAScript言語の構成が評価される場合には、ほぼ全てに渡り、エラーを報告しなければいけません。
初期エラーとは、そのエラーを含んでいるプログラム内にある構成の評価に優先して検出、報告されることが可能なエラーです。
実装は、当該プログラムの最初の評価に優先してプログラム内の初期エラーを報告しなければいけません。
eval コード内の初期エラーは、 eval が呼ばれた時点で報告されますが、それは eval コード内の任意の構成の評価に優先して報告されます。
初期エラーではない全てのエラーは、実行エラーです。
実装は、初期エラーとしての次のエラーの種類のインスタンスを扱わなければいけません。
- 任意の構文エラー
- 同名で割り当てられる複数の get プロパティや同名で割り当てられる複数の set プロパティを持つ ObjectLiteral を定義する試行
- 割り当てられるデータプロパティと同名で割り当てられる複数の get や set プロパティの両方を持つ ObjectLiteral を定義する試行
- 実装定義の構文の拡張ではない正規表現リテラル内のエラー
- 同名で割り当てられる複数のデータプロパティを持つ ObjectLiteral を定義するstrictモードのコード内での試行
- strictモードのコード内での WithStatement (With 文)の出現
- 単独のstrictモードの FunctionDeclaration (関数宣言)や FunctionExpression (関数式)から成る任意の FormalParameterList (関数のパラメータリスト)内で1度以上現れる Identifier (識別子)の値の出現
- return, break, continue の不適切な使用
- (例えば、代入文 3=4 を実行する等)リファレンスではない値を生成されることが可能な初期決定における任意の値上で PutValue を呼ぶ試行
実装は、いかなる状況においてもエラーなく実行できない構成であることを裏付けることが可能なコンパイラであったとしても初期エラーとして他の種類のエラーを扱わないようにしましょう。
実装は、そのようなケースにおいては初期警告を発する場合があるにしても関連する構成が、実際に実行されるまでは、エラーを報告すべきではありません。
実装は、次の場合を除き、既に記述したように全てのエラーを報告しましょう。
- 実装が、プログラム構文、正規表現構文、フラグ構文などを拡張する可能性がある場合
これを許容するということは、( eval の呼び出し、正規表現リテラルの使用、 FunctionコンストラクタやRegExpコンストラクタの使用のような)全ての操作は、プログラム構文、正規表現構文、フラグ構文などへの実装定義の拡張に遭遇する場合、SyntaxErrorを投げる(スローする)代わりに実装定義の動作を表す為に実行されるSyntaxErrorを投げる(スローする)ことが許容されるという事です。
- 実装が、この仕様内で説明したそれらを超える型、値、オブジェクト、プロパティ、関数を提供する場合
これは、( ReferenceError のような)エラーを投げる(スローする)代わりに実装定義の動作を持つように(グローバルスコープ内で変数を探すような)構成の要因となる場合があります。
- 実装が、 fractionDigits (小数の桁)引数や precision (精度)引数が、指定した範囲を超える際に toFixed, toExponential, toPrecision の為にRangeErrorを投げる(スローする)のではなく、動作を定義する場合