UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

38 lines (36 loc) 5.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const ts_utils_1 = require("@neo-one/ts-utils"); const typescript_1 = tslib_1.__importDefault(require("typescript")); const constants = tslib_1.__importStar(require("../../constants")); const NodeCompiler_1 = require("../NodeCompiler"); class DoStatementCompiler extends NodeCompiler_1.NodeCompiler { constructor() { super(...arguments); this.kind = typescript_1.default.SyntaxKind.DoStatement; } visitNode(sb, node, options) { sb.withProgramCounter((breakPC) => { sb.withProgramCounter((continuePC) => { sb.visit(ts_utils_1.tsUtils.statement.getStatement(node), sb.breakPCOptions(sb.continuePCOptions(options, continuePC.getLast()), breakPC.getLast())); sb.emitPushInt(node, constants.CONTINUE_COMPLETION); }); sb.emitOp(node, 'DROP'); sb.emitHelper(ts_utils_1.tsUtils.expression.getExpression(node), options, sb.helpers.if({ condition: () => { const expr = ts_utils_1.tsUtils.expression.getExpression(node); sb.visit(expr, sb.pushValueOptions(options)); sb.emitHelper(expr, sb.pushValueOptions(options), sb.helpers.toBoolean({ type: sb.context.analysis.getType(expr) })); }, whenTrue: () => { sb.emitJmp(node, 'JMP', breakPC.getFirst()); }, })); sb.emitPushInt(node, constants.BREAK_COMPLETION); }); sb.emitOp(node, 'DROP'); } } exports.DoStatementCompiler = DoStatementCompiler; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRvU3RhdGVtZW50Q29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0RBQTRDO0FBQzVDLG9FQUE0QjtBQUM1QixtRUFBNkM7QUFDN0Msa0RBQStDO0FBSS9DLE1BQWEsbUJBQW9CLFNBQVEsMkJBQTRCO0lBQXJFOztRQUNrQixTQUFJLEdBQUcsb0JBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO0lBd0NuRCxDQUFDO0lBdENRLFNBQVMsQ0FBQyxFQUFpQixFQUFFLElBQW9CLEVBQUUsT0FBcUI7UUFDN0UsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDaEMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7Z0JBQ25DLEVBQUUsQ0FBQyxLQUFLLENBQ04sa0JBQU8sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUNwQyxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQzFGLENBQUM7Z0JBRUYsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDdEQsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV4QixFQUFFLENBQUMsVUFBVSxDQUNYLGtCQUFPLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFDdEMsT0FBTyxFQUNQLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNaLFNBQVMsRUFBRSxHQUFHLEVBQUU7b0JBQ2QsTUFBTSxJQUFJLEdBQUcsa0JBQU8sQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNwRCxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDN0MsRUFBRSxDQUFDLFVBQVUsQ0FDWCxJQUFJLEVBQ0osRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUM1QixFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUNsRSxDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtvQkFDYixFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQzlDLENBQUM7YUFDRixDQUFDLENBQ0gsQ0FBQztZQUVGLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO1FBR0gsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUIsQ0FBQztDQUNGO0FBekNELGtEQXlDQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL3N0YXRlbWVudC9Eb1N0YXRlbWVudENvbXBpbGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHNVdGlscyB9IGZyb20gJ0BuZW8tb25lL3RzLXV0aWxzJztcbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgTm9kZUNvbXBpbGVyIH0gZnJvbSAnLi4vTm9kZUNvbXBpbGVyJztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBEb1N0YXRlbWVudENvbXBpbGVyIGV4dGVuZHMgTm9kZUNvbXBpbGVyPHRzLkRvU3RhdGVtZW50PiB7XG4gIHB1YmxpYyByZWFkb25seSBraW5kID0gdHMuU3ludGF4S2luZC5Eb1N0YXRlbWVudDtcblxuICBwdWJsaWMgdmlzaXROb2RlKHNiOiBTY3JpcHRCdWlsZGVyLCBub2RlOiB0cy5Eb1N0YXRlbWVudCwgb3B0aW9uczogVmlzaXRPcHRpb25zKTogdm9pZCB7XG4gICAgc2Iud2l0aFByb2dyYW1Db3VudGVyKChicmVha1BDKSA9PiB7XG4gICAgICBzYi53aXRoUHJvZ3JhbUNvdW50ZXIoKGNvbnRpbnVlUEMpID0+IHtcbiAgICAgICAgc2IudmlzaXQoXG4gICAgICAgICAgdHNVdGlscy5zdGF0ZW1lbnQuZ2V0U3RhdGVtZW50KG5vZGUpLFxuICAgICAgICAgIHNiLmJyZWFrUENPcHRpb25zKHNiLmNvbnRpbnVlUENPcHRpb25zKG9wdGlvbnMsIGNvbnRpbnVlUEMuZ2V0TGFzdCgpKSwgYnJlYWtQQy5nZXRMYXN0KCkpLFxuICAgICAgICApO1xuXG4gICAgICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIGNvbnN0YW50cy5DT05USU5VRV9DT01QTEVUSU9OKTtcbiAgICAgIH0pO1xuICAgICAgLy8gW11cbiAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuXG4gICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICB0c1V0aWxzLmV4cHJlc3Npb24uZ2V0RXhwcmVzc2lvbihub2RlKSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgc2IuaGVscGVycy5pZih7XG4gICAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleHByID0gdHNVdGlscy5leHByZXNzaW9uLmdldEV4cHJlc3Npb24obm9kZSk7XG4gICAgICAgICAgICBzYi52aXNpdChleHByLCBzYi5wdXNoVmFsdWVPcHRpb25zKG9wdGlvbnMpKTtcbiAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgICAgICAgIGV4cHIsXG4gICAgICAgICAgICAgIHNiLnB1c2hWYWx1ZU9wdGlvbnMob3B0aW9ucyksXG4gICAgICAgICAgICAgIHNiLmhlbHBlcnMudG9Cb29sZWFuKHsgdHlwZTogc2IuY29udGV4dC5hbmFseXNpcy5nZXRUeXBlKGV4cHIpIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdoZW5UcnVlOiAoKSA9PiB7XG4gICAgICAgICAgICBzYi5lbWl0Sm1wKG5vZGUsICdKTVAnLCBicmVha1BDLmdldEZpcnN0KCkpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgc2IuZW1pdFB1c2hJbnQobm9kZSwgY29uc3RhbnRzLkJSRUFLX0NPTVBMRVRJT04pO1xuICAgIH0pO1xuXG4gICAgLy8gW11cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgfVxufVxuIl19