"use strict"; var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }; exports.__esModule = true; var Parser = require("./state").Parser; var SourceLocation = require("./location").SourceLocation; // Start an AST node, attaching a start offset. var pp = Parser.prototype; var Node = exports.Node = function Node() { _classCallCheck(this, Node); }; pp.startNode = function () { var 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) { var node = new Node(), start = pos; if (this.options.locations) { node.loc = new SourceLocation(this, start[1]); start = pos[0]; } node.start = start; if (this.options.directSourceFile) node.sourceFile = this.options.directSourceFile; if (this.options.ranges) node.range = [start, 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) { if (this.options.locations) { node.loc.end = pos[1];pos = pos[0]; } node.type = type; node.end = pos; if (this.options.ranges) node.range[1] = pos; return node; };