UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

72 lines (70 loc) 9.72 kB
"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==