@@ -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
2560125611func (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
2573525745func (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
2575525765func (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
2576125771func (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
2576725777func (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
2579725807func (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