mirror of
https://github.com/tiennm99/MTTools.git
synced 2026-10-14 10:18:57 +00:00
Init
This commit is contained in:
1 parent
b5c881f56f
commit
6ba2247509
4280 files changed
+484929
No files matched your search
+101
@@ -0,0 +1,101 @@
|
||||
"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;
|
||||
Reference in new issue
Block a user