UNPKG

decaffeinate-parser

Version:

A better AST for CoffeeScript, inspired by CoffeeScriptRedux.

40 lines (39 loc) 1.71 kB
import { AssignOp, BitAndOp, BitOrOp, BitXorOp, CompoundAssignOp, DivideOp, ExistsOp, ExpOp, FloorDivideOp, LeftShiftOp, LogicalAndOp, LogicalOrOp, ModuloOp, MultiplyOp, PlusOp, RemOp, SignedRightShiftOp, SubtractOp, UnsignedRightShiftOp } from '../nodes'; import getLocation from '../util/getLocation'; import UnsupportedNodeError from '../util/UnsupportedNodeError'; import mapAny from './mapAny'; var COMPOUND_ASSIGN_OPS = { '-=': SubtractOp.name, '+=': PlusOp.name, '/=': DivideOp.name, '*=': MultiplyOp.name, '%=': RemOp.name, '||=': LogicalOrOp.name, '&&=': LogicalAndOp.name, '?=': ExistsOp.name, '<<=': LeftShiftOp.name, '>>=': SignedRightShiftOp.name, '>>>=': UnsignedRightShiftOp.name, '&=': BitAndOp.name, '^=': BitXorOp.name, '|=': BitOrOp.name, '**=': ExpOp.name, '//=': FloorDivideOp.name, '%%=': ModuloOp.name }; export default function mapAssign(context, node) { if (node.context === 'object') { throw new UnsupportedNodeError(node, 'Unexpected object context when mapping regular assign op.'); } var _a = getLocation(context, node), line = _a.line, column = _a.column, start = _a.start, end = _a.end, raw = _a.raw; if (node.context) { var opName = COMPOUND_ASSIGN_OPS[node.context]; if (!opName) { throw new UnsupportedNodeError(node, 'Unexpected operator context for assign op.'); } return new CompoundAssignOp(line, column, start, end, raw, mapAny(context, node.variable), mapAny(context, node.value), opName); } else { return new AssignOp(line, column, start, end, raw, mapAny(context, node.variable), mapAny(context, node.value)); } }