UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

53 lines (51 loc) 8.06 kB
"use strict"; 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