Skip to content

Commit 030c159

Browse files
committed
Use var in Debug namespace
1 parent 2516583 commit 030c159

File tree

1 file changed

+16
-11
lines changed

1 file changed

+16
-11
lines changed

src/compiler/debug.ts

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -110,12 +110,22 @@ export interface LoggingHost {
110110

111111
/** @internal */
112112
export namespace Debug {
113-
/* eslint-disable prefer-const */
114-
let currentAssertionLevel = AssertionLevel.None;
115-
export let currentLogLevel = LogLevel.Warning;
116-
export let isDebugging = false;
117-
export let loggingHost: LoggingHost | undefined;
118-
/* eslint-enable prefer-const */
113+
// Why var? It avoids TDZ checks in the runtime which can be costly.
114+
// See: https://github.com/microsoft/TypeScript/issues/52924
115+
// TODO(jakebailey): restore to let/const once Debug is no longer a namespace.
116+
/* eslint-disable no-var */
117+
var currentAssertionLevel = AssertionLevel.None;
118+
export var currentLogLevel = LogLevel.Warning;
119+
export var isDebugging = false;
120+
export var loggingHost: LoggingHost | undefined;
121+
122+
var enumMemberCache = new Map<any, SortedReadonlyArray<[number, string]>>();
123+
124+
var isDebugInfoEnabled = false;
125+
126+
var flowNodeProto: FlowNodeBase | undefined;
127+
var nodeArrayProto: NodeArray<Node> | undefined;
128+
/* eslint-enable no-var */
119129

120130
type AssertionKeys = MatchingKeys<typeof Debug, AnyFunction>;
121131

@@ -408,7 +418,6 @@ export namespace Debug {
408418
return value.toString();
409419
}
410420

411-
const enumMemberCache = new Map<any, SortedReadonlyArray<[number, string]>>();
412421

413422
function getEnumMembers(enumObject: any) {
414423
// Assuming enum objects do not change at runtime, we can cache the enum members list
@@ -496,9 +505,7 @@ export namespace Debug {
496505
return formatEnum(facts, (ts as any).TypeFacts, /*isFlags*/ true);
497506
}
498507

499-
let isDebugInfoEnabled = false;
500508

501-
let flowNodeProto: FlowNodeBase | undefined;
502509

503510
function attachFlowNodeDebugInfoWorker(flowNode: FlowNodeBase) {
504511
if (!("__debugFlowFlags" in flowNode)) { // eslint-disable-line local/no-in-operator
@@ -547,8 +554,6 @@ export namespace Debug {
547554
}
548555
}
549556

550-
let nodeArrayProto: NodeArray<Node> | undefined;
551-
552557
function attachNodeArrayDebugInfoWorker(array: NodeArray<Node>) {
553558
if (!("__tsDebuggerDisplay" in array)) { // eslint-disable-line local/no-in-operator
554559
Object.defineProperties(array, {

0 commit comments

Comments
 (0)