@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
40 lines (38 loc) • 4.82 kB
JavaScript
;
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 NodeCompiler_1 = require("../NodeCompiler");
class IfStatementCompiler extends NodeCompiler_1.NodeCompiler {
constructor() {
super(...arguments);
this.kind = typescript_1.default.SyntaxKind.IfStatement;
}
visitNode(sb, node, options) {
const condition = () => {
const cond = ts_utils_1.tsUtils.expression.getExpression(node);
sb.visit(cond, sb.pushValueOptions(options));
sb.emitHelper(cond, sb.pushValueOptions(options), sb.helpers.toBoolean({
type: sb.context.analysis.getType(cond),
}));
};
const whenTrue = () => {
sb.visit(ts_utils_1.tsUtils.statement.getThenStatement(node), options);
};
let whenFalse;
const nodeWhenFalse = ts_utils_1.tsUtils.statement.getElseStatement(node);
if (nodeWhenFalse !== undefined) {
whenFalse = () => {
sb.visit(nodeWhenFalse, options);
};
}
sb.emitHelper(node, options, sb.helpers.if({
condition,
whenTrue,
whenFalse,
}));
}
}
exports.IfStatementCompiler = IfStatementCompiler;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklmU3RhdGVtZW50Q29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0RBQTRDO0FBQzVDLG9FQUE0QjtBQUM1QixrREFBK0M7QUFJL0MsTUFBYSxtQkFBb0IsU0FBUSwyQkFBNEI7SUFBckU7O1FBQ2tCLFNBQUksR0FBRyxvQkFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7SUFxQ25ELENBQUM7SUFuQ1EsU0FBUyxDQUFDLEVBQWlCLEVBQUUsSUFBb0IsRUFBRSxPQUFxQjtRQUM3RSxNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUU7WUFDckIsTUFBTSxJQUFJLEdBQUcsa0JBQU8sQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BELEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzdDLEVBQUUsQ0FBQyxVQUFVLENBQ1gsSUFBSSxFQUNKLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsRUFDNUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7Z0JBQ25CLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2FBQ3hDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFO1lBQ3BCLEVBQUUsQ0FBQyxLQUFLLENBQUMsa0JBQU8sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDO1FBRUYsSUFBSSxTQUFTLENBQUM7UUFDZCxNQUFNLGFBQWEsR0FBRyxrQkFBTyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvRCxJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUU7WUFDL0IsU0FBUyxHQUFHLEdBQUcsRUFBRTtnQkFDZixFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNuQyxDQUFDLENBQUM7U0FDSDtRQUVELEVBQUUsQ0FBQyxVQUFVLENBQ1gsSUFBSSxFQUNKLE9BQU8sRUFDUCxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNaLFNBQVM7WUFDVCxRQUFRO1lBQ1IsU0FBUztTQUNWLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBdENELGtEQXNDQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL3N0YXRlbWVudC9JZlN0YXRlbWVudENvbXBpbGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHNVdGlscyB9IGZyb20gJ0BuZW8tb25lL3RzLXV0aWxzJztcbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IE5vZGVDb21waWxlciB9IGZyb20gJy4uL05vZGVDb21waWxlcic7XG5pbXBvcnQgeyBTY3JpcHRCdWlsZGVyIH0gZnJvbSAnLi4vc2InO1xuaW1wb3J0IHsgVmlzaXRPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgSWZTdGF0ZW1lbnRDb21waWxlciBleHRlbmRzIE5vZGVDb21waWxlcjx0cy5JZlN0YXRlbWVudD4ge1xuICBwdWJsaWMgcmVhZG9ubHkga2luZCA9IHRzLlN5bnRheEtpbmQuSWZTdGF0ZW1lbnQ7XG5cbiAgcHVibGljIHZpc2l0Tm9kZShzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogdHMuSWZTdGF0ZW1lbnQsIG9wdGlvbnM6IFZpc2l0T3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmRpdGlvbiA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNvbmQgPSB0c1V0aWxzLmV4cHJlc3Npb24uZ2V0RXhwcmVzc2lvbihub2RlKTtcbiAgICAgIHNiLnZpc2l0KGNvbmQsIHNiLnB1c2hWYWx1ZU9wdGlvbnMob3B0aW9ucykpO1xuICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgY29uZCxcbiAgICAgICAgc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zKSxcbiAgICAgICAgc2IuaGVscGVycy50b0Jvb2xlYW4oe1xuICAgICAgICAgIHR5cGU6IHNiLmNvbnRleHQuYW5hbHlzaXMuZ2V0VHlwZShjb25kKSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH07XG5cbiAgICBjb25zdCB3aGVuVHJ1ZSA9ICgpID0+IHtcbiAgICAgIHNiLnZpc2l0KHRzVXRpbHMuc3RhdGVtZW50LmdldFRoZW5TdGF0ZW1lbnQobm9kZSksIG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICBsZXQgd2hlbkZhbHNlO1xuICAgIGNvbnN0IG5vZGVXaGVuRmFsc2UgPSB0c1V0aWxzLnN0YXRlbWVudC5nZXRFbHNlU3RhdGVtZW50KG5vZGUpO1xuICAgIGlmIChub2RlV2hlbkZhbHNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdoZW5GYWxzZSA9ICgpID0+IHtcbiAgICAgICAgc2IudmlzaXQobm9kZVdoZW5GYWxzZSwgb3B0aW9ucyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICBub2RlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHNiLmhlbHBlcnMuaWYoe1xuICAgICAgICBjb25kaXRpb24sXG4gICAgICAgIHdoZW5UcnVlLFxuICAgICAgICB3aGVuRmFsc2UsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=