-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Open
Labels
C-ArchitectureBig architectural things which we need to figure up-front (or suggestions for rewrites :0) )Big architectural things which we need to figure up-front (or suggestions for rewrites :0) )C-featureCategory: feature requestCategory: feature requestE-hardS-actionableSomeone could pick this issue up and work on it right nowSomeone could pick this issue up and work on it right now
Description
Currently const params are not lowered at all:
https://github.com/rust-analyzer/rust-analyzer/blob/aa91a0268bae6deda964a9fdfcbdbd2d8ca5802f/crates/hir_def/src/path/lower.rs#L177-L178
These kind of define bodies, so they come with all the goodies(and problems like local items) that other items like functions, statics and consts come with, and just like those they should ideally be lowered lazily.
See corresponding zulip discussion https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Fwg-rls-2.2E0/topic/ConstArg.20lowering
FeldrinH, Nufflee, theoparis and Logarithmus
Metadata
Metadata
Assignees
Labels
C-ArchitectureBig architectural things which we need to figure up-front (or suggestions for rewrites :0) )Big architectural things which we need to figure up-front (or suggestions for rewrites :0) )C-featureCategory: feature requestCategory: feature requestE-hardS-actionableSomeone could pick this issue up and work on it right nowSomeone could pick this issue up and work on it right now
Type
Projects
Milestone
Relationships
Development
Select code repository
Activity
dickytamara commentedon Jan 27, 2021
Merge #11140
Merge #11688
HKalbasi commentedon Mar 17, 2022
If each constant needs a body for its own, locating them/allocating id for them will be hard. My suggestion is generalizing body to an expression store, and include expressions of constants in generics in the related definition's body. So for example:
all of
2 + 2
would getExprId
from function's body. Similarly, expressions inside const and static type annotations will be included inside of their bodies. And in this way, type alias will become aDefWithBody
so it can lower and evaluate expressions. Body of a type alias has no meaningful root, so we may want to splitBody
into two abstractions, one withbody_expr
andparams
and one with the rest of fields (the expression allocator part).Comments?
flodiebold commentedon Mar 17, 2022
I think having a common expression store for all constants probably makes sense, but maybe not making that the body? How about we introduce something like an
ExpressionStore
and haveBody
contain one of those (basically what you're suggesting in the last sentence). SoTypeAlias
wouldn't be aDefWithBody
.31 remaining items