UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

42 lines (40 loc) 5.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const Helper_1 = require("../Helper"); class IfHelper extends Helper_1.Helper { constructor({ condition, whenTrue, whenFalse }) { super(); this.condition = condition; this.whenTrue = whenTrue; this.whenFalse = whenFalse; } emit(sb, node, _options) { this.condition(); const { whenTrue, whenFalse } = this; if (whenTrue === undefined) { if (whenFalse === undefined) { throw new Error('If statement must have a true or false value'); } sb.withProgramCounter((endPC) => { sb.emitJmp(node, 'JMPIF', endPC.getLast()); whenFalse(); }); } else { sb.withProgramCounter((whenFalsePC) => { sb.withProgramCounter((whenTruePC) => { sb.emitJmp(node, 'JMPIFNOT', whenTruePC.getLast()); whenTrue(); if (this.whenFalse !== undefined) { sb.emitJmp(node, 'JMP', whenFalsePC.getLast()); } }); if (this.whenFalse !== undefined) { this.whenFalse(); } }); } } } exports.IfHelper = IfHelper; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklmSGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEsc0NBQW1DO0FBUW5DLE1BQWEsUUFBUyxTQUFRLGVBQU07SUFLbEMsWUFBbUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBbUI7UUFDcEUsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBRU0sSUFBSSxDQUFDLEVBQWlCLEVBQUUsSUFBYSxFQUFFLFFBQXNCO1FBQ2xFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNyQyxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUU7WUFDMUIsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFO2dCQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7YUFDakU7WUFDRCxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDOUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUMzQyxTQUFTLEVBQUUsQ0FBQztZQUNkLENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUNwQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtvQkFDbkMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO29CQUNuRCxRQUFRLEVBQUUsQ0FBQztvQkFDWCxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFO3dCQUNoQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7cUJBQ2hEO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7b0JBQ2hDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztpQkFDbEI7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztDQUNGO0FBdkNELDRCQXVDQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2hlbHBlci9zdGF0ZW1lbnQvSWZIZWxwZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBIZWxwZXIgfSBmcm9tICcuLi9IZWxwZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIElmSGVscGVyT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNvbmRpdGlvbjogKCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgd2hlblRydWU/OiAoKSA9PiB2b2lkO1xuICByZWFkb25seSB3aGVuRmFsc2U/OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBJZkhlbHBlciBleHRlbmRzIEhlbHBlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZGl0aW9uOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIHJlYWRvbmx5IHdoZW5UcnVlOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgd2hlbkZhbHNlOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHsgY29uZGl0aW9uLCB3aGVuVHJ1ZSwgd2hlbkZhbHNlIH06IElmSGVscGVyT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb25kaXRpb24gPSBjb25kaXRpb247XG4gICAgdGhpcy53aGVuVHJ1ZSA9IHdoZW5UcnVlO1xuICAgIHRoaXMud2hlbkZhbHNlID0gd2hlbkZhbHNlO1xuICB9XG5cbiAgcHVibGljIGVtaXQoc2I6IFNjcmlwdEJ1aWxkZXIsIG5vZGU6IHRzLk5vZGUsIF9vcHRpb25zOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmRpdGlvbigpO1xuICAgIGNvbnN0IHsgd2hlblRydWUsIHdoZW5GYWxzZSB9ID0gdGhpcztcbiAgICBpZiAod2hlblRydWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHdoZW5GYWxzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSWYgc3RhdGVtZW50IG11c3QgaGF2ZSBhIHRydWUgb3IgZmFsc2UgdmFsdWUnKTtcbiAgICAgIH1cbiAgICAgIHNiLndpdGhQcm9ncmFtQ291bnRlcigoZW5kUEMpID0+IHtcbiAgICAgICAgc2IuZW1pdEptcChub2RlLCAnSk1QSUYnLCBlbmRQQy5nZXRMYXN0KCkpO1xuICAgICAgICB3aGVuRmFsc2UoKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzYi53aXRoUHJvZ3JhbUNvdW50ZXIoKHdoZW5GYWxzZVBDKSA9PiB7XG4gICAgICAgIHNiLndpdGhQcm9ncmFtQ291bnRlcigod2hlblRydWVQQykgPT4ge1xuICAgICAgICAgIHNiLmVtaXRKbXAobm9kZSwgJ0pNUElGTk9UJywgd2hlblRydWVQQy5nZXRMYXN0KCkpO1xuICAgICAgICAgIHdoZW5UcnVlKCk7XG4gICAgICAgICAgaWYgKHRoaXMud2hlbkZhbHNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNiLmVtaXRKbXAobm9kZSwgJ0pNUCcsIHdoZW5GYWxzZVBDLmdldExhc3QoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy53aGVuRmFsc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMud2hlbkZhbHNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl19