123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = exports.ClassScope = void 0;
- var _scopeflags = require("./scopeflags");
- var _parseError = require("../parse-error");
- class ClassScope {
- constructor() {
- this.privateNames = new Set();
- this.loneAccessors = new Map();
- this.undefinedPrivateNames = new Map();
- }
- }
- exports.ClassScope = ClassScope;
- class ClassScopeHandler {
- constructor(parser) {
- this.parser = void 0;
- this.stack = [];
- this.undefinedPrivateNames = new Map();
- this.parser = parser;
- }
- current() {
- return this.stack[this.stack.length - 1];
- }
- enter() {
- this.stack.push(new ClassScope());
- }
- exit() {
- const oldClassScope = this.stack.pop();
- const current = this.current();
- for (const [name, loc] of Array.from(oldClassScope.undefinedPrivateNames)) {
- if (current) {
- if (!current.undefinedPrivateNames.has(name)) {
- current.undefinedPrivateNames.set(name, loc);
- }
- } else {
- this.parser.raise(_parseError.Errors.InvalidPrivateFieldResolution, {
- at: loc,
- identifierName: name
- });
- }
- }
- }
- declarePrivateName(name, elementType, loc) {
- const {
- privateNames,
- loneAccessors,
- undefinedPrivateNames
- } = this.current();
- let redefined = privateNames.has(name);
- if (elementType & _scopeflags.CLASS_ELEMENT_KIND_ACCESSOR) {
- const accessor = redefined && loneAccessors.get(name);
- if (accessor) {
- const oldStatic = accessor & _scopeflags.CLASS_ELEMENT_FLAG_STATIC;
- const newStatic = elementType & _scopeflags.CLASS_ELEMENT_FLAG_STATIC;
- const oldKind = accessor & _scopeflags.CLASS_ELEMENT_KIND_ACCESSOR;
- const newKind = elementType & _scopeflags.CLASS_ELEMENT_KIND_ACCESSOR;
- redefined = oldKind === newKind || oldStatic !== newStatic;
- if (!redefined) loneAccessors.delete(name);
- } else if (!redefined) {
- loneAccessors.set(name, elementType);
- }
- }
- if (redefined) {
- this.parser.raise(_parseError.Errors.PrivateNameRedeclaration, {
- at: loc,
- identifierName: name
- });
- }
- privateNames.add(name);
- undefinedPrivateNames.delete(name);
- }
- usePrivateName(name, loc) {
- let classScope;
- for (classScope of this.stack) {
- if (classScope.privateNames.has(name)) return;
- }
- if (classScope) {
- classScope.undefinedPrivateNames.set(name, loc);
- } else {
- this.parser.raise(_parseError.Errors.InvalidPrivateFieldResolution, {
- at: loc,
- identifierName: name
- });
- }
- }
- }
- exports.default = ClassScopeHandler;
- //# sourceMappingURL=class-scope.js.map
|