UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

49 lines (47 loc) 1.97 kB
import { tsUtils } from '@neo-one/ts-utils'; import { utils } from '@neo-one/utils'; import ts from 'typescript'; import { NodeCompiler } from '../NodeCompiler'; export class PostfixUnaryExpressionCompiler extends NodeCompiler { constructor() { super(...arguments); this.kind = ts.SyntaxKind.PostfixUnaryExpression; } visitNode(sb, expr, options) { sb.visit(tsUtils.expression.getOperand(expr), sb.noSetValueOptions(sb.pushValueOptions(options))); const token = tsUtils.expression.getOperator(expr); switch (token) { case ts.SyntaxKind.PlusPlusToken: case ts.SyntaxKind.MinusMinusToken: this.visitAssignment(sb, token, expr, options); break; default: utils.assertNever(token); } } visitAssignment(sb, token, expr, options) { if (options.pushValue) { sb.emitOp(expr, 'DUP'); } switch (token) { case ts.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 ts.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.assertNever(token); } sb.visit(tsUtils.expression.getOperand(expr), sb.noPushValueOptions(sb.setValueOptions(options))); } } //# sourceMappingURL=PostfixUnaryExpressionCompiler.js.map