Skip to content

compiler: Make langtype::Type Send - #12678

Merged
ogoffart merged 4 commits into
masterfrom
olivier/langtype-send
Jul 30, 2026
Merged

compiler: Make langtype::Type Send#12678
ogoffart merged 4 commits into
masterfrom
olivier/langtype-send

Conversation

@ogoffart

Copy link
Copy Markdown
Member

As a first step to get the LLR Send.

The most annoying part is the "make struct/enum declaration nodes Send" commit, because the Struct and Enum contains a SyntaxNode.

@ogoffart
ogoffart requested review from LeonMatthes and tronical July 28, 2026 15:34
ogoffart added 4 commits July 28, 2026 16:02
The Type/Struct/Enumeration/NativeClass/Function types and their
construction sites now use Arc so that the LLR CompilationUnit can
eventually be made Send and moved to another thread.
Switch SourceFile from Rc to Arc and SourceFileInner::line_offsets from
OnceCell to OnceLock, so SourceLocation (and the LLR debug info that
holds it) becomes Send + Sync.
The rowan red syntax node stored on StructName::User and Enumeration is
not Send. Replace it with a DeclNode that keeps only the source file and
the declaration's text range, and capture what the code generators need
(the @rust-attr text, and the field declaration order for C++) into the
type at build time. The language server resolves the actual syntax node
from its own DocumentCache. The langtype graph thus carries no syntax
tree and becomes Send.
The BUILTIN, BUILTIN_STRUCTS, RESERVED_PROPERTIES and BuiltinFunction
type caches were thread_local only because they held Rc, which is not
Sync. Now that they hold Arc, make them global LazyLock statics so the
builtin structs and enums have a single process-wide identity. This
matches the threaded compilation model: a type built on the compile
worker thread and one built on the main thread now share the same
allocation, so Arc::ptr_eq stays consistent across threads.
@ogoffart
ogoffart merged commit a42a683 into master Jul 30, 2026
51 checks passed
@ogoffart
ogoffart deleted the olivier/langtype-send branch July 30, 2026 14:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants