@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
72 lines (70 loc) • 9.72 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const ts_utils_1 = require("@neo-one/ts-utils");
const BuiltinInstanceMemberCall_1 = require("../BuiltinInstanceMemberCall");
class ArrayConcat extends BuiltinInstanceMemberCall_1.BuiltinInstanceMemberCall {
canCall() {
return true;
}
emitCall(sb, func, node, optionsIn, visited) {
const options = sb.pushValueOptions(optionsIn);
if (!visited) {
sb.visit(ts_utils_1.tsUtils.expression.getExpression(func), options);
}
const handleArray = (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapArray);
};
const handleOther = () => {
sb.emitPushInt(node, 0);
sb.emitOp(node, 'NEWARRAY');
sb.emitOp(node, 'TUCK');
sb.emitOp(node, 'SWAP');
sb.emitOp(node, 'APPEND');
};
sb.emitHelper(node, options, sb.helpers.unwrapArray);
sb.emitHelper(node, options, sb.helpers.cloneArray);
ts_utils_1.tsUtils.argumented.getArguments(node).forEach((arg) => {
sb.visit(arg, options);
sb.emitHelper(node, options, sb.helpers.forBuiltinType({
type: sb.context.analysis.getType(arg),
array: handleArray,
arrayStorage: handleOther,
boolean: handleOther,
buffer: handleOther,
null: handleOther,
number: handleOther,
object: handleOther,
string: handleOther,
symbol: handleOther,
undefined: handleOther,
map: handleOther,
mapStorage: handleOther,
set: handleOther,
setStorage: handleOther,
error: handleOther,
forwardValue: handleOther,
iteratorResult: handleOther,
iterable: handleOther,
iterableIterator: handleOther,
transaction: handleOther,
output: handleOther,
attribute: handleOther,
input: handleOther,
account: handleOther,
asset: handleOther,
contract: handleOther,
header: handleOther,
block: handleOther,
}));
sb.emitHelper(node, options, sb.helpers.arrConcat);
});
if (optionsIn.pushValue) {
sb.emitHelper(node, options, sb.helpers.wrapArray);
}
else {
sb.emitOp(node, 'DROP');
}
}
}
exports.ArrayConcat = ArrayConcat;
//# sourceMappingURL=data:application/json;charset=utf8;base64,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RSxXQUFXO2dCQUNwQixLQUFLLEVBQUUsV0FBVztnQkFDbEIsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLE1BQU0sRUFBRSxXQUFXO2dCQUNuQixLQUFLLEVBQUUsV0FBVzthQUNuQixDQUFDLENBQ0gsQ0FBQztZQUVGLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFO1lBRXZCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3BEO2FBQU07WUFDTCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN6QjtJQUNILENBQUM7Q0FDRjtBQXpGRCxrQ0F5RkMiLCJmaWxlIjoibmVvLW9uZS1zbWFydC1jb250cmFjdC1jb21waWxlci9zcmMvY29tcGlsZS9idWlsdGlucy9hcnJheS9jb25jYXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0c1V0aWxzIH0gZnJvbSAnQG5lby1vbmUvdHMtdXRpbHMnO1xuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgU2NyaXB0QnVpbGRlciB9IGZyb20gJy4uLy4uL3NiJztcbmltcG9ydCB7IFZpc2l0T3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEJ1aWx0aW5JbnN0YW5jZU1lbWJlckNhbGwgfSBmcm9tICcuLi9CdWlsdGluSW5zdGFuY2VNZW1iZXJDYWxsJztcbmltcG9ydCB7IENhbGxNZW1iZXJMaWtlRXhwcmVzc2lvbiB9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIGV4cG9ydC1uYW1lXG5leHBvcnQgY2xhc3MgQXJyYXlDb25jYXQgZXh0ZW5kcyBCdWlsdGluSW5zdGFuY2VNZW1iZXJDYWxsIHtcbiAgcHVibGljIGNhbkNhbGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgZW1pdENhbGwoXG4gICAgc2I6IFNjcmlwdEJ1aWxkZXIsXG4gICAgZnVuYzogQ2FsbE1lbWJlckxpa2VFeHByZXNzaW9uLFxuICAgIG5vZGU6IHRzLkNhbGxFeHByZXNzaW9uLFxuICAgIG9wdGlvbnNJbjogVmlzaXRPcHRpb25zLFxuICAgIHZpc2l0ZWQ6IGJvb2xlYW4sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBzYi5wdXNoVmFsdWVPcHRpb25zKG9wdGlvbnNJbik7XG4gICAgaWYgKCF2aXNpdGVkKSB7XG4gICAgICAvLyBbYXJyYXlWYWxdXG4gICAgICBzYi52aXNpdCh0c1V0aWxzLmV4cHJlc3Npb24uZ2V0RXhwcmVzc2lvbihmdW5jKSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlQXJyYXkgPSAoaW5uZXJPcHRpb25zOiBWaXNpdE9wdGlvbnMpID0+IHtcbiAgICAgIC8vIFthcnJdXG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy51bndyYXBBcnJheSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZU90aGVyID0gKCkgPT4ge1xuICAgICAgLy8gW251bWJlciwgdmFsXVxuICAgICAgc2IuZW1pdFB1c2hJbnQobm9kZSwgMCk7XG4gICAgICAvLyBbYXJyLCB2YWxdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ05FV0FSUkFZJyk7XG4gICAgICAvLyBbYXJyLCB2YWwsIGFycl1cbiAgICAgIHNiLmVtaXRPcChub2RlLCAnVFVDSycpO1xuICAgICAgLy8gW3ZhbCwgYXJyLCBhcnJdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgIC8vIFthcnJdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0FQUEVORCcpO1xuICAgIH07XG5cbiAgICAvLyBbYXJyXVxuICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy51bndyYXBBcnJheSk7XG4gICAgLy8gW2Fycl1cbiAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMuY2xvbmVBcnJheSk7XG4gICAgdHNVdGlscy5hcmd1bWVudGVkLmdldEFyZ3VtZW50cyhub2RlKS5mb3JFYWNoKChhcmcpID0+IHtcbiAgICAgIC8vIFt2YWwsIGFycl1cbiAgICAgIHNiLnZpc2l0KGFyZywgb3B0aW9ucyk7XG4gICAgICAvLyBbYXJyLCBhcnJdXG4gICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICBub2RlLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBzYi5oZWxwZXJzLmZvckJ1aWx0aW5UeXBlKHtcbiAgICAgICAgICB0eXBlOiBzYi5jb250ZXh0LmFuYWx5c2lzLmdldFR5cGUoYXJnKSxcbiAgICAgICAgICBhcnJheTogaGFuZGxlQXJyYXksXG4gICAgICAgICAgYXJyYXlTdG9yYWdlOiBoYW5kbGVPdGhlcixcbiAgICAgICAgICBib29sZWFuOiBoYW5kbGVPdGhlcixcbiAgICAgICAgICBidWZmZXI6IGhhbmRsZU90aGVyLFxuICAgICAgICAgIG51bGw6IGhhbmRsZU90aGVyLFxuICAgICAgICAgIG51bWJlcjogaGFuZGxlT3RoZXIsXG4gICAgICAgICAgb2JqZWN0OiBoYW5kbGVPdGhlcixcbiAgICAgICAgICBzdHJpbmc6IGhhbmRsZU90aGVyLFxuICAgICAgICAgIHN5bWJvbDogaGFuZGxlT3RoZXIsXG4gICAgICAgICAgdW5kZWZpbmVkOiBoYW5kbGVPdGhlcixcbiAgICAgICAgICBtYXA6IGhhbmRsZU90aGVyLFxuICAgICAgICAgIG1hcFN0b3JhZ2U6IGhhbmRsZU90aGVyLFxuICAgICAgICAgIHNldDogaGFuZGxlT3RoZXIsXG4gICAgICAgICAgc2V0U3RvcmFnZTogaGFuZGxlT3RoZXIsXG4gICAgICAgICAgZXJyb3I6IGhhbmRsZU90aGVyLFxuICAgICAgICAgIGZvcndhcmRWYWx1ZTogaGFuZGxlT3RoZXIsXG4gICAgICAgICAgaXRlcmF0b3JSZXN1bHQ6IGhhbmRsZU90aGVyLFxuICAgICAgICAgIGl0ZXJhYmxlOiBoYW5kbGVPdGhlcixcbiAgICAgICAgICBpdGVyYWJsZUl0ZXJhdG9yOiBoYW5kbGVPdGhlcixcbiAgICAgICAgICB0cmFuc2FjdGlvbjogaGFuZGxlT3RoZXIsXG4gICAgICAgICAgb3V0cHV0OiBoYW5kbGVPdGhlcixcbiAgICAgICAgICBhdHRyaWJ1dGU6IGhhbmRsZU90aGVyLFxuICAgICAgICAgIGlucHV0OiBoYW5kbGVPdGhlcixcbiAgICAgICAgICBhY2NvdW50OiBoYW5kbGVPdGhlcixcbiAgICAgICAgICBhc3NldDogaGFuZGxlT3RoZXIsXG4gICAgICAgICAgY29udHJhY3Q6IGhhbmRsZU90aGVyLFxuICAgICAgICAgIGhlYWRlcjogaGFuZGxlT3RoZXIsXG4gICAgICAgICAgYmxvY2s6IGhhbmRsZU90aGVyLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICAvLyBbYXJyXVxuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLmFyckNvbmNhdCk7XG4gICAgfSk7XG4gICAgaWYgKG9wdGlvbnNJbi5wdXNoVmFsdWUpIHtcbiAgICAgIC8vIFthcnJheVZhbF1cbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy53cmFwQXJyYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==