1"use strict" 2 3const privateClassElements = require('internal/deps/acorn-plugins/acorn-private-class-elements/index') 4 5module.exports = function(Parser) { 6 const ExtendedParser = privateClassElements(Parser) 7 8 return class extends ExtendedParser { 9 // Parse private methods 10 parseClassElement(_constructorAllowsSuper) { 11 const oldInClassMemberName = this._inClassMemberName 12 this._inClassMemberName = true 13 const result = super.parseClassElement.apply(this, arguments) 14 this._inClassMemberName = oldInClassMemberName 15 return result 16 } 17 18 parsePropertyName(prop) { 19 const isPrivate = this.options.ecmaVersion >= 8 && this._inClassMemberName && this.type == this.privateNameToken 20 this._inClassMemberName = false 21 if (!isPrivate) return super.parsePropertyName(prop) 22 return this.parsePrivateClassElementName(prop) 23 } 24 } 25} 26