@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
72 lines (70 loc) • 10.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const ts_utils_1 = require("@neo-one/ts-utils");
const Helper_1 = require("../Helper");
class LessThanHelper extends Helper_1.Helper {
constructor(options) {
super();
this.leftFirst = options.leftFirst;
this.left = options.left;
this.right = options.right;
}
emit(sb, node, options) {
if (!options.pushValue) {
if (this.leftFirst) {
sb.visit(this.left, options);
sb.visit(this.right, options);
}
else {
sb.visit(this.right, options);
sb.visit(this.left, options);
}
return;
}
const leftType = sb.context.analysis.getType(this.left);
const rightType = sb.context.analysis.getType(this.right);
if (this.leftFirst) {
sb.visit(this.left, options);
sb.emitHelper(this.left, options, sb.helpers.toPrimitive({
type: leftType,
preferredType: 'number',
}));
sb.visit(this.right, options);
sb.emitHelper(this.right, options, sb.helpers.toPrimitive({
type: rightType,
preferredType: 'number',
}));
}
else {
sb.visit(this.right, options);
sb.emitHelper(this.right, options, sb.helpers.toPrimitive({
type: rightType,
preferredType: 'number',
}));
sb.visit(this.left, options);
sb.emitHelper(this.left, options, sb.helpers.toPrimitive({
type: leftType,
preferredType: 'number',
}));
sb.emitOp(node, 'SWAP');
}
if (leftType !== undefined &&
rightType !== undefined &&
ts_utils_1.tsUtils.type_.isOnlyStringish(leftType) &&
ts_utils_1.tsUtils.type_.isOnlyStringish(rightType)) {
sb.context.reportUnsupported(node);
}
else {
sb.emitHelper(this.right, options, sb.helpers.toNumber({ type: rightType }));
sb.emitOp(node, 'SWAP');
sb.emitHelper(this.left, options, sb.helpers.toNumber({ type: leftType }));
sb.emitOp(node, 'SWAP');
sb.emitOp(node, 'LT');
if (!options.pushValue) {
sb.emitOp(node, 'DROP');
}
}
}
}
exports.LessThanHelper = LessThanHelper;
//# sourceMappingURL=data:application/json;charset=utf8;base64,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U0FDekI7UUFFRCxJQUNFLFFBQVEsS0FBSyxTQUFTO1lBQ3RCLFNBQVMsS0FBSyxTQUFTO1lBQ3ZCLGtCQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUM7WUFDdkMsa0JBQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUN4QztZQUNBLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEM7YUFBTTtZQUVMLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRTdFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXhCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRTNFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXhCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRXRCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO2dCQUN0QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQzthQUN6QjtTQUNGO0lBQ0gsQ0FBQztDQUNGO0FBdEdELHdDQXNHQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2hlbHBlci9yZWxhdGlvbmFsL0xlc3NUaGFuSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQgeyB0c1V0aWxzIH0gZnJvbSAnQG5lby1vbmUvdHMtdXRpbHMnO1xuaW1wb3J0IHsgU2NyaXB0QnVpbGRlciB9IGZyb20gJy4uLy4uL3NiJztcbmltcG9ydCB7IFZpc2l0T3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEhlbHBlciB9IGZyb20gJy4uL0hlbHBlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGVzc1RoYW5IZWxwZXJPcHRpb25zIHtcbiAgcmVhZG9ubHkgbGVmdEZpcnN0OiBib29sZWFuO1xuICByZWFkb25seSBsZWZ0OiB0cy5Ob2RlO1xuICByZWFkb25seSByaWdodDogdHMuTm9kZTtcbn1cblxuLy8gSW5wdXQ6IFtdXG4vLyBPdXRwdXQ6IFtib29sZWFuXVxuZXhwb3J0IGNsYXNzIExlc3NUaGFuSGVscGVyIGV4dGVuZHMgSGVscGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBsZWZ0Rmlyc3Q6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgbGVmdDogdHMuTm9kZTtcbiAgcHJpdmF0ZSByZWFkb25seSByaWdodDogdHMuTm9kZTtcblxuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogTGVzc1RoYW5IZWxwZXJPcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmxlZnRGaXJzdCA9IG9wdGlvbnMubGVmdEZpcnN0O1xuICAgIHRoaXMubGVmdCA9IG9wdGlvbnMubGVmdDtcbiAgICB0aGlzLnJpZ2h0ID0gb3B0aW9ucy5yaWdodDtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0KHNiOiBTY3JpcHRCdWlsZGVyLCBub2RlOiB0cy5Ob2RlLCBvcHRpb25zOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIW9wdGlvbnMucHVzaFZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5sZWZ0Rmlyc3QpIHtcbiAgICAgICAgc2IudmlzaXQodGhpcy5sZWZ0LCBvcHRpb25zKTtcbiAgICAgICAgc2IudmlzaXQodGhpcy5yaWdodCwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzYi52aXNpdCh0aGlzLnJpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgc2IudmlzaXQodGhpcy5sZWZ0LCBvcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxlZnRUeXBlID0gc2IuY29udGV4dC5hbmFseXNpcy5nZXRUeXBlKHRoaXMubGVmdCk7XG4gICAgY29uc3QgcmlnaHRUeXBlID0gc2IuY29udGV4dC5hbmFseXNpcy5nZXRUeXBlKHRoaXMucmlnaHQpO1xuXG4gICAgaWYgKHRoaXMubGVmdEZpcnN0KSB7XG4gICAgICAvLyBbbGVmdF1cbiAgICAgIHNiLnZpc2l0KHRoaXMubGVmdCwgb3B0aW9ucyk7XG4gICAgICAvLyBbbGVmdFByaW1dXG4gICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICB0aGlzLmxlZnQsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHNiLmhlbHBlcnMudG9QcmltaXRpdmUoe1xuICAgICAgICAgIHR5cGU6IGxlZnRUeXBlLFxuICAgICAgICAgIHByZWZlcnJlZFR5cGU6ICdudW1iZXInLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICAvLyBbcmlnaHQsIGxlZnRQcmltXVxuICAgICAgc2IudmlzaXQodGhpcy5yaWdodCwgb3B0aW9ucyk7XG4gICAgICAvLyBbcmlnaHRQcmltLCBsZWZ0UHJpbV1cbiAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgIHRoaXMucmlnaHQsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHNiLmhlbHBlcnMudG9QcmltaXRpdmUoe1xuICAgICAgICAgIHR5cGU6IHJpZ2h0VHlwZSxcbiAgICAgICAgICBwcmVmZXJyZWRUeXBlOiAnbnVtYmVyJyxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBbcmlnaHRdXG4gICAgICBzYi52aXNpdCh0aGlzLnJpZ2h0LCBvcHRpb25zKTtcbiAgICAgIC8vIFtyaWdodFByaW1dXG4gICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICB0aGlzLnJpZ2h0LFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBzYi5oZWxwZXJzLnRvUHJpbWl0aXZlKHtcbiAgICAgICAgICB0eXBlOiByaWdodFR5cGUsXG4gICAgICAgICAgcHJlZmVycmVkVHlwZTogJ251bWJlcicsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIC8vIFtsZWZ0LCByaWdodFByaW1dXG4gICAgICBzYi52aXNpdCh0aGlzLmxlZnQsIG9wdGlvbnMpO1xuICAgICAgLy8gW2xlZnRQcmltLCByaWdodFByaW1dXG4gICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICB0aGlzLmxlZnQsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHNiLmhlbHBlcnMudG9QcmltaXRpdmUoe1xuICAgICAgICAgIHR5cGU6IGxlZnRUeXBlLFxuICAgICAgICAgIHByZWZlcnJlZFR5cGU6ICdudW1iZXInLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICAvLyBbcmlnaHRQcmltLCBsZWZ0UHJpbV1cbiAgICAgIHNiLmVtaXRPcChub2RlLCAnU1dBUCcpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGxlZnRUeXBlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHJpZ2h0VHlwZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0c1V0aWxzLnR5cGVfLmlzT25seVN0cmluZ2lzaChsZWZ0VHlwZSkgJiZcbiAgICAgIHRzVXRpbHMudHlwZV8uaXNPbmx5U3RyaW5naXNoKHJpZ2h0VHlwZSlcbiAgICApIHtcbiAgICAgIHNiLmNvbnRleHQucmVwb3J0VW5zdXBwb3J0ZWQobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFtyaWdodE51bWJlciwgbGVmdFByaW1dXG4gICAgICBzYi5lbWl0SGVscGVyKHRoaXMucmlnaHQsIG9wdGlvbnMsIHNiLmhlbHBlcnMudG9OdW1iZXIoeyB0eXBlOiByaWdodFR5cGUgfSkpO1xuICAgICAgLy8gW2xlZnRQcmltLCByaWdodE51bWJlcl1cbiAgICAgIHNiLmVtaXRPcChub2RlLCAnU1dBUCcpO1xuICAgICAgLy8gW2xlZnROdW1iZXIsIHJpZ2h0TnVtYmVyXVxuICAgICAgc2IuZW1pdEhlbHBlcih0aGlzLmxlZnQsIG9wdGlvbnMsIHNiLmhlbHBlcnMudG9OdW1iZXIoeyB0eXBlOiBsZWZ0VHlwZSB9KSk7XG4gICAgICAvLyBbcmlnaHROdW1iZXIsIGxlZnROdW1iZXJdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgIC8vIFtsdF1cbiAgICAgIHNiLmVtaXRPcChub2RlLCAnTFQnKTtcblxuICAgICAgaWYgKCFvcHRpb25zLnB1c2hWYWx1ZSkge1xuICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==