@@ -161,13 +161,12 @@ impl HygieneData {
161
161
let mut mark_queue: VecDeque < _ > = self . used_marks . iter ( ) . cloned ( ) . collect ( ) ;
162
162
let mut ctxt_queue: VecDeque < _ > = self . used_syntax_contexts . iter ( ) . cloned ( ) . collect ( ) ;
163
163
ctxt_queue. extend ( self . gensym_to_ctxt . values ( ) ) ;
164
-
165
164
let gensym_to_ctxt = self . gensym_to_ctxt . clone ( ) ;
166
165
167
166
let mut visited_marks = HashSet :: new ( ) ;
168
167
let mut visited_ctxts = HashSet :: new ( ) ;
169
168
170
- loop {
169
+ while ! ( mark_queue . is_empty ( ) && ctxt_queue . is_empty ( ) ) {
171
170
let next_mark = mark_queue. pop_front ( ) . and_then ( |mark|
172
171
// skip default mark and already visited marks
173
172
if visited_marks. contains ( & mark) || mark. 0 == 0 {
@@ -185,10 +184,6 @@ impl HygieneData {
185
184
Some ( ctxt)
186
185
} ) ;
187
186
188
- if next_mark. is_none ( ) && next_ctxt. is_none ( ) {
189
- break ;
190
- }
191
-
192
187
if let Some ( mark) = next_mark {
193
188
let data = & self . marks [ mark. 0 as usize ] ;
194
189
@@ -261,18 +256,26 @@ impl ImportedHygieneData {
261
256
}
262
257
263
258
pub fn translate_ctxt ( & self , external : SyntaxContext ) -> SyntaxContext {
264
- self . ctxt_map [ & external]
259
+ if external. 0 != 0 {
260
+ self . ctxt_map [ & external]
261
+ } else {
262
+ external
263
+ }
265
264
}
266
265
267
266
pub fn translate_mark ( & self , external : Mark ) -> Mark {
268
- self . mark_map [ & external]
267
+ if external. 0 != 0 {
268
+ self . mark_map [ & external]
269
+ } else {
270
+ external
271
+ }
269
272
}
270
273
271
274
pub fn translate_span ( & self , external : Span ) -> Span {
272
275
Span {
273
276
lo : external. lo ,
274
277
hi : external. hi ,
275
- ctxt : self . ctxt_map [ & external. ctxt ] ,
278
+ ctxt : self . translate_ctxt ( external. ctxt ) ,
276
279
}
277
280
}
278
281
@@ -320,7 +323,7 @@ pub fn extend_hygiene_data(extend_with: HygieneDataMap) -> ImportedHygieneData {
320
323
. enumerate ( )
321
324
. map ( |( index_offset, ( mark, data) ) | {
322
325
let index_offset = index_offset as u32 ;
323
- imported_map. insert_mark ( mark, mark . translate ( mark_offset + index_offset) ) ;
326
+ imported_map. insert_mark ( mark, Mark ( mark_offset + index_offset) ) ;
324
327
data
325
328
} )
326
329
. collect ( ) ;
@@ -330,7 +333,7 @@ pub fn extend_hygiene_data(extend_with: HygieneDataMap) -> ImportedHygieneData {
330
333
. enumerate ( )
331
334
. map ( |( index_offset, ( ctxt, data) ) | {
332
335
let index_offset = index_offset as u32 ;
333
- imported_map. insert_ctxt ( ctxt, ctxt . translate ( ctxt_offset + index_offset) ) ;
336
+ imported_map. insert_ctxt ( ctxt, SyntaxContext ( ctxt_offset + index_offset) ) ;
334
337
data
335
338
} )
336
339
. collect ( ) ;
0 commit comments