89 lines
2.2 KiB
JavaScript
89 lines
2.2 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.NodeUtils = void 0;
|
|
|
|
var _util = _interopRequireDefault(require("./util"));
|
|
|
|
var _location = require("../util/location");
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
class Node {
|
|
constructor(parser, pos, loc) {
|
|
this.type = "";
|
|
this.start = pos;
|
|
this.end = 0;
|
|
this.loc = new _location.SourceLocation(loc);
|
|
if (parser && parser.options.ranges) this.range = [pos, 0];
|
|
if (parser && parser.filename) this.loc.filename = parser.filename;
|
|
}
|
|
|
|
__clone() {
|
|
const newNode = new Node();
|
|
const keys = Object.keys(this);
|
|
|
|
for (let i = 0, length = keys.length; i < length; i++) {
|
|
const key = keys[i];
|
|
|
|
if (key !== "leadingComments" && key !== "trailingComments" && key !== "innerComments") {
|
|
newNode[key] = this[key];
|
|
}
|
|
}
|
|
|
|
return newNode;
|
|
}
|
|
|
|
}
|
|
|
|
class NodeUtils extends _util.default {
|
|
startNode() {
|
|
return new Node(this, this.state.start, this.state.startLoc);
|
|
}
|
|
|
|
startNodeAt(pos, loc) {
|
|
return new Node(this, pos, loc);
|
|
}
|
|
|
|
startNodeAtNode(type) {
|
|
return this.startNodeAt(type.start, type.loc.start);
|
|
}
|
|
|
|
finishNode(node, type) {
|
|
return this.finishNodeAt(node, type, this.state.lastTokEnd, this.state.lastTokEndLoc);
|
|
}
|
|
|
|
finishNodeAt(node, type, pos, loc) {
|
|
if (process.env.NODE_ENV !== "production" && node.end > 0) {
|
|
throw new Error("Do not call finishNode*() twice on the same node." + " Instead use resetEndLocation() or change type directly.");
|
|
}
|
|
|
|
node.type = type;
|
|
node.end = pos;
|
|
node.loc.end = loc;
|
|
if (this.options.ranges) node.range[1] = pos;
|
|
this.processComment(node);
|
|
return node;
|
|
}
|
|
|
|
resetStartLocation(node, start, startLoc) {
|
|
node.start = start;
|
|
node.loc.start = startLoc;
|
|
if (this.options.ranges) node.range[0] = start;
|
|
}
|
|
|
|
resetEndLocation(node, end = this.state.lastTokEnd, endLoc = this.state.lastTokEndLoc) {
|
|
node.end = end;
|
|
node.loc.end = endLoc;
|
|
if (this.options.ranges) node.range[1] = end;
|
|
}
|
|
|
|
resetStartLocationFromNode(node, locationNode) {
|
|
this.resetStartLocation(node, locationNode.start, locationNode.loc.start);
|
|
}
|
|
|
|
}
|
|
|
|
exports.NodeUtils = NodeUtils; |