decaffeinate-parser
Version:
A better AST for CoffeeScript, inspired by CoffeeScriptRedux.
37 lines (36 loc) • 1.27 kB
JavaScript
import { AsyncFunction, BoundAsyncFunction, BoundFunction, BoundGeneratorFunction, Function, GeneratorFunction } from '../nodes';
import getLocation from '../util/getLocation';
import mapAny from './mapAny';
import mapPossiblyEmptyBlock from './mapPossiblyEmptyBlock';
export default function mapCode(context, node) {
var _a = getLocation(context, node), line = _a.line, column = _a.column, start = _a.start, end = _a.end, raw = _a.raw;
var Node = getNodeTypeForCode(node);
var childContext = context.updateState(function (s) { return s.dropCurrentClass(); });
return new Node(line, column, start, end, raw, node.params.map(function (param) { return mapAny(childContext, param); }), mapPossiblyEmptyBlock(childContext, node.body));
}
function getNodeTypeForCode(node) {
if (node.isGenerator) {
if (node.bound) {
return BoundGeneratorFunction;
}
else {
return GeneratorFunction;
}
}
else if (node.isAsync) {
if (node.bound) {
return BoundAsyncFunction;
}
else {
return AsyncFunction;
}
}
else {
if (node.bound) {
return BoundFunction;
}
else {
return Function;
}
}
}