mirror of
https://github.com/crazy-max/ghaction-upx.git
synced 2024-11-23 02:46:09 -07:00
101 lines
2.6 KiB
JavaScript
101 lines
2.6 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = exports.ClassScope = void 0;
|
|
|
|
var _scopeflags = require("./scopeflags");
|
|
|
|
class ClassScope {
|
|
constructor() {
|
|
this.privateNames = new Set();
|
|
this.loneAccessors = new Map();
|
|
this.undefinedPrivateNames = new Map();
|
|
}
|
|
|
|
}
|
|
|
|
exports.ClassScope = ClassScope;
|
|
|
|
class ClassScopeHandler {
|
|
constructor(raise) {
|
|
this.stack = [];
|
|
this.undefinedPrivateNames = new Map();
|
|
this.raise = raise;
|
|
}
|
|
|
|
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 (let _i = 0, _Array$from = Array.from(oldClassScope.undefinedPrivateNames); _i < _Array$from.length; _i++) {
|
|
const [name, pos] = _Array$from[_i];
|
|
|
|
if (current) {
|
|
if (!current.undefinedPrivateNames.has(name)) {
|
|
current.undefinedPrivateNames.set(name, pos);
|
|
}
|
|
} else {
|
|
this.raiseUndeclaredPrivateName(name, pos);
|
|
}
|
|
}
|
|
}
|
|
|
|
declarePrivateName(name, elementType, pos) {
|
|
const classScope = this.current();
|
|
let redefined = classScope.privateNames.has(name);
|
|
|
|
if (elementType & _scopeflags.CLASS_ELEMENT_KIND_ACCESSOR) {
|
|
const accessor = redefined && classScope.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) classScope.loneAccessors.delete(name);
|
|
} else if (!redefined) {
|
|
classScope.loneAccessors.set(name, elementType);
|
|
}
|
|
}
|
|
|
|
if (redefined) {
|
|
this.raise(pos, `Duplicate private name #${name}`);
|
|
}
|
|
|
|
classScope.privateNames.add(name);
|
|
classScope.undefinedPrivateNames.delete(name);
|
|
}
|
|
|
|
usePrivateName(name, pos) {
|
|
let classScope;
|
|
|
|
for (let _i2 = 0, _this$stack = this.stack; _i2 < _this$stack.length; _i2++) {
|
|
classScope = _this$stack[_i2];
|
|
if (classScope.privateNames.has(name)) return;
|
|
}
|
|
|
|
if (classScope) {
|
|
classScope.undefinedPrivateNames.set(name, pos);
|
|
} else {
|
|
this.raiseUndeclaredPrivateName(name, pos);
|
|
}
|
|
}
|
|
|
|
raiseUndeclaredPrivateName(name, pos) {
|
|
this.raise(pos, `Private name #${name} is not defined`);
|
|
}
|
|
|
|
}
|
|
|
|
exports.default = ClassScopeHandler; |