From 030c1594c4127f14cd762801ba877e94ac5868ec Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 13 Mar 2023 10:09:21 -0700 Subject: [PATCH] Use var in Debug namespace --- src/compiler/debug.ts | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/compiler/debug.ts b/src/compiler/debug.ts index 057323c788e00..d3b64e0e07183 100644 --- a/src/compiler/debug.ts +++ b/src/compiler/debug.ts @@ -110,12 +110,22 @@ export interface LoggingHost { /** @internal */ export namespace Debug { - /* eslint-disable prefer-const */ - let currentAssertionLevel = AssertionLevel.None; - export let currentLogLevel = LogLevel.Warning; - export let isDebugging = false; - export let loggingHost: LoggingHost | undefined; - /* eslint-enable prefer-const */ + // Why var? It avoids TDZ checks in the runtime which can be costly. + // See: https://github.com/microsoft/TypeScript/issues/52924 + // TODO(jakebailey): restore to let/const once Debug is no longer a namespace. + /* eslint-disable no-var */ + var currentAssertionLevel = AssertionLevel.None; + export var currentLogLevel = LogLevel.Warning; + export var isDebugging = false; + export var loggingHost: LoggingHost | undefined; + + var enumMemberCache = new Map>(); + + var isDebugInfoEnabled = false; + + var flowNodeProto: FlowNodeBase | undefined; + var nodeArrayProto: NodeArray | undefined; + /* eslint-enable no-var */ type AssertionKeys = MatchingKeys; @@ -408,7 +418,6 @@ export namespace Debug { return value.toString(); } - const enumMemberCache = new Map>(); function getEnumMembers(enumObject: any) { // Assuming enum objects do not change at runtime, we can cache the enum members list @@ -496,9 +505,7 @@ export namespace Debug { return formatEnum(facts, (ts as any).TypeFacts, /*isFlags*/ true); } - let isDebugInfoEnabled = false; - let flowNodeProto: FlowNodeBase | undefined; function attachFlowNodeDebugInfoWorker(flowNode: FlowNodeBase) { if (!("__debugFlowFlags" in flowNode)) { // eslint-disable-line local/no-in-operator @@ -547,8 +554,6 @@ export namespace Debug { } } - let nodeArrayProto: NodeArray | undefined; - function attachNodeArrayDebugInfoWorker(array: NodeArray) { if (!("__tsDebuggerDisplay" in array)) { // eslint-disable-line local/no-in-operator Object.defineProperties(array, {