@@ -11,6 +11,7 @@ use crate::ast::*;
1111use crate :: data:: error_codes:: ErrorCode ;
1212use crate :: data:: * ;
1313use crate :: named_entity:: * ;
14+ use crate :: { HasTokenSpan , TokenSpan } ;
1415use analyze:: * ;
1516use target:: AssignmentType ;
1617
@@ -43,13 +44,15 @@ impl<'a, 't> AnalyzeContext<'a, 't> {
4344 diagnostics : & mut dyn DiagnosticHandler ,
4445 ) -> FatalResult {
4546 for statement in statements. iter_mut ( ) {
47+ let span = statement. span ( ) ;
4648 if let Some ( ref mut label) = statement. label . tree {
4749 let ent = self . arena . explicit (
4850 label. name ( ) ,
4951 parent,
5052 AnyEntKind :: Concurrent ( statement. statement . item . label_typ ( ) ) ,
5153 Some ( label. pos ( self . ctx ) ) ,
52- None ,
54+ span,
55+ Some ( self . source ( ) ) ,
5356 ) ;
5457 statement. label . decl . set ( ent. id ( ) ) ;
5558 scope. add ( ent, diagnostics) ;
@@ -61,7 +64,8 @@ impl<'a, 't> AnalyzeContext<'a, 't> {
6164 Related :: None ,
6265 AnyEntKind :: Concurrent ( statement. statement . item . label_typ ( ) ) ,
6366 None ,
64- None ,
67+ span,
68+ Some ( self . source ( ) ) ,
6569 ) ;
6670 statement. label . decl . set ( ent. id ( ) ) ;
6771 }
@@ -77,6 +81,7 @@ impl<'a, 't> AnalyzeContext<'a, 't> {
7781 statement : & mut LabeledConcurrentStatement ,
7882 diagnostics : & mut dyn DiagnosticHandler ,
7983 ) -> FatalResult {
84+ let src_span = statement. span ( ) ;
8085 match statement. statement . item {
8186 ConcurrentStatement :: Block ( ref mut block) => {
8287 if let Some ( ref mut guard_condition) = block. guard_condition {
@@ -143,11 +148,12 @@ impl<'a, 't> AnalyzeContext<'a, 't> {
143148 self . arena ,
144149 parent,
145150 AnyEntKind :: LoopParameter ( typ) ,
146- None ,
151+ src_span,
152+ Some ( self . source ( ) ) ,
147153 ) ,
148154 diagnostics,
149155 ) ;
150- self . analyze_generate_body ( & nested, parent, body, diagnostics) ?;
156+ self . analyze_generate_body ( & nested, parent, body, src_span , diagnostics) ?;
151157 }
152158 ConcurrentStatement :: IfGenerate ( ref mut gen) => {
153159 let Conditionals {
@@ -158,11 +164,11 @@ impl<'a, 't> AnalyzeContext<'a, 't> {
158164 let Conditional { condition, item } = conditional;
159165 self . boolean_expr ( scope, condition, diagnostics) ?;
160166 let nested = scope. nested ( ) ;
161- self . analyze_generate_body ( & nested, parent, item, diagnostics) ?;
167+ self . analyze_generate_body ( & nested, parent, item, src_span , diagnostics) ?;
162168 }
163169 if let Some ( ref mut else_item) = else_item {
164170 let nested = scope. nested ( ) ;
165- self . analyze_generate_body ( & nested, parent, else_item, diagnostics) ?;
171+ self . analyze_generate_body ( & nested, parent, else_item, src_span , diagnostics) ?;
166172 }
167173 }
168174 ConcurrentStatement :: CaseGenerate ( ref mut gen) => {
@@ -184,7 +190,7 @@ impl<'a, 't> AnalyzeContext<'a, 't> {
184190 } = alternative;
185191 self . choice_with_ttyp ( scope, ctyp, choices, diagnostics) ?;
186192 let nested = scope. nested ( ) ;
187- self . analyze_generate_body ( & nested, parent, item, diagnostics) ?;
193+ self . analyze_generate_body ( & nested, parent, item, src_span , diagnostics) ?;
188194 }
189195 }
190196 ConcurrentStatement :: Instance ( ref mut instance) => {
@@ -232,13 +238,14 @@ impl<'a, 't> AnalyzeContext<'a, 't> {
232238 scope : & Scope < ' a > ,
233239 parent : EntRef < ' a > ,
234240 body : & mut GenerateBody ,
241+ span : TokenSpan ,
235242 diagnostics : & mut dyn DiagnosticHandler ,
236243 ) -> FatalResult {
237244 let GenerateBody {
238245 alternative_label,
239246 decl,
240247 statements,
241- end_label_pos : _ ,
248+ ..
242249 } = body;
243250
244251 let mut inner_parent = parent;
@@ -248,7 +255,8 @@ impl<'a, 't> AnalyzeContext<'a, 't> {
248255 self . arena ,
249256 parent,
250257 AnyEntKind :: Concurrent ( Some ( Concurrent :: Generate ) ) ,
251- None ,
258+ span,
259+ Some ( self . source ( ) ) ,
252260 ) ;
253261 scope. add ( ent, diagnostics) ;
254262 inner_parent = ent;
0 commit comments