12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- import {Parser} from "./state"
- import {SourceLocation} from "./location"
- // Start an AST node, attaching a start offset.
- const pp = Parser.prototype
- export class Node {}
- pp.startNode = function() {
- let node = new Node
- node.start = this.start
- if (this.options.locations)
- node.loc = new SourceLocation(this, this.startLoc)
- if (this.options.directSourceFile)
- node.sourceFile = this.options.directSourceFile
- if (this.options.ranges)
- node.range = [this.start, 0]
- return node
- }
- pp.startNodeAt = function(pos, loc) {
- let node = new Node
- if (Array.isArray(pos)){
- if (this.options.locations && loc === undefined) {
- // flatten pos
- loc = pos[1]
- pos = pos[0]
- }
- }
- node.start = pos
- if (this.options.locations)
- node.loc = new SourceLocation(this, loc)
- if (this.options.directSourceFile)
- node.sourceFile = this.options.directSourceFile
- if (this.options.ranges)
- node.range = [pos, 0]
- return node
- }
- // Finish an AST node, adding `type` and `end` properties.
- pp.finishNode = function(node, type) {
- node.type = type
- node.end = this.lastTokEnd
- if (this.options.locations)
- node.loc.end = this.lastTokEndLoc
- if (this.options.ranges)
- node.range[1] = this.lastTokEnd
- return node
- }
- // Finish node at given position
- pp.finishNodeAt = function(node, type, pos, loc) {
- node.type = type
- if (Array.isArray(pos)){
- if (this.options.locations && loc === undefined) {
- // flatten pos
- loc = pos[1]
- pos = pos[0]
- }
- }
- node.end = pos
- if (this.options.locations)
- node.loc.end = loc
- if (this.options.ranges)
- node.range[1] = pos
- return node
- }
|