summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/readable-stream/node_modules/inline-process-browser/node_modules/falafel/node_modules/acorn/src/loose/parseutil.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/node_modules/readable-stream/node_modules/inline-process-browser/node_modules/falafel/node_modules/acorn/src/loose/parseutil.js')
-rw-r--r--deps/npm/node_modules/readable-stream/node_modules/inline-process-browser/node_modules/falafel/node_modules/acorn/src/loose/parseutil.js126
1 files changed, 126 insertions, 0 deletions
diff --git a/deps/npm/node_modules/readable-stream/node_modules/inline-process-browser/node_modules/falafel/node_modules/acorn/src/loose/parseutil.js b/deps/npm/node_modules/readable-stream/node_modules/inline-process-browser/node_modules/falafel/node_modules/acorn/src/loose/parseutil.js
new file mode 100644
index 0000000000..3e2c80418f
--- /dev/null
+++ b/deps/npm/node_modules/readable-stream/node_modules/inline-process-browser/node_modules/falafel/node_modules/acorn/src/loose/parseutil.js
@@ -0,0 +1,126 @@
+import {LooseParser} from "./state"
+import {Node, SourceLocation, lineBreak, isNewLine, tokTypes as tt} from ".."
+
+const lp = LooseParser.prototype
+
+lp.startNode = function() {
+ let node = new Node
+ node.start = this.tok.start
+ if (this.options.locations)
+ node.loc = new SourceLocation(this.toks, this.tok.loc.start)
+ if (this.options.directSourceFile)
+ node.sourceFile = this.options.directSourceFile
+ if (this.options.ranges)
+ node.range = [this.tok.start, 0]
+ return node
+}
+
+lp.storeCurrentPos = function() {
+ return this.options.locations ? [this.tok.start, this.tok.loc.start] : this.tok.start
+}
+
+lp.startNodeAt = function(pos) {
+ let node = new Node
+ if (this.options.locations) {
+ node.start = pos[0]
+ node.loc = new SourceLocation(this.toks, pos[1])
+ pos = pos[0]
+ } else {
+ node.start = pos
+ }
+ if (this.options.directSourceFile)
+ node.sourceFile = this.options.directSourceFile
+ if (this.options.ranges)
+ node.range = [pos, 0]
+ return node
+}
+
+lp.finishNode = function(node, type) {
+ node.type = type
+ node.end = this.last.end
+ if (this.options.locations)
+ node.loc.end = this.last.loc.end
+ if (this.options.ranges)
+ node.range[1] = this.last.end
+ return node
+}
+
+lp.dummyIdent = function() {
+ let dummy = this.startNode()
+ dummy.name = "✖"
+ return this.finishNode(dummy, "Identifier")
+}
+
+export function isDummy(node) { return node.name == "✖" }
+
+lp.eat = function(type) {
+ if (this.tok.type === type) {
+ this.next()
+ return true
+ } else {
+ return false
+ }
+}
+
+lp.isContextual = function(name) {
+ return this.tok.type === tt.name && this.tok.value === name
+}
+
+lp.eatContextual = function(name) {
+ return this.tok.value === name && this.eat(tt.name)
+}
+
+lp.canInsertSemicolon = function() {
+ return this.tok.type === tt.eof || this.tok.type === tt.braceR ||
+ lineBreak.test(this.input.slice(this.last.end, this.tok.start))
+}
+
+lp.semicolon = function() {
+ return this.eat(tt.semi)
+}
+
+lp.expect = function(type) {
+ if (this.eat(type)) return true
+ for (let i = 1; i <= 2; i++) {
+ if (this.lookAhead(i).type == type) {
+ for (let j = 0; j < i; j++) this.next()
+ return true
+ }
+ }
+}
+
+lp.pushCx = function() {
+ this.context.push(this.curIndent)
+}
+lp.popCx = function() {
+ this.curIndent = this.context.pop()
+}
+
+lp.lineEnd = function(pos) {
+ while (pos < this.input.length && !isNewLine(this.input.charCodeAt(pos))) ++pos
+ return pos
+}
+
+lp.indentationAfter = function(pos) {
+ for (let count = 0;; ++pos) {
+ let ch = this.input.charCodeAt(pos)
+ if (ch === 32) ++count
+ else if (ch === 9) count += this.options.tabSize
+ else return count
+ }
+}
+
+lp.closes = function(closeTok, indent, line, blockHeuristic) {
+ if (this.tok.type === closeTok || this.tok.type === tt.eof) return true
+ return line != this.curLineStart && this.curIndent < indent && this.tokenStartsLine() &&
+ (!blockHeuristic || this.nextLineStart >= this.input.length ||
+ this.indentationAfter(this.nextLineStart) < indent)
+}
+
+lp.tokenStartsLine = function() {
+ for (let p = this.tok.start - 1; p >= this.curLineStart; --p) {
+ let ch = this.input.charCodeAt(p)
+ if (ch !== 9 && ch !== 32) return false
+ }
+ return true
+}