Merge pull request #16332 from Snuffleupagus/rm-primitives-closures

Remove the remaining unnecessary closures in the `src/core/primitives.js` file
This commit is contained in:
Jonas Jenwald 2023-04-22 15:55:10 +02:00 committed by GitHub
commit 6e1b234c6b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -18,10 +18,16 @@ import { assert, shadow, unreachable } from "../shared/util.js";
const CIRCULAR_REF = Symbol("CIRCULAR_REF"); const CIRCULAR_REF = Symbol("CIRCULAR_REF");
const EOF = Symbol("EOF"); const EOF = Symbol("EOF");
const Name = (function NameClosure() { let CmdCache = Object.create(null);
let nameCache = Object.create(null); let NameCache = Object.create(null);
let RefCache = Object.create(null);
function clearPrimitiveCaches() {
CmdCache = Object.create(null);
NameCache = Object.create(null);
RefCache = Object.create(null);
}
// eslint-disable-next-line no-shadow
class Name { class Name {
constructor(name) { constructor(name) {
if ( if (
@ -35,21 +41,10 @@ const Name = (function NameClosure() {
static get(name) { static get(name) {
// eslint-disable-next-line no-restricted-syntax // eslint-disable-next-line no-restricted-syntax
return nameCache[name] || (nameCache[name] = new Name(name)); return NameCache[name] || (NameCache[name] = new Name(name));
}
static _clearCache() {
nameCache = Object.create(null);
} }
} }
return Name;
})();
const Cmd = (function CmdClosure() {
let cmdCache = Object.create(null);
// eslint-disable-next-line no-shadow
class Cmd { class Cmd {
constructor(cmd) { constructor(cmd) {
if ( if (
@ -63,17 +58,10 @@ const Cmd = (function CmdClosure() {
static get(cmd) { static get(cmd) {
// eslint-disable-next-line no-restricted-syntax // eslint-disable-next-line no-restricted-syntax
return cmdCache[cmd] || (cmdCache[cmd] = new Cmd(cmd)); return CmdCache[cmd] || (CmdCache[cmd] = new Cmd(cmd));
}
static _clearCache() {
cmdCache = Object.create(null);
} }
} }
return Cmd;
})();
const nonSerializable = function nonSerializableClosure() { const nonSerializable = function nonSerializableClosure() {
return nonSerializable; // Creating closure on some variable. return nonSerializable; // Creating closure on some variable.
}; };
@ -276,10 +264,6 @@ class Dict {
} }
} }
const Ref = (function RefClosure() {
let refCache = Object.create(null);
// eslint-disable-next-line no-shadow
class Ref { class Ref {
constructor(num, gen) { constructor(num, gen) {
this.num = num; this.num = num;
@ -298,17 +282,10 @@ const Ref = (function RefClosure() {
static get(num, gen) { static get(num, gen) {
const key = gen === 0 ? `${num}R` : `${num}R${gen}`; const key = gen === 0 ? `${num}R` : `${num}R${gen}`;
// eslint-disable-next-line no-restricted-syntax // eslint-disable-next-line no-restricted-syntax
return refCache[key] || (refCache[key] = new Ref(num, gen)); return RefCache[key] || (RefCache[key] = new Ref(num, gen));
}
static _clearCache() {
refCache = Object.create(null);
} }
} }
return Ref;
})();
// The reference is identified by number and generation. // The reference is identified by number and generation.
// This structure stores only one instance of the reference. // This structure stores only one instance of the reference.
class RefSet { class RefSet {
@ -402,12 +379,6 @@ function isRefsEqual(v1, v2) {
return v1.num === v2.num && v1.gen === v2.gen; return v1.num === v2.num && v1.gen === v2.gen;
} }
function clearPrimitiveCaches() {
Cmd._clearCache();
Name._clearCache();
Ref._clearCache();
}
export { export {
CIRCULAR_REF, CIRCULAR_REF,
clearPrimitiveCaches, clearPrimitiveCaches,