Skip to content

Commit dbf67ac

Browse files
committed
Cache optional call signatures
1 parent c7cd964 commit dbf67ac

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

src/compiler/checker.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8639,6 +8639,11 @@ namespace ts {
86398639
return result;
86408640
}
86418641

8642+
function getOptionalCallSignature(signature: Signature) {
8643+
return signatureIsOptionalCall(signature) ? signature :
8644+
(signature.optionalCallSignatureCache || (signature.optionalCallSignatureCache = createOptionalCallSignature(signature)));
8645+
}
8646+
86428647
function createOptionalCallSignature(signature: Signature) {
86438648
const result = cloneSignature(signature);
86448649
result.flags |= SignatureFlags.IsOptionalCall;
@@ -23238,7 +23243,7 @@ namespace ts {
2323823243
spliceIndex = index;
2323923244
}
2324023245

23241-
result.splice(spliceIndex, 0, isOptionalCall ? createOptionalCallSignature(signature) : signature);
23246+
result.splice(spliceIndex, 0, isOptionalCall ? getOptionalCallSignature(signature) : signature);
2324223247
}
2324323248
}
2324423249

src/compiler/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4696,6 +4696,8 @@ namespace ts {
46964696
/* @internal */
46974697
canonicalSignatureCache?: Signature; // Canonical version of signature (deferred)
46984698
/* @internal */
4699+
optionalCallSignatureCache?: Signature; // Optional chained call version of signature (deferred)
4700+
/* @internal */
46994701
isolatedSignatureType?: ObjectType; // A manufactured type that just contains the signature for purposes of signature comparison
47004702
/* @internal */
47014703
instantiations?: Map<Signature>; // Generic signature instantiation cache

0 commit comments

Comments
 (0)