package { import flash.display.*; import flash.text.*; import e33.*; public class E3Test extends Sprite { private static var theInstance:E3Test; private var mTxOut:TextField; function E3Test() { mTxOut = new TextField(); addChild(mTxOut); mTxOut.width = 640; mTxOut.height = 480; mTxOut.textColor = 0xffffff; if (!theInstance) theInstance = this; var src:Array = [ "function putline(){ var a=[]; for(var i = 0;i < 50;i++) a.push('-'); trace(a.join('')); }", "function fibo(n, a){", " trace('called fibo('+n+', ['+a.join(',')+'])');", " if (n == 0) {a.push(0); return;}", " else if (n == 1) {fibo(n-1, a); a.push(1); return;}", " fibo(n-1, a);", " a.push(a[a.length-1] + a[a.length-2]);", "}", "function do_test(n){", " putline();", " var fibo_nums = [];", " fibo(n, fibo_nums);", " putline(); trace('result: '+fibo_nums.join(' '));", " return 'OK';", "}" ] puts( src.join("\n") ); var lx:Scanner = new Scanner(src.join("\n")); var psr:Parser = new Parser(lx); var bc:Array = psr.parse(); var vm:VirtualMachine = new VirtualMachine(); vm.setByteCode(bc); vm.getGlobalObject().trace = puts; vm.execute(); var rval:Object = vm.invokeScriptFunction("do_test", [10]); puts("retval: " + rval); } public static function puts(s:*):void { if (s == null) theInstance.mTxOut.appendText("(null)\n"); else theInstance.mTxOut.appendText(s+"\n"); } } }