@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
42 lines (40 loc) • 5.24 kB
JavaScript
;
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