Skip to content

Commit 2bb6635

Browse files
committed
Auto merge of rust-lang#13173 - Veykril:synthetic, r=Veykril
Don't store SyntheticSyntax in the reverse maps in BodySourceMap They are ZSTs which we can just create on missing access instead.
2 parents 4f8153e + fe0a106 commit 2bb6635

File tree

2 files changed

+11
-11
lines changed

2 files changed

+11
-11
lines changed

crates/hir-def/src/body.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -264,10 +264,10 @@ pub type LabelSource = InFile<LabelPtr>;
264264
#[derive(Default, Debug, Eq, PartialEq)]
265265
pub struct BodySourceMap {
266266
expr_map: FxHashMap<ExprSource, ExprId>,
267-
expr_map_back: ArenaMap<ExprId, Result<ExprSource, SyntheticSyntax>>,
267+
expr_map_back: ArenaMap<ExprId, ExprSource>,
268268

269269
pat_map: FxHashMap<PatSource, PatId>,
270-
pat_map_back: ArenaMap<PatId, Result<PatSource, SyntheticSyntax>>,
270+
pat_map_back: ArenaMap<PatId, PatSource>,
271271

272272
label_map: FxHashMap<LabelSource, LabelId>,
273273
label_map_back: ArenaMap<LabelId, LabelSource>,
@@ -420,7 +420,7 @@ impl Index<LabelId> for Body {
420420
// Perhaps `expr_syntax` and `expr_id`?
421421
impl BodySourceMap {
422422
pub fn expr_syntax(&self, expr: ExprId) -> Result<ExprSource, SyntheticSyntax> {
423-
self.expr_map_back[expr].clone()
423+
self.expr_map_back.get(expr).cloned().ok_or(SyntheticSyntax)
424424
}
425425

426426
pub fn node_expr(&self, node: InFile<&ast::Expr>) -> Option<ExprId> {
@@ -434,7 +434,7 @@ impl BodySourceMap {
434434
}
435435

436436
pub fn pat_syntax(&self, pat: PatId) -> Result<PatSource, SyntheticSyntax> {
437-
self.pat_map_back[pat].clone()
437+
self.pat_map_back.get(pat).cloned().ok_or(SyntheticSyntax)
438438
}
439439

440440
pub fn node_pat(&self, node: InFile<&ast::Pat>) -> Option<PatId> {

crates/hir-def/src/body/lower.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use syntax::{
2424

2525
use crate::{
2626
adt::StructKind,
27-
body::{Body, BodySourceMap, Expander, LabelSource, PatPtr, SyntheticSyntax},
27+
body::{Body, BodySourceMap, Expander, LabelSource, PatPtr},
2828
body::{BodyDiagnostic, ExprSource, PatSource},
2929
builtin_type::{BuiltinFloat, BuiltinInt, BuiltinUint},
3030
db::DefDatabase,
@@ -152,34 +152,34 @@ impl ExprCollector<'_> {
152152

153153
fn alloc_expr(&mut self, expr: Expr, ptr: AstPtr<ast::Expr>) -> ExprId {
154154
let src = self.expander.to_source(ptr);
155-
let id = self.make_expr(expr, Ok(src.clone()));
155+
let id = self.make_expr(expr, src.clone());
156156
self.source_map.expr_map.insert(src, id);
157157
id
158158
}
159159
// desugared exprs don't have ptr, that's wrong and should be fixed
160160
// somehow.
161161
fn alloc_expr_desugared(&mut self, expr: Expr) -> ExprId {
162-
self.make_expr(expr, Err(SyntheticSyntax))
162+
self.body.exprs.alloc(expr)
163163
}
164164
fn missing_expr(&mut self) -> ExprId {
165165
self.alloc_expr_desugared(Expr::Missing)
166166
}
167-
fn make_expr(&mut self, expr: Expr, src: Result<ExprSource, SyntheticSyntax>) -> ExprId {
167+
fn make_expr(&mut self, expr: Expr, src: ExprSource) -> ExprId {
168168
let id = self.body.exprs.alloc(expr);
169169
self.source_map.expr_map_back.insert(id, src);
170170
id
171171
}
172172

173173
fn alloc_pat(&mut self, pat: Pat, ptr: PatPtr) -> PatId {
174174
let src = self.expander.to_source(ptr);
175-
let id = self.make_pat(pat, Ok(src.clone()));
175+
let id = self.make_pat(pat, src.clone());
176176
self.source_map.pat_map.insert(src, id);
177177
id
178178
}
179179
fn missing_pat(&mut self) -> PatId {
180-
self.make_pat(Pat::Missing, Err(SyntheticSyntax))
180+
self.body.pats.alloc(Pat::Missing)
181181
}
182-
fn make_pat(&mut self, pat: Pat, src: Result<PatSource, SyntheticSyntax>) -> PatId {
182+
fn make_pat(&mut self, pat: Pat, src: PatSource) -> PatId {
183183
let id = self.body.pats.alloc(pat);
184184
self.source_map.pat_map_back.insert(id, src);
185185
id

0 commit comments

Comments
 (0)