@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
53 lines (51 loc) • 8.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const ts_utils_1 = require("@neo-one/ts-utils");
const utils_1 = require("@neo-one/utils");
const typescript_1 = tslib_1.__importDefault(require("typescript"));
const NodeCompiler_1 = require("../NodeCompiler");
class PostfixUnaryExpressionCompiler extends NodeCompiler_1.NodeCompiler {
constructor() {
super(...arguments);
this.kind = typescript_1.default.SyntaxKind.PostfixUnaryExpression;
}
visitNode(sb, expr, options) {
sb.visit(ts_utils_1.tsUtils.expression.getOperand(expr), sb.noSetValueOptions(sb.pushValueOptions(options)));
const token = ts_utils_1.tsUtils.expression.getOperator(expr);
switch (token) {
case typescript_1.default.SyntaxKind.PlusPlusToken:
case typescript_1.default.SyntaxKind.MinusMinusToken:
this.visitAssignment(sb, token, expr, options);
break;
default:
utils_1.utils.assertNever(token);
}
}
visitAssignment(sb, token, expr, options) {
if (options.pushValue) {
sb.emitOp(expr, 'DUP');
}
switch (token) {
case typescript_1.default.SyntaxKind.PlusPlusToken:
sb.emitHelper(expr, sb.pushValueOptions(options), sb.helpers.toNumber({
type: sb.context.analysis.getType(expr),
}));
sb.emitOp(expr, 'INC');
sb.emitHelper(expr, sb.pushValueOptions(options), sb.helpers.wrapNumber);
break;
case typescript_1.default.SyntaxKind.MinusMinusToken:
sb.emitHelper(expr, sb.pushValueOptions(options), sb.helpers.toNumber({
type: sb.context.analysis.getType(expr),
}));
sb.emitOp(expr, 'DEC');
sb.emitHelper(expr, sb.pushValueOptions(options), sb.helpers.wrapNumber);
break;
default:
utils_1.utils.assertNever(token);
}
sb.visit(ts_utils_1.tsUtils.expression.getOperand(expr), sb.noPushValueOptions(sb.setValueOptions(options)));
}
}
exports.PostfixUnaryExpressionCompiler = PostfixUnaryExpressionCompiler;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlBvc3RmaXhVbmFyeUV4cHJlc3Npb25Db21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnREFBNEM7QUFDNUMsMENBQXVDO0FBQ3ZDLG9FQUE0QjtBQUM1QixrREFBK0M7QUFLL0MsTUFBYSw4QkFBK0IsU0FBUSwyQkFBdUM7SUFBM0Y7O1FBQ2tCLFNBQUksR0FBRyxvQkFBRSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQztJQXdEOUQsQ0FBQztJQXREUSxTQUFTLENBQUMsRUFBaUIsRUFBRSxJQUErQixFQUFFLE9BQXFCO1FBQ3hGLEVBQUUsQ0FBQyxLQUFLLENBQUMsa0JBQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sS0FBSyxHQUFHLGtCQUFPLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRCxRQUFRLEtBQUssRUFBRTtZQUNiLEtBQUssb0JBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1lBQ2pDLEtBQUssb0JBQUUsQ0FBQyxVQUFVLENBQUMsZUFBZTtnQkFDaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDL0MsTUFBTTtZQUNSO2dCQUVFLGFBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRU8sZUFBZSxDQUNyQixFQUFpQixFQUNqQixLQUFxQixFQUNyQixJQUErQixFQUMvQixPQUFxQjtRQUVyQixJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDckIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDeEI7UUFFRCxRQUFRLEtBQUssRUFBRTtZQUNiLEtBQUssb0JBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYTtnQkFDOUIsRUFBRSxDQUFDLFVBQVUsQ0FDWCxJQUFJLEVBQ0osRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUM1QixFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztvQkFDbEIsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7aUJBQ3hDLENBQUMsQ0FDSCxDQUFDO2dCQUNGLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN2QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDekUsTUFBTTtZQUNSLEtBQUssb0JBQUUsQ0FBQyxVQUFVLENBQUMsZUFBZTtnQkFDaEMsRUFBRSxDQUFDLFVBQVUsQ0FDWCxJQUFJLEVBQ0osRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUM1QixFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztvQkFDbEIsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7aUJBQ3hDLENBQUMsQ0FDSCxDQUFDO2dCQUNGLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN2QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDekUsTUFBTTtZQUNSO2dCQUVFLGFBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUI7UUFFRCxFQUFFLENBQUMsS0FBSyxDQUFDLGtCQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEcsQ0FBQztDQUNGO0FBekRELHdFQXlEQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2V4cHJlc3Npb24vUG9zdGZpeFVuYXJ5RXhwcmVzc2lvbkNvbXBpbGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHNVdGlscyB9IGZyb20gJ0BuZW8tb25lL3RzLXV0aWxzJztcbmltcG9ydCB7IHV0aWxzIH0gZnJvbSAnQG5lby1vbmUvdXRpbHMnO1xuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgTm9kZUNvbXBpbGVyIH0gZnJvbSAnLi4vTm9kZUNvbXBpbGVyJztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi90eXBlcyc7XG5cbnR5cGUgQXNzaWdubWVudExpa2UgPSB0cy5TeW50YXhLaW5kLlBsdXNQbHVzVG9rZW4gfCB0cy5TeW50YXhLaW5kLk1pbnVzTWludXNUb2tlbjtcbmV4cG9ydCBjbGFzcyBQb3N0Zml4VW5hcnlFeHByZXNzaW9uQ29tcGlsZXIgZXh0ZW5kcyBOb2RlQ29tcGlsZXI8dHMuUG9zdGZpeFVuYXJ5RXhwcmVzc2lvbj4ge1xuICBwdWJsaWMgcmVhZG9ubHkga2luZCA9IHRzLlN5bnRheEtpbmQuUG9zdGZpeFVuYXJ5RXhwcmVzc2lvbjtcblxuICBwdWJsaWMgdmlzaXROb2RlKHNiOiBTY3JpcHRCdWlsZGVyLCBleHByOiB0cy5Qb3N0Zml4VW5hcnlFeHByZXNzaW9uLCBvcHRpb25zOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBzYi52aXNpdCh0c1V0aWxzLmV4cHJlc3Npb24uZ2V0T3BlcmFuZChleHByKSwgc2Iubm9TZXRWYWx1ZU9wdGlvbnMoc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zKSkpO1xuICAgIGNvbnN0IHRva2VuID0gdHNVdGlscy5leHByZXNzaW9uLmdldE9wZXJhdG9yKGV4cHIpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgdHMuU3ludGF4S2luZC5QbHVzUGx1c1Rva2VuOlxuICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLk1pbnVzTWludXNUb2tlbjpcbiAgICAgICAgdGhpcy52aXNpdEFzc2lnbm1lbnQoc2IsIHRva2VuLCBleHByLCBvcHRpb25zKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICB1dGlscy5hc3NlcnROZXZlcih0b2tlbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2aXNpdEFzc2lnbm1lbnQoXG4gICAgc2I6IFNjcmlwdEJ1aWxkZXIsXG4gICAgdG9rZW46IEFzc2lnbm1lbnRMaWtlLFxuICAgIGV4cHI6IHRzLlBvc3RmaXhVbmFyeUV4cHJlc3Npb24sXG4gICAgb3B0aW9uczogVmlzaXRPcHRpb25zLFxuICApOiB2b2lkIHtcbiAgICBpZiAob3B0aW9ucy5wdXNoVmFsdWUpIHtcbiAgICAgIHNiLmVtaXRPcChleHByLCAnRFVQJyk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLlBsdXNQbHVzVG9rZW46XG4gICAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgICAgZXhwcixcbiAgICAgICAgICBzYi5wdXNoVmFsdWVPcHRpb25zKG9wdGlvbnMpLFxuICAgICAgICAgIHNiLmhlbHBlcnMudG9OdW1iZXIoe1xuICAgICAgICAgICAgdHlwZTogc2IuY29udGV4dC5hbmFseXNpcy5nZXRUeXBlKGV4cHIpLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBzYi5lbWl0T3AoZXhwciwgJ0lOQycpO1xuICAgICAgICBzYi5lbWl0SGVscGVyKGV4cHIsIHNiLnB1c2hWYWx1ZU9wdGlvbnMob3B0aW9ucyksIHNiLmhlbHBlcnMud3JhcE51bWJlcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLk1pbnVzTWludXNUb2tlbjpcbiAgICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgICBleHByLFxuICAgICAgICAgIHNiLnB1c2hWYWx1ZU9wdGlvbnMob3B0aW9ucyksXG4gICAgICAgICAgc2IuaGVscGVycy50b051bWJlcih7XG4gICAgICAgICAgICB0eXBlOiBzYi5jb250ZXh0LmFuYWx5c2lzLmdldFR5cGUoZXhwciksXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIHNiLmVtaXRPcChleHByLCAnREVDJyk7XG4gICAgICAgIHNiLmVtaXRIZWxwZXIoZXhwciwgc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zKSwgc2IuaGVscGVycy53cmFwTnVtYmVyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICB1dGlscy5hc3NlcnROZXZlcih0b2tlbik7XG4gICAgfVxuXG4gICAgc2IudmlzaXQodHNVdGlscy5leHByZXNzaW9uLmdldE9wZXJhbmQoZXhwciksIHNiLm5vUHVzaFZhbHVlT3B0aW9ucyhzYi5zZXRWYWx1ZU9wdGlvbnMob3B0aW9ucykpKTtcbiAgfVxufVxuIl19