Repository navigation
Index checker members without redundant symbol maps - #64781
Draft
Jake Bailey (jakebailey) wants to merge 1 commit into
Draft
Jake Bailey (jakebailey) wants to merge 1 commit into
Jake Bailey (jakebailey) wants to merge 1 commit into
Conversation
Jake Bailey (jakebailey)
added this pull request to stack #64792
October 13, 2026 17:37
Jake Bailey (jakebailey)
marked this pull request as ready for review
October 13, 2026 17:42
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Two fast paths can drop alternate map keys when one symbol appears under both canonical and mismatched names.
2 open findings
What changed in this PR
Optimizes checker member lookup by replacing redundant symbol maps with compact integer indexes while retaining fallback map semantics.
Changes:
- Adds compact property indexing and lookup helpers.
- Updates checker consumers to use the new representation.
- Adds lookup, fallback, and GC tests.
| File | Description |
|---|---|
tsc/internal/checker/types.go |
Implements member indexes and lookup helpers. |
tsc/internal/checker/types_test.go |
Tests member lookup behavior. |
tsc/internal/checker/services.go |
Iterates indexed or fallback members. |
tsc/internal/checker/nodebuilderimpl.go |
Materializes member tables when copying types. |
tsc/internal/checker/checker.go |
Integrates indexes into resolution and instantiation. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.
Jake Bailey (jakebailey)
marked this pull request as draft
October 13, 2026 19:40
Jake Bailey (jakebailey)
force-pushed
the
jakebailey/mem/cold-value-symbol-links
branch
from
October 13, 2026 20:06
0b88a7d to
744eb18
Compare
Jake Bailey (jakebailey)
force-pushed
the
jakebailey/mem/compact-member-indexes
branch
from
October 13, 2026 20:06
7f33389 to
5aa1029
Compare
Base automatically changed from
jakebailey/mem/cold-value-symbol-links
to
jakebailey/mem/compressed-link-stores
October 13, 2026 20:06
Jake Bailey (jakebailey)
removed this pull request from stack #64792
October 13, 2026 20:15
Jake Bailey (jakebailey)
added this pull request to stack #64805
October 13, 2026 20:16
Jake Bailey (jakebailey)
removed this pull request from stack #64805
October 13, 2026 20:49
Jake Bailey (jakebailey)
force-pushed
the
jakebailey/mem/compact-member-indexes
branch
from
October 13, 2026 20:50
5aa1029 to
621e8f2
Compare
Jake Bailey (jakebailey)
force-pushed
the
jakebailey/mem/compressed-link-stores
branch
from
October 13, 2026 20:50
9fde01f to
bce1b47
Compare
Jake Bailey (jakebailey)
added this pull request to stack #64806
October 13, 2026 20:50
Jake Bailey (jakebailey)
force-pushed
the
jakebailey/mem/compressed-link-stores
branch
from
October 13, 2026 21:39
bce1b47 to
83bb2cc
Compare
Jake Bailey (jakebailey)
force-pushed
the
jakebailey/mem/compact-member-indexes
branch
from
October 13, 2026 21:39
621e8f2 to
0f3d124
Compare
Jake Bailey (jakebailey)
force-pushed
the
jakebailey/mem/compressed-link-stores
branch
from
October 13, 2026 22:00
83bb2cc to
3221a4d
Compare
Jake Bailey (jakebailey)
force-pushed
the
jakebailey/mem/compact-member-indexes
branch
2 times, most recently
from
October 13, 2026 22:25
11f0df8 to
48d2bb2
Compare
Jake Bailey (jakebailey)
force-pushed
the
jakebailey/mem/compressed-link-stores
branch
from
October 13, 2026 22:25
3221a4d to
01cd361
Compare
Jake Bailey (jakebailey)
force-pushed
the
jakebailey/mem/compact-member-indexes
branch
from
October 13, 2026 23:08
48d2bb2 to
f2431d1
Compare
Jake Bailey (jakebailey)
force-pushed
the
jakebailey/mem/compressed-link-stores
branch
from
October 13, 2026 23:08
01cd361 to
73a37ea
Compare
Jake Bailey (jakebailey)
force-pushed
the
jakebailey/mem/compact-member-indexes
branch
from
October 13, 2026 23:16
f2431d1 to
d1038c7
Compare
Jake Bailey (jakebailey)
force-pushed
the
jakebailey/mem/compressed-link-stores
branch
from
October 13, 2026 23:16
73a37ea to
229d141
Compare
Jake Bailey (jakebailey)
force-pushed
the
jakebailey/mem/compact-member-indexes
branch
3 times, most recently
from
October 14, 2026 02:23
bf46f3e to
c4938e8
Compare
Jake Bailey (jakebailey)
force-pushed
the
jakebailey/mem/compressed-link-stores
branch
2 times, most recently
from
October 14, 2026 02:27
5f4000f to
e4a3be8
Compare
Jake Bailey (jakebailey)
force-pushed
the
jakebailey/mem/compact-member-indexes
branch
from
October 14, 2026 02:27
c4938e8 to
22ec779
Compare
Jake Bailey (jakebailey)
force-pushed
the
jakebailey/mem/compressed-link-stores
branch
from
October 14, 2026 03:47
e4a3be8 to
67c649a
Compare
Jake Bailey (jakebailey)
force-pushed
the
jakebailey/mem/compact-member-indexes
branch
from
October 14, 2026 03:47
22ec779 to
3654528
Compare
Anders Hejlsberg (ahejlsberg)
force-pushed
the
jakebailey/mem/compact-member-indexes
branch
from
October 14, 2026 14:14
3654528 to
7265ad1
Compare
Jake Bailey (jakebailey)
force-pushed
the
jakebailey/mem/compressed-link-stores
branch
from
October 14, 2026 14:17
b9d52d7 to
5f4fd97
Compare
Jake Bailey (jakebailey)
force-pushed
the
jakebailey/mem/compact-member-indexes
branch
2 times, most recently
from
October 14, 2026 16:02
04c2a42 to
15e8050
Compare
Jake Bailey (jakebailey)
removed this pull request from stack #64806
October 14, 2026 16:55
Jake Bailey (jakebailey)
changed the base branch from
jakebailey/mem/compressed-link-stores
to
main
October 14, 2026 16:56
Jake Bailey (jakebailey)
force-pushed
the
jakebailey/mem/compact-member-indexes
branch
from
October 14, 2026 16:56
15e8050 to
a4b4d1d
Compare
Jake Bailey (jakebailey)
marked this pull request as ready for review
October 14, 2026 16:57
Member
Author
|
TypeScript Bot (@typescript-bot) perf test this faster |
Contributor
Contributor
|
Jake Bailey (@jakebailey) Here they are:
tscComparison Report - baseline..pr
System info unknown
Hosts
Scenarios
Developer Information: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Jake Bailey (jakebailey)
marked this pull request as draft
October 16, 2026 22:44
Lazy member resolution removed the member maps of instantiated classes and interfaces, but anonymous, mapped, and other resolved object types still keep a name-to-symbol map beside their ordered property list. When every member is a named property stored under its own name, that map duplicates the property list, and its symbol pointers and string headers add to the live heap and to what the collector must scan. Use the property list as the source of truth for those types. Small types are searched directly, and larger ones get an index of pointer-free slots. Module exports, reserved members, and tables with other keys keep their maps.
Jake Bailey (jakebailey)
force-pushed
the
jakebailey/mem/compact-member-indexes
branch
from
October 25, 2026 00:19
a4b4d1d to
1f6c99a
Compare
Member
Author
|
TypeScript Bot (@typescript-bot) perf test |
Contributor
Contributor
|
Jake Bailey (@jakebailey) Here they are:
tscComparison Report - baseline..pr
System info unknown
Hosts
Scenarios
lspComparison Report - baseline..pr
System info unknown
Hosts
Scenarios
startupComparison Report - baseline..pr
System info unknown
Hosts
Scenarios
Developer Information: |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Instantiated and inherited object types keep a name-to-symbol map beside their ordered property list, duplicating pointers across millions of types.