スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ActionScript1.0のif文の展開

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

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
なんてコードが展開されてしまう。
スポンサーサイト

コメント

非公開コメント

プロフィール

fchiba

Author:fchiba
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。