How do I call the Tamarin ESC Compiler from AS3 Co

2019-04-12 07:44发布

I'm trying to call Tamarin's ESC Compiler from AS3 code. I've got the ESC Compiler byte code loaded in Flash Player, but when I call it, the ESC Compiler always returns the same do nothing byte code, no matter what source code I feed it. The human readable ESC code looks like this:

function compileStringToBytes(input, context="(string)", start_line=1) {
    let [_,_,res] = compile( (function () input),
                             (function (abc) abc.getBytes()),
                             context,
                             start_line );
    return res;
}

I'm calling it using the following AS3 code:

var compile:Function = getDefinitionByName("ESC::compileStringToBytes") as Function;
var array:ByteArray = compile( function():String { return "trace(\"hi\");" },
                "test" );

But no matter what source code I feed it, it always returns byte code of two functions, one that calls the other, with neither function doing anything.

This is the byte code it returns (metadata stripped out, converted to human readable):

script0
const <#internal test>::internal:Namespace = <#internal test>   /* slot_id 0 */
const <#internal test>::public:Namespace =  /* slot_id 0 */
var Function:*  /* slot_id 0 */

function script0$init():*   /* disp_id 0*/
{
  // local_count=2 max_scope=1 max_stack=2 code_len=11
  0         getlocal0       
  1         pushscope       
  2         findpropstrict  Function
  4         newfunction     function ():*   /* disp_id 0*/
  6         setproperty     Function
  8         getlocal1       
  9         returnvalue     
  10        returnvoid      
}


function ():*   /* disp_id 0*/
{
  // local_count=1 max_scope=0 max_stack=0 code_len=1
  0         returnvoid      
}

Thanks in advance! I know this is hardcore question but I hope some hardcore coder can shed some light on it!

1条回答
仙女界的扛把子
2楼-- · 2019-04-12 08:17

Found an answer to my own question.

The following site uses the newest Tamarin ESC Compiler ABC bits to dynamically run code through Flash (the panel on the left shows the source code which runs the compiler):

http://wonderfl.net/c/2pBs/read

It actually grabs the Tamarin Redux bits using the Mercurial http interface downloader: http://hg.mozilla.org/tamarin-redux/raw-file/db3ebe261f68/esc/bin/

The wonderfl code in turns uses Claus Wahlers' codeazur as3swf to wrap the ABC bits to load into Flash (both the compiler itself and the compiled bits):

https://github.com/claus/as3swf

Thank you Claus and wonderfl! Open sourced code rocks.

查看更多
登录 后发表回答