@awayfl/avm2
Version:
Virtual machine for executing AS3 code
41 lines (40 loc) • 1.92 kB
JavaScript
import { emitInlineLocal } from './emitInlineVars';
export function emitAnnotationOld(state) {
var params = state.methodInfo.parameters;
var methodName = state.methodInfo.meta.name;
var js0 = [];
js0.push("".concat(state.indent, "return function compiled_").concat(methodName.replace(/([^a-z0-9]+)/gi, '_'), "() {"));
state.moveIndent(1);
for (var i = 0; i < params.length; i++)
if (params[i].hasOptionalValue()) {
js0.push("".concat(state.indent, "let argnum = arguments.length;"));
break;
}
var thisAlias = emitInlineLocal(state, 0);
if (thisAlias !== 'this') {
// eslint-disable-next-line max-len
js0.push("".concat(state.indent, "let ").concat(emitInlineLocal(state, 0), " = this === context.jsGlobal ? context.savedScope.global.object : this;"));
}
else {
js0.push("".concat(state.indent, "// Possible use a real \"this\""));
}
for (var i = 0; i < params.length; i++) {
var p = params[i];
js0.push("".concat(state.indent, "let ").concat(emitInlineLocal(state, i + 1), " = arguments[").concat(i, "];"));
if (params[i].hasOptionalValue())
switch (p.optionalValueKind) {
case 1 /* CONSTANT.Utf8 */:
// eslint-disable-next-line max-len
js0.push("".concat(state.indent, "if (argnum <= ").concat(i, ") ").concat(emitInlineLocal(state, i + 1), " = context.abc.getString(").concat(p.optionalValueIndex, ");"));
break;
default:
// eslint-disable-next-line max-len
js0.push("".concat(state.indent, "if (argnum <= ").concat(i, ") ").concat(emitInlineLocal(state, i + 1), " = ").concat(p.getOptionalValue(), ";"));
break;
}
}
return {
annotation: js0.join('\n'),
paramsShift: 0
};
}