ecma262reading.doorkeeper.jp
第14条 プログラム
Program :
SourceElementsopt
SourceElements :
SourceElement
SourceElements SourceElement
SourceElement :
Statement
FunctionDeclaration
1.このProgramのコードは、指定プロローグ (14.1 指定プロローグ)が、 Use Strict 指定を含む当該SourceElementsから成る場合や一部が、 10.1.1を適用した条件から成る場合、strict mode(厳格モード)のコード Programのコードが、strict mode(厳格モード)のコードである場合、SourceElementsは、strict mode(厳格モード)のコードのように次のステップ内で評価され、それ以外は、SourceElementsは、非strict mode(厳格モード)のコードのように次のステップ内で評価される
2. SourceElementsが、存在しない場合には、return (normal, empty, empty)
3. progCxt は、 10.4.1で説明したようにグローバルコードにおける新たな実行コンテキストとする
4. result は、SourceElementsを評価した結果とする
5.実行コンテキスト progCxt を抜ける
6. resultを返す
optionalなのでプログラムは書かれていなくてもいい
gist.github.com
SourceElements : SourceElements SourceElement
- headResult は、SourceElementsを評価した結果とする
- headResult が、中途完了(an abrupt completion)である場合、 headResultを返す
- tailResult は、SourceElementを評価した結果とする
- tailResult.value が、 emptyである場合、 V = headResult.value とし、それ以外の場合、 V = tailResult.valueとする
- return (tailResult.type, V, tailResult.target)
SE1;SE2;SE3;SE4;
----------- ---
head tail
------- ---
head tail
--- ---
head tail
いろいろ書かれていはいるが、ソースコードを上から読んでいって、評価結果を言語処理系に渡している。
(仕様書に書かれてはいないが)上記のような再帰で
SourceElement : Statement
SourceElement : FunctionDeclaration
- return (normal, empty, empty)
- 関数定義しただけだったら、emptyを言語処理系に渡す
- 宣言しただけだったらプログラムに何の影響も与えない
- 関数を呼び出して初めて関数宣言が意味をなす
- ただし関数リテラルの形で書かれていたら、代入自体がstatementになるので、そのまま評価される
- 関数が宣言されていても呼ばれなければ存在しないのと一緒(ので、minifyツールなどで呼ばれていない関数を消すことは出来る)
function a() {
var a = 1;
}
呼び出したらエラーになるような関数を定義していても呼び出さなければエラーにならない(実行可能かどうかは呼び出さなければわからない)
gist.github.com
でも、構文として形式的に正しいかどうかは見ている。形式がおかしかったらエラーになる。
ただし、構文パースで問題ないことと、実行時にエラーになることはまた話が違うが、構文エラーにもならず実行時にもエラーにならないものはインタプリタはエラーは吐かない(consoleに警告を出すことはあるかもしれない)
gist.github.com
これもおーけー。ただし、AltJSによってはコンパイル不可能な可能性はある。
gist.github.com
www.webzoit.net
14.1 Directive Prologue と Use Strict Directive
Program (プログラム)や FunctionBody (関数本体)の最初の SourceElement (ソース要素)プロダクション、また、セミコロンに続けて StringLiteral (文字列リテラル・文字そのままの)トークン (字句)全体を構成する並びにある各 ExpressionStatement (式文・式の文)として現れる ExpressionStatement プロダクションの最も長い並び
use strictについてのはなし。
blog.niw.at
24-202513.js · GitHubgist.github.com
www.webzoit.net
次回以降
6と5.1の15条を比較しながら