17 Error Handling and Language Extensions

実装は、関連するECMAScript言語構成が評価される時点でほとんどのエラーを報告しなければならない。An early error は、そのエラーを含む Script 内のいかなる構成要素の評価より前に検出および報告できるエラーである。早期エラーの存在はその構成要素の評価を妨げる。実装は ParseScript において当該 Script を解析する際に Script 内の早期エラーを報告しなければならない。Module 内の早期エラーは Module が評価される時点で報告され、Module は決して初期化されない。eval コード内の早期エラーは eval が呼び出された時に報告され、eval コードの評価を防ぐ。早期エラーでないすべてのエラーはランタイムエラーである。

実装は、本仕様の「Static Semantics: Early Errors」小節に列挙されている条件が発生した場合、それを早期エラーとして報告しなければならない。

コンパイラがある構成がいかなる状況でもエラーなく実行できないと証明できる場合であっても、実装は他の種類のエラーを早期エラーとして扱ってはならない。そのような場合に実装は早期警告を発することができるが、該当する構成が実際に実行されるまでエラーを報告すべきではない。

実装は以下を除き、指定されたとおりにすべてのエラーを報告しなければならない:

17.1 Forbidden Extensions

実装は次の方法で本仕様を拡張してはならない:

  • 厳格モードのコードで構文上のコンストラクタを使って定義された ECMAScript 関数オブジェクトは、"caller" または "arguments" という名前の own プロパティを持って作成してはならない。そのような own プロパティは、ArrowFunctionMethodDefinitionGeneratorDeclarationGeneratorExpressionAsyncGeneratorDeclarationAsyncGeneratorExpressionClassDeclarationClassExpressionAsyncFunctionDeclarationAsyncFunctionExpression、または AsyncArrowFunction を使用して定義された関数オブジェクトについても、定義が厳格モードコード内に含まれているかどうかにかかわらず作成してはならない。組み込み関数、Function コンストラクタを使用して作成された厳格関数、Generator コンストラクタを使用して作成されたジェネレータ関数、AsyncFunction コンストラクタを使用して作成された async 関数、および bind メソッドを使用して作成された関数も同様にそのような own プロパティを持って作成してはならない。
  • 実装が own プロパティ名を "caller" として任意の関数オブジェクトを拡張する場合、そのプロパティの値は [[Get]] または [[GetOwnProperty]] を使用して観察したときに厳格関数オブジェクトであってはならない。もしそれがアクセサプロパティであるなら、そのプロパティの [[Get]] 属性の値である関数は、呼び出されたときに決して厳格関数を返してはならない。
  • マップされた引数オブジェクトでもマップされていない引数オブジェクトでも、"caller" という own プロパティを持って作成してはならない。
  • ECMA-402 に記載されているような組み込みメソッド(例えば toLocaleString と名付けられたもの)の振る舞いは、ECMA-402 で指定されている場合を除き拡張してはならない。
  • 22.2.1 および B.1.2 の RegExp パターン文法は、[UnicodeMode] 文法パラメータが存在する場合にソース文字 A-Z または a-z のいずれかを IdentityEscape[+UnicodeMode] として認識するように拡張してはならない。
  • 構文文法は、BindingIdentifier 非終端記号にマッチするソーステキストに直ちにトークン : が続くことを許すような形で拡張してはならない。
  • 厳格モードコードを処理する際、実装は 12.9.3.1 の早期エラー規則を緩和してはならない。
  • TemplateEscapeSequence12.9.4 で定義される LegacyOctalEscapeSequence または NonOctalDecimalEscapeSequence を含むように拡張してはならない。
  • 厳格モードコードを処理する際、B.3.1B.3.2B.3.3、および B.3.5 で定義された拡張はサポートしてはならない。
  • Module 目標記号の解析時には、B.1.1 で定義された字句文法の拡張をサポートしてはならない。
  • ImportCall は拡張してはならない。