Как мне вызвать Tamarin ESC Compiler из AS3 Code? - PullRequest
3 голосов
/ 01 мая 2011

Я пытаюсь вызвать компилятор ESC Тамарина из кода AS3. У меня есть байт-код ESC-компилятора, загруженный во Flash Player, но когда я его вызываю, ESC-компилятор всегда возвращает один и тот же байт-код «ничего не делать», независимо от того, какой исходный код я ему предоставляю. Читаемый человеком код ESC выглядит так:

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

Я звоню, используя следующий код AS3:

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

Но независимо от того, какой исходный код я передаю, он всегда возвращает байт-код двух функций, одна из которых вызывает другую, и ни одна из функций ничего не делает.

Это байт-код, который он возвращает (метаданные удаляются, преобразуются в удобочитаемые человеком):

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      
}

Заранее спасибо! Я знаю, что это хардкорный вопрос, но я надеюсь, что какой-нибудь хардкорный кодер сможет пролить свет на это!

1 Ответ

4 голосов
/ 15 июня 2011

Нашел ответ на мой собственный вопрос.

На следующем сайте используются новейшие ABC-биты Tamarin ESC Compiler для динамического запуска кода через Flash (на панели слева показан исходный код, который запускает компилятор):

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

Он на самом деле захватывает биты Tamarin Redux с помощью загрузчика интерфейса Mercurial http: http://hg.mozilla.org/tamarin-redux/raw-file/db3ebe261f68/esc/bin/

Код Wonderfl в свою очередь использует codeazur as3swf Клауса Уолераобернуть биты ABC для загрузки во Flash (как сам компилятор, так и скомпилированные биты):

https://github.com/claus/as3swf

Спасибо, Клаус и wonderfl!Открытые исходные коды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...