Я пытаюсь вызвать компилятор 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
}
Заранее спасибо! Я знаю, что это хардкорный вопрос, но я надеюсь, что какой-нибудь хардкорный кодер сможет пролить свет на это!