Skip to content

Commit ce609c8

Browse files
authored
Batch allocations of common checker types (#64793)
1 parent f3a9375 commit ce609c8

1 file changed

Lines changed: 20 additions & 10 deletions

File tree

‎tsc/internal/checker/checker.go‎

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -673,6 +673,16 @@ type Checker struct {
673673
symbolWithDataArena core.Arena[ast.SymbolWithData]
674674
signatureArena core.Arena[Signature]
675675
indexInfoArena core.Arena[IndexInfo]
676+
literalTypeArena core.Arena[LiteralType]
677+
objectTypeArena core.Arena[ObjectType]
678+
typeReferenceArena core.Arena[TypeReference]
679+
interfaceTypeArena core.Arena[InterfaceType]
680+
mappedTypeArena core.Arena[MappedType]
681+
unionTypeArena core.Arena[UnionType]
682+
intersectionTypeArena core.Arena[IntersectionType]
683+
typeParameterArena core.Arena[TypeParameter]
684+
indexedAccessTypeArena core.Arena[IndexedAccessType]
685+
conditionalTypeArena core.Arena[ConditionalType]
676686
mergedSymbols map[*ast.Symbol]*ast.Symbol
677687
mergedExportsChecked collections.Set[*ast.Symbol]
678688
factory ast.NodeFactory
@@ -25599,7 +25609,7 @@ func (c *Checker) createUnknownUnionType() *Type {
2559925609
}
2560025610

2560125611
func (c *Checker) newLiteralType(flags TypeFlags, value any, regularType *Type) *Type {
25602-
data := &LiteralType{}
25612+
data := c.literalTypeArena.New()
2560325613
data.value = value
2560425614
t := c.newType(flags, ObjectFlagsNone, data.AsType(), typeKindLiteral)
2560525615
if regularType != nil {
@@ -25623,16 +25633,16 @@ func (c *Checker) newObjectType(objectFlags ObjectFlags, symbol *ast.Symbol) *Ty
2562325633
var kind typeKind
2562425634
switch {
2562525635
case objectFlags&ObjectFlagsClassOrInterface != 0:
25626-
t = (&InterfaceType{}).AsType()
25636+
t = c.interfaceTypeArena.New().AsType()
2562725637
kind = typeKindInterface
2562825638
case objectFlags&ObjectFlagsTuple != 0:
2562925639
t = (&TupleType{}).AsType()
2563025640
kind = typeKindTuple
2563125641
case objectFlags&ObjectFlagsReference != 0:
25632-
t = (&TypeReference{}).AsType()
25642+
t = c.typeReferenceArena.New().AsType()
2563325643
kind = typeKindTypeReference
2563425644
case objectFlags&ObjectFlagsMapped != 0:
25635-
t = (&MappedType{}).AsType()
25645+
t = c.mappedTypeArena.New().AsType()
2563625646
kind = typeKindMapped
2563725647
case objectFlags&ObjectFlagsReverseMapped != 0:
2563825648
t = (&ReverseMappedType{}).AsType()
@@ -25644,7 +25654,7 @@ func (c *Checker) newObjectType(objectFlags ObjectFlags, symbol *ast.Symbol) *Ty
2564425654
t = (&InstantiationExpressionType{}).AsType()
2564525655
kind = typeKindInstantiationExpression
2564625656
case objectFlags&ObjectFlagsAnonymous != 0:
25647-
t = (&ObjectType{}).AsType()
25657+
t = c.objectTypeArena.New().AsType()
2564825658
kind = typeKindObject
2564925659
default:
2565025660
panic("Unhandled case in newObjectType")
@@ -25733,7 +25743,7 @@ func (c *Checker) setStructuredTypeMembers(t *Type, members ast.SymbolTable, cal
2573325743
}
2573425744

2573525745
func (c *Checker) newTypeParameter(symbol *ast.Symbol) *Type {
25736-
t := c.newType(TypeFlagsTypeParameter, ObjectFlagsNone, (&TypeParameter{}).AsType(), typeKindTypeParameter)
25746+
t := c.newType(TypeFlagsTypeParameter, ObjectFlagsNone, c.typeParameterArena.New().AsType(), typeKindTypeParameter)
2573725747
t.symbol = symbol
2573825748
return t
2573925749
}
@@ -25753,19 +25763,19 @@ func (c *Checker) getPropagatingFlagsOfTypes(types []*Type, excludeKinds TypeFla
2575325763
}
2575425764

2575525765
func (c *Checker) newUnionType(objectFlags ObjectFlags, types []*Type) *Type {
25756-
data := &UnionType{}
25766+
data := c.unionTypeArena.New()
2575725767
data.types = types
2575825768
return c.newType(TypeFlagsUnion, objectFlags, data.AsType(), typeKindUnion)
2575925769
}
2576025770

2576125771
func (c *Checker) newIntersectionType(objectFlags ObjectFlags, types []*Type) *Type {
25762-
data := &IntersectionType{}
25772+
data := c.intersectionTypeArena.New()
2576325773
data.types = types
2576425774
return c.newType(TypeFlagsIntersection, objectFlags, data.AsType(), typeKindIntersection)
2576525775
}
2576625776

2576725777
func (c *Checker) newIndexedAccessType(objectType *Type, indexType *Type, accessFlags AccessFlags) *Type {
25768-
data := &IndexedAccessType{}
25778+
data := c.indexedAccessTypeArena.New()
2576925779
data.objectType = objectType
2577025780
data.indexType = indexType
2577125781
data.accessFlags = accessFlags
@@ -25795,7 +25805,7 @@ func (c *Checker) newStringMappingType(symbol *ast.Symbol, target *Type) *Type {
2579525805
}
2579625806

2579725807
func (c *Checker) newConditionalType(root *ConditionalRoot, mapper *TypeMapper, combinedMapper *TypeMapper) *Type {
25798-
data := &ConditionalType{}
25808+
data := c.conditionalTypeArena.New()
2579925809
data.root = root
2580025810
data.checkType = c.instantiateType(root.checkType, mapper)
2580125811
data.extendsType = c.instantiateType(root.extendsType, mapper)

0 commit comments

Comments
 (0)