@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
48 lines (46 loc) • 6.23 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 ForStatementCompiler extends NodeCompiler_1.NodeCompiler {
constructor() {
super(...arguments);
this.kind = typescript_1.default.SyntaxKind.ForStatement;
}
visitNode(sb, node, options) {
let condition;
const exprCondition = ts_utils_1.tsUtils.statement.getCondition(node);
if (exprCondition !== undefined) {
condition = () => {
sb.visit(exprCondition, sb.pushValueOptions(options));
sb.emitHelper(exprCondition, sb.pushValueOptions(options), sb.helpers.toBoolean({
type: sb.context.analysis.getType(exprCondition),
}));
};
}
let incrementor;
const exprIncrementor = ts_utils_1.tsUtils.statement.getIncrementor(node);
if (exprIncrementor !== undefined) {
incrementor = () => {
sb.visit(exprIncrementor, sb.noPushValueOptions(options));
};
}
const exprInitializer = ts_utils_1.tsUtils.statement.getInitializer(node);
if (exprInitializer !== undefined) {
sb.visit(exprInitializer, sb.noPushValueOptions(options));
}
sb.emitHelper(node, options, sb.helpers.forLoop({
condition,
incrementor,
each: (innerOptions) => {
sb.visit(ts_utils_1.tsUtils.statement.getStatement(node), sb.noPushValueOptions(innerOptions));
},
cleanup: () => {
},
}));
}
}
exports.ForStatementCompiler = ForStatementCompiler;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZvclN0YXRlbWVudENvbXBpbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGdEQUE0QztBQUM1QyxvRUFBNEI7QUFDNUIsa0RBQStDO0FBSS9DLE1BQWEsb0JBQXFCLFNBQVEsMkJBQTZCO0lBQXZFOztRQUNrQixTQUFJLEdBQUcsb0JBQUUsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO0lBOENwRCxDQUFDO0lBNUNRLFNBQVMsQ0FBQyxFQUFpQixFQUFFLElBQXFCLEVBQUUsT0FBcUI7UUFDOUUsSUFBSSxTQUFTLENBQUM7UUFDZCxNQUFNLGFBQWEsR0FBRyxrQkFBTyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0QsSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFFO1lBQy9CLFNBQVMsR0FBRyxHQUFHLEVBQUU7Z0JBQ2YsRUFBRSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELEVBQUUsQ0FBQyxVQUFVLENBQ1gsYUFBYSxFQUNiLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsRUFDNUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7b0JBQ25CLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO2lCQUNqRCxDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUMsQ0FBQztTQUNIO1FBRUQsSUFBSSxXQUFXLENBQUM7UUFDaEIsTUFBTSxlQUFlLEdBQUcsa0JBQU8sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9ELElBQUksZUFBZSxLQUFLLFNBQVMsRUFBRTtZQUNqQyxXQUFXLEdBQUcsR0FBRyxFQUFFO2dCQUNqQixFQUFFLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUM1RCxDQUFDLENBQUM7U0FDSDtRQUVELE1BQU0sZUFBZSxHQUFHLGtCQUFPLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvRCxJQUFJLGVBQWUsS0FBSyxTQUFTLEVBQUU7WUFDakMsRUFBRSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDM0Q7UUFFRCxFQUFFLENBQUMsVUFBVSxDQUNYLElBQUksRUFDSixPQUFPLEVBQ1AsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDakIsU0FBUztZQUNULFdBQVc7WUFDWCxJQUFJLEVBQUUsQ0FBQyxZQUFZLEVBQUUsRUFBRTtnQkFDckIsRUFBRSxDQUFDLEtBQUssQ0FBQyxrQkFBTyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDdEYsQ0FBQztZQUNELE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFFZCxDQUFDO1NBQ0YsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0NBQ0Y7QUEvQ0Qsb0RBK0NDIiwiZmlsZSI6Im5lby1vbmUtc21hcnQtY29udHJhY3QtY29tcGlsZXIvc3JjL2NvbXBpbGUvc3RhdGVtZW50L0ZvclN0YXRlbWVudENvbXBpbGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHNVdGlscyB9IGZyb20gJ0BuZW8tb25lL3RzLXV0aWxzJztcbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IE5vZGVDb21waWxlciB9IGZyb20gJy4uL05vZGVDb21waWxlcic7XG5pbXBvcnQgeyBTY3JpcHRCdWlsZGVyIH0gZnJvbSAnLi4vc2InO1xuaW1wb3J0IHsgVmlzaXRPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgRm9yU3RhdGVtZW50Q29tcGlsZXIgZXh0ZW5kcyBOb2RlQ29tcGlsZXI8dHMuRm9yU3RhdGVtZW50PiB7XG4gIHB1YmxpYyByZWFkb25seSBraW5kID0gdHMuU3ludGF4S2luZC5Gb3JTdGF0ZW1lbnQ7XG5cbiAgcHVibGljIHZpc2l0Tm9kZShzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogdHMuRm9yU3RhdGVtZW50LCBvcHRpb25zOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBsZXQgY29uZGl0aW9uO1xuICAgIGNvbnN0IGV4cHJDb25kaXRpb24gPSB0c1V0aWxzLnN0YXRlbWVudC5nZXRDb25kaXRpb24obm9kZSk7XG4gICAgaWYgKGV4cHJDb25kaXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uZGl0aW9uID0gKCkgPT4ge1xuICAgICAgICBzYi52aXNpdChleHByQ29uZGl0aW9uLCBzYi5wdXNoVmFsdWVPcHRpb25zKG9wdGlvbnMpKTtcbiAgICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgICBleHByQ29uZGl0aW9uLFxuICAgICAgICAgIHNiLnB1c2hWYWx1ZU9wdGlvbnMob3B0aW9ucyksXG4gICAgICAgICAgc2IuaGVscGVycy50b0Jvb2xlYW4oe1xuICAgICAgICAgICAgdHlwZTogc2IuY29udGV4dC5hbmFseXNpcy5nZXRUeXBlKGV4cHJDb25kaXRpb24pLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBsZXQgaW5jcmVtZW50b3I7XG4gICAgY29uc3QgZXhwckluY3JlbWVudG9yID0gdHNVdGlscy5zdGF0ZW1lbnQuZ2V0SW5jcmVtZW50b3Iobm9kZSk7XG4gICAgaWYgKGV4cHJJbmNyZW1lbnRvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbmNyZW1lbnRvciA9ICgpID0+IHtcbiAgICAgICAgc2IudmlzaXQoZXhwckluY3JlbWVudG9yLCBzYi5ub1B1c2hWYWx1ZU9wdGlvbnMob3B0aW9ucykpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBleHBySW5pdGlhbGl6ZXIgPSB0c1V0aWxzLnN0YXRlbWVudC5nZXRJbml0aWFsaXplcihub2RlKTtcbiAgICBpZiAoZXhwckluaXRpYWxpemVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNiLnZpc2l0KGV4cHJJbml0aWFsaXplciwgc2Iubm9QdXNoVmFsdWVPcHRpb25zKG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgbm9kZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzYi5oZWxwZXJzLmZvckxvb3Aoe1xuICAgICAgICBjb25kaXRpb24sXG4gICAgICAgIGluY3JlbWVudG9yLFxuICAgICAgICBlYWNoOiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgc2IudmlzaXQodHNVdGlscy5zdGF0ZW1lbnQuZ2V0U3RhdGVtZW50KG5vZGUpLCBzYi5ub1B1c2hWYWx1ZU9wdGlvbnMoaW5uZXJPcHRpb25zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsZWFudXA6ICgpID0+IHtcbiAgICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=