decaffeinate-parser
Version:
A better AST for CoffeeScript, inspired by CoffeeScriptRedux.
43 lines (42 loc) • 1.81 kB
JavaScript
;
exports.__esModule = true;
var nodes_1 = require("../nodes");
var getLocation_1 = require("../util/getLocation");
var UnsupportedNodeError_1 = require("../util/UnsupportedNodeError");
var mapAny_1 = require("./mapAny");
var COMPOUND_ASSIGN_OPS = {
'-=': nodes_1.SubtractOp.name,
'+=': nodes_1.PlusOp.name,
'/=': nodes_1.DivideOp.name,
'*=': nodes_1.MultiplyOp.name,
'%=': nodes_1.RemOp.name,
'||=': nodes_1.LogicalOrOp.name,
'&&=': nodes_1.LogicalAndOp.name,
'?=': nodes_1.ExistsOp.name,
'<<=': nodes_1.LeftShiftOp.name,
'>>=': nodes_1.SignedRightShiftOp.name,
'>>>=': nodes_1.UnsignedRightShiftOp.name,
'&=': nodes_1.BitAndOp.name,
'^=': nodes_1.BitXorOp.name,
'|=': nodes_1.BitOrOp.name,
'**=': nodes_1.ExpOp.name,
'//=': nodes_1.FloorDivideOp.name,
'%%=': nodes_1.ModuloOp.name
};
function mapAssign(context, node) {
if (node.context === 'object') {
throw new UnsupportedNodeError_1["default"](node, 'Unexpected object context when mapping regular assign op.');
}
var _a = getLocation_1["default"](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_1["default"](node, 'Unexpected operator context for assign op.');
}
return new nodes_1.CompoundAssignOp(line, column, start, end, raw, mapAny_1["default"](context, node.variable), mapAny_1["default"](context, node.value), opName);
}
else {
return new nodes_1.AssignOp(line, column, start, end, raw, mapAny_1["default"](context, node.variable), mapAny_1["default"](context, node.value));
}
}
exports["default"] = mapAssign;