In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

flash on 2012-2-12

Get Adobe Flash player
by 12346 12 Feb 2012

    Talk

    12346 at 13 Feb 2012 06:23
    このコードはWonderfl以外の環境でリリースビルドしないと動作確認できません。残念・・・ Wonderflでリリースビルドする方法をゆるーく募集中 あるいはtrace以外でスタックアンダーフローできる方法募集

    Tags

    Embed
/**
 * Copyright 12346 ( http://wonderfl.net/user/12346 )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/kNtG
 */

package{import flash.display.Sprite;
public class stackOpe extends Sprite{
    //wonderflだとリリースビルドできない・・・?
    //FlashDevelopでリリースビルドすると実行できたんだけどなー
    
    //バーチャルマシンのスタックにごみを残す方法とスタックからほじくる方法がわかったので覚え書き。
    //リリースビルドではtrace()が削除されることを利用して、
    //f(x,y,z)のように表記されてるからシンタックスエラーは出ないけど
    //f(,,)でコンパイルされるようようなコードを書く
    //
    //基本操作
    //    スタックに積む : あらかじめ実行したい関数funcとその引数arg1...argN-1までをスタックに積んでおく
    //        func[this,arg1,arg2,arg3, … ,argN-1,X,"Y"];//X["Y"]がエラーにならないように。
    //
    //    スタックから出す : 実行したくなったらargNを確定させて呼び出し argNはダミーでも良い
    //        argN(trace(),trace(), … ,trace());//積んであるfuncの引数として取り出す。traceの数はN+1
    //
    //    受け取る関数func : argNの指定方法によっては最後の引数が変化するのでとりあえずなんでも受け取れるように
    //        func(arg1,arg2, … ,argN,something){}
    //        func(arg1,arg2, … ,argN,...a){}
    
    //個人メモ
    //<call arg_count=N>:stack(    …, function, receiver, arg1, arg2, ..., argN )=>( …, value )

    public function stackOpe(){
        addChild(T);T.width=T.height=465;
        
        print("2変数の場合");
        func[this,0,this,"dummy"];//stack(f this 1)
        1(trace(),trace(),trace());//stack(f this 1 0 this _ _ _)
        
        print("スタックに積んだ順に新しいほうから実行");
        func[this,1,2,3,this,"dummy"];
        func[this,4,5,6,this,"dummy"];
        func[this,7,8,9,this,"dummy"];
        0(trace(),trace(),trace(),trace(),trace());
        0(trace(),trace(),trace(),trace(),trace());
        0(trace(),trace(),trace(),trace(),trace());
        
    }
    public var dummy:int=0;
}}
import flash.text.TextField;
var T:TextField=new TextField;
function print(...a):void{T.appendText(a+"\n");}
function func(...a):void{print(a)}