UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

51 lines (49 loc) 8.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ts_utils_1 = require("@neo-one/ts-utils"); const types_1 = require("../types"); class ArrToStringHelper extends types_1.TypedHelper { constructor({ type, knownType, hasJoinString = false }) { super({ type, knownType }); this.hasJoinString = hasJoinString; } emit(sb, node, options) { if (!options.pushValue) { sb.emitOp(node, 'DROP'); return; } const types = this.type === undefined ? [] : ts_utils_1.tsUtils.type_.getArrayTypes(this.type); const type = types.length === 1 ? ts_utils_1.tsUtils.type_.getArrayType(types[0]) : undefined; const joinString = sb.scope.addUnique(); if (!this.hasJoinString) { sb.emitPushString(node, ','); } sb.scope.set(sb, node, options, joinString); sb.emitPushString(node, ''); sb.emitHelper(node, options, sb.helpers.arrReduce({ withIndex: true, each: (innerOptions) => { sb.emitHelper(node, options, sb.helpers.if({ condition: () => { sb.emitOp(node, 'ROT'); sb.emitPushInt(node, 0); sb.emitOp(node, 'NUMEQUAL'); }, whenTrue: () => { sb.emitOp(node, 'DROP'); sb.emitHelper(node, innerOptions, sb.helpers.toString({ type, initial: false })); }, whenFalse: () => { sb.scope.get(sb, node, options, joinString); sb.emitOp(node, 'CAT'); sb.emitOp(node, 'SWAP'); sb.emitHelper(node, innerOptions, sb.helpers.toString({ type, initial: false })); sb.emitOp(node, 'CAT'); }, })); }, })); } } exports.ArrToStringHelper = ArrToStringHelper; //# sourceMappingURL=data:application/json;charset=utf8;base64,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TUFBTSxDQUFDLENBQUM7d0JBRXhCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUVqRixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDekIsQ0FBQztpQkFDRixDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUM7U0FDRixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXhFRCw4Q0F3RUMiLCJmaWxlIjoibmVvLW9uZS1zbWFydC1jb250cmFjdC1jb21waWxlci9zcmMvY29tcGlsZS9oZWxwZXIvYXJyL0FyclRvU3RyaW5nSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHNVdGlscyB9IGZyb20gJ0BuZW8tb25lL3RzLXV0aWxzJztcbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBUeXBlZEhlbHBlciwgVHlwZWRIZWxwZXJPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFyclRvU3RyaW5nSGVscGVyT3B0aW9ucyBleHRlbmRzIFR5cGVkSGVscGVyT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGhhc0pvaW5TdHJpbmc/OiBib29sZWFuO1xufVxuXG4vLyBJbnB1dDogW2pvaW5TdHJpbmc/LCBhcnJdXG4vLyBPdXRwdXQ6IFtzdHJpbmddXG5leHBvcnQgY2xhc3MgQXJyVG9TdHJpbmdIZWxwZXIgZXh0ZW5kcyBUeXBlZEhlbHBlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGFzSm9pblN0cmluZzogYm9vbGVhbjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoeyB0eXBlLCBrbm93blR5cGUsIGhhc0pvaW5TdHJpbmcgPSBmYWxzZSB9OiBBcnJUb1N0cmluZ0hlbHBlck9wdGlvbnMpIHtcbiAgICBzdXBlcih7IHR5cGUsIGtub3duVHlwZSB9KTtcbiAgICB0aGlzLmhhc0pvaW5TdHJpbmcgPSBoYXNKb2luU3RyaW5nO1xuICB9XG5cbiAgcHVibGljIGVtaXQoc2I6IFNjcmlwdEJ1aWxkZXIsIG5vZGU6IHRzLk5vZGUsIG9wdGlvbnM6IFZpc2l0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghb3B0aW9ucy5wdXNoVmFsdWUpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlcyA9IHRoaXMudHlwZSA9PT0gdW5kZWZpbmVkID8gW10gOiB0c1V0aWxzLnR5cGVfLmdldEFycmF5VHlwZXModGhpcy50eXBlKTtcbiAgICBjb25zdCB0eXBlID0gdHlwZXMubGVuZ3RoID09PSAxID8gdHNVdGlscy50eXBlXy5nZXRBcnJheVR5cGUodHlwZXNbMF0pIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgam9pblN0cmluZyA9IHNiLnNjb3BlLmFkZFVuaXF1ZSgpO1xuICAgIGlmICghdGhpcy5oYXNKb2luU3RyaW5nKSB7XG4gICAgICBzYi5lbWl0UHVzaFN0cmluZyhub2RlLCAnLCcpO1xuICAgIH1cbiAgICAvLyBbYXJyXVxuICAgIHNiLnNjb3BlLnNldChzYiwgbm9kZSwgb3B0aW9ucywgam9pblN0cmluZyk7XG5cbiAgICAvLyBbYWNjdW0sIGFycl1cbiAgICBzYi5lbWl0UHVzaFN0cmluZyhub2RlLCAnJyk7XG4gICAgLy8gW2FjY3VtXVxuICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICBub2RlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHNiLmhlbHBlcnMuYXJyUmVkdWNlKHtcbiAgICAgICAgd2l0aEluZGV4OiB0cnVlLFxuICAgICAgICBlYWNoOiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgc2IuaGVscGVycy5pZih7XG4gICAgICAgICAgICAgIGNvbmRpdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFtpZHgsIGFjY3VtLCB2YWxdXG4gICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdST1QnKTtcbiAgICAgICAgICAgICAgICAvLyBbMCwgaWR4LCBhY2N1bSwgdmFsXVxuICAgICAgICAgICAgICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIDApO1xuICAgICAgICAgICAgICAgIC8vIFtpZHggPT09IDAsIGFjY3VtLCB2YWxdXG4gICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdOVU1FUVVBTCcpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB3aGVuVHJ1ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFt2YWxdXG4gICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICAgICAgICAgICAgLy8gW2FjY3VtXVxuICAgICAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnRvU3RyaW5nKHsgdHlwZSwgaW5pdGlhbDogZmFsc2UgfSkpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB3aGVuRmFsc2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBbc3RyaW5nLCBhY2N1bSwgdmFsXVxuICAgICAgICAgICAgICAgIHNiLnNjb3BlLmdldChzYiwgbm9kZSwgb3B0aW9ucywgam9pblN0cmluZyk7XG4gICAgICAgICAgICAgICAgLy8gW2FjY3VtLCB2YWxdXG4gICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdDQVQnKTtcbiAgICAgICAgICAgICAgICAvLyBbdmFsLCBhY2N1bV1cbiAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgICAgICAgICAgICAvLyBbc3RyaW5nLCBhY2N1bV1cbiAgICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy50b1N0cmluZyh7IHR5cGUsIGluaXRpYWw6IGZhbHNlIH0pKTtcbiAgICAgICAgICAgICAgICAvLyBbYWNjdW1dXG4gICAgICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdDQVQnKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=