知っている人には有名な話(自分用メモ)。

ActionScript1.0(Flash Lite 1.1)でif文を書くとき、&&や||をつかうと、非常にいけてないバイトコードに展開される。
例えば A && Bとした場合、「Aが真じゃないとBは評価さえされない」というのを実現したかったんだと思うんだが、もう少しなんとかして欲しい…

ActionScriptバイトコード
if(A) {
ST
}
	push	A
not
if goto X
ST
X: end
if(A && B) {
ST
}
	push	A
push A
not
if goto X
pop
push B
X: not
if goto Y
ST
Y: end
if(A && B && C) {
ST
}
	push	A
push A
not
if goto X
pop
push B
X: push A
push A
not
if goto Y
pop
push B
not
Y: if goto Z
pop
push C
not
if goto W
ST
W: end
if(A||B) {
ST
}
	push	A
push A
if goto X
pop
push B
X: not
if goto Y
ST
Y: end
if(A || B || C) {
ST
}
	push	A
push A
if goto X
pop
push B
X: push A
push A
if goto Y
pop
push B
Y: if goto Z:
pop
push C
Z: not
if goto W:
ST
W: end



ちなみに、上記では条件式を簡単にAと書いているが、もしvar1==var2みたいな文だったら、Aの「すべて」の場所に

	push	"var1"
getVariable
push "var2"
getVariable
equals

なんてコードが展開されてしまう。