@@ -14,9 +14,10 @@ use ra_syntax::{
14
14
} ;
15
15
use test_utils:: tested_by;
16
16
17
+ use super :: ExprSource ;
17
18
use crate :: {
18
19
adt:: StructKind ,
19
- body:: { Body , BodySourceMap , Expander , PatPtr } ,
20
+ body:: { Body , BodySourceMap , Expander , PatPtr , SyntheticSyntax } ,
20
21
builtin_type:: { BuiltinFloat , BuiltinInt } ,
21
22
db:: DefDatabase ,
22
23
expr:: {
@@ -102,42 +103,42 @@ where
102
103
103
104
fn alloc_expr ( & mut self , expr : Expr , ptr : AstPtr < ast:: Expr > ) -> ExprId {
104
105
let ptr = Either :: Left ( ptr) ;
105
- let id = self . body . exprs . alloc ( expr) ;
106
106
let src = self . expander . to_source ( ptr) ;
107
+ let id = self . make_expr ( expr, Ok ( src) ) ;
107
108
self . source_map . expr_map . insert ( src, id) ;
108
- self . source_map . expr_map_back . insert ( id, src) ;
109
109
id
110
110
}
111
111
// desugared exprs don't have ptr, that's wrong and should be fixed
112
112
// somehow.
113
113
fn alloc_expr_desugared ( & mut self , expr : Expr ) -> ExprId {
114
- self . body . exprs . alloc ( expr)
114
+ self . make_expr ( expr, Err ( SyntheticSyntax ) )
115
115
}
116
116
fn alloc_expr_field_shorthand ( & mut self , expr : Expr , ptr : AstPtr < ast:: RecordField > ) -> ExprId {
117
117
let ptr = Either :: Right ( ptr) ;
118
- let id = self . body . exprs . alloc ( expr) ;
119
118
let src = self . expander . to_source ( ptr) ;
119
+ let id = self . make_expr ( expr, Ok ( src) ) ;
120
120
self . source_map . expr_map . insert ( src, id) ;
121
+ id
122
+ }
123
+ fn empty_block ( & mut self ) -> ExprId {
124
+ self . alloc_expr_desugared ( Expr :: Block { statements : Vec :: new ( ) , tail : None } )
125
+ }
126
+ fn missing_expr ( & mut self ) -> ExprId {
127
+ self . alloc_expr_desugared ( Expr :: Missing )
128
+ }
129
+ fn make_expr ( & mut self , expr : Expr , src : Result < ExprSource , SyntheticSyntax > ) -> ExprId {
130
+ let id = self . body . exprs . alloc ( expr) ;
121
131
self . source_map . expr_map_back . insert ( id, src) ;
122
132
id
123
133
}
134
+
124
135
fn alloc_pat ( & mut self , pat : Pat , ptr : PatPtr ) -> PatId {
125
136
let id = self . body . pats . alloc ( pat) ;
126
137
let src = self . expander . to_source ( ptr) ;
127
138
self . source_map . pat_map . insert ( src, id) ;
128
139
self . source_map . pat_map_back . insert ( id, src) ;
129
140
id
130
141
}
131
-
132
- fn empty_block ( & mut self ) -> ExprId {
133
- let block = Expr :: Block { statements : Vec :: new ( ) , tail : None } ;
134
- self . body . exprs . alloc ( block)
135
- }
136
-
137
- fn missing_expr ( & mut self ) -> ExprId {
138
- self . body . exprs . alloc ( Expr :: Missing )
139
- }
140
-
141
142
fn missing_pat ( & mut self ) -> PatId {
142
143
self . body . pats . alloc ( Pat :: Missing )
143
144
}
0 commit comments