decaffeinate-parser
Version:
A better AST for CoffeeScript, inspired by CoffeeScriptRedux.
40 lines (39 loc) • 1.71 kB
JavaScript
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));
}
}