You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.6 KiB
70 lines
2.6 KiB
/* Generated by `npm run build`, do not edit! */ |
|
|
|
"use strict" |
|
|
|
var acorn = require("acorn") |
|
var tt = acorn.tokTypes |
|
var privateClassElements = require("../private-class-elements") |
|
|
|
function maybeParseFieldValue(field) { |
|
if (this.eat(tt.eq)) { |
|
var oldInFieldValue = this._inFieldValue |
|
this._inFieldValue = true |
|
field.value = this.parseExpression() |
|
this._inFieldValue = oldInFieldValue |
|
} else { field.value = null } |
|
} |
|
|
|
module.exports = function(Parser) { |
|
Parser = privateClassElements(Parser) |
|
return /*@__PURE__*/(function (Parser) { |
|
function anonymous () { |
|
Parser.apply(this, arguments); |
|
} |
|
|
|
if ( Parser ) anonymous.__proto__ = Parser; |
|
anonymous.prototype = Object.create( Parser && Parser.prototype ); |
|
anonymous.prototype.constructor = anonymous; |
|
|
|
anonymous.prototype.parseClassElement = function parseClassElement (_constructorAllowsSuper) { |
|
if (this.options.ecmaVersion >= 8 && (this.type == tt.name || this.type == this.privateNameToken || this.type == tt.bracketL || this.type == tt.string)) { |
|
var branch = this._branch() |
|
if (branch.type == tt.bracketL) { |
|
var count = 0 |
|
do { |
|
if (branch.eat(tt.bracketL)) { ++count } |
|
else if (branch.eat(tt.bracketR)) { --count } |
|
else { branch.next() } |
|
} while (count > 0) |
|
} else { branch.next() } |
|
if (branch.type == tt.eq || branch.canInsertSemicolon() || branch.type == tt.semi) { |
|
var node = this.startNode() |
|
if (this.type == this.privateNameToken) { |
|
this.parsePrivateClassElementName(node) |
|
} else { |
|
this.parsePropertyName(node) |
|
} |
|
if ((node.key.type === "Identifier" && node.key.name === "constructor") || |
|
(node.key.type === "Literal" && node.key.value === "constructor")) { |
|
this.raise(node.key.start, "Classes may not have a field called constructor") |
|
} |
|
maybeParseFieldValue.call(this, node) |
|
this.finishNode(node, "FieldDefinition") |
|
this.semicolon() |
|
return node |
|
} |
|
} |
|
|
|
return Parser.prototype.parseClassElement.apply(this, arguments) |
|
}; |
|
|
|
// Prohibit arguments in class field initializers |
|
anonymous.prototype.parseIdent = function parseIdent (liberal, isBinding) { |
|
var ident = Parser.prototype.parseIdent.call(this, liberal, isBinding) |
|
if (this._inFieldValue && ident.name == "arguments") { this.raise(ident.start, "A class field initializer may not contain arguments") } |
|
return ident |
|
}; |
|
|
|
return anonymous; |
|
}(Parser)) |
|
}
|
|
|