@@ -264,6 +264,63 @@ impl HygieneData {
264264 }
265265 scope
266266 }
267+
268+ fn apply_mark_internal ( & mut self , ctxt : SyntaxContext , mark : Mark , transparency : Transparency )
269+ -> SyntaxContext {
270+ let syntax_contexts = & mut self . syntax_contexts ;
271+ let mut opaque = syntax_contexts[ ctxt. 0 as usize ] . opaque ;
272+ let mut opaque_and_semitransparent =
273+ syntax_contexts[ ctxt. 0 as usize ] . opaque_and_semitransparent ;
274+
275+ if transparency >= Transparency :: Opaque {
276+ let prev_ctxt = opaque;
277+ opaque = * self . markings . entry ( ( prev_ctxt, mark, transparency) ) . or_insert_with ( || {
278+ let new_opaque = SyntaxContext ( syntax_contexts. len ( ) as u32 ) ;
279+ syntax_contexts. push ( SyntaxContextData {
280+ outer_mark : mark,
281+ transparency,
282+ prev_ctxt,
283+ opaque : new_opaque,
284+ opaque_and_semitransparent : new_opaque,
285+ dollar_crate_name : kw:: DollarCrate ,
286+ } ) ;
287+ new_opaque
288+ } ) ;
289+ }
290+
291+ if transparency >= Transparency :: SemiTransparent {
292+ let prev_ctxt = opaque_and_semitransparent;
293+ opaque_and_semitransparent =
294+ * self . markings . entry ( ( prev_ctxt, mark, transparency) ) . or_insert_with ( || {
295+ let new_opaque_and_semitransparent =
296+ SyntaxContext ( syntax_contexts. len ( ) as u32 ) ;
297+ syntax_contexts. push ( SyntaxContextData {
298+ outer_mark : mark,
299+ transparency,
300+ prev_ctxt,
301+ opaque,
302+ opaque_and_semitransparent : new_opaque_and_semitransparent,
303+ dollar_crate_name : kw:: DollarCrate ,
304+ } ) ;
305+ new_opaque_and_semitransparent
306+ } ) ;
307+ }
308+
309+ let prev_ctxt = ctxt;
310+ * self . markings . entry ( ( prev_ctxt, mark, transparency) ) . or_insert_with ( || {
311+ let new_opaque_and_semitransparent_and_transparent =
312+ SyntaxContext ( syntax_contexts. len ( ) as u32 ) ;
313+ syntax_contexts. push ( SyntaxContextData {
314+ outer_mark : mark,
315+ transparency,
316+ prev_ctxt,
317+ opaque,
318+ opaque_and_semitransparent,
319+ dollar_crate_name : kw:: DollarCrate ,
320+ } ) ;
321+ new_opaque_and_semitransparent_and_transparent
322+ } )
323+ }
267324}
268325
269326pub fn clear_markings ( ) {
@@ -359,61 +416,7 @@ impl SyntaxContext {
359416 }
360417
361418 fn apply_mark_internal ( self , mark : Mark , transparency : Transparency ) -> SyntaxContext {
362- HygieneData :: with ( |data| {
363- let syntax_contexts = & mut data. syntax_contexts ;
364- let mut opaque = syntax_contexts[ self . 0 as usize ] . opaque ;
365- let mut opaque_and_semitransparent =
366- syntax_contexts[ self . 0 as usize ] . opaque_and_semitransparent ;
367-
368- if transparency >= Transparency :: Opaque {
369- let prev_ctxt = opaque;
370- opaque = * data. markings . entry ( ( prev_ctxt, mark, transparency) ) . or_insert_with ( || {
371- let new_opaque = SyntaxContext ( syntax_contexts. len ( ) as u32 ) ;
372- syntax_contexts. push ( SyntaxContextData {
373- outer_mark : mark,
374- transparency,
375- prev_ctxt,
376- opaque : new_opaque,
377- opaque_and_semitransparent : new_opaque,
378- dollar_crate_name : kw:: DollarCrate ,
379- } ) ;
380- new_opaque
381- } ) ;
382- }
383-
384- if transparency >= Transparency :: SemiTransparent {
385- let prev_ctxt = opaque_and_semitransparent;
386- opaque_and_semitransparent =
387- * data. markings . entry ( ( prev_ctxt, mark, transparency) ) . or_insert_with ( || {
388- let new_opaque_and_semitransparent =
389- SyntaxContext ( syntax_contexts. len ( ) as u32 ) ;
390- syntax_contexts. push ( SyntaxContextData {
391- outer_mark : mark,
392- transparency,
393- prev_ctxt,
394- opaque,
395- opaque_and_semitransparent : new_opaque_and_semitransparent,
396- dollar_crate_name : kw:: DollarCrate ,
397- } ) ;
398- new_opaque_and_semitransparent
399- } ) ;
400- }
401-
402- let prev_ctxt = self ;
403- * data. markings . entry ( ( prev_ctxt, mark, transparency) ) . or_insert_with ( || {
404- let new_opaque_and_semitransparent_and_transparent =
405- SyntaxContext ( syntax_contexts. len ( ) as u32 ) ;
406- syntax_contexts. push ( SyntaxContextData {
407- outer_mark : mark,
408- transparency,
409- prev_ctxt,
410- opaque,
411- opaque_and_semitransparent,
412- dollar_crate_name : kw:: DollarCrate ,
413- } ) ;
414- new_opaque_and_semitransparent_and_transparent
415- } )
416- } )
419+ HygieneData :: with ( |data| data. apply_mark_internal ( self , mark, transparency) )
417420 }
418421
419422 /// Pulls a single mark off of the syntax context. This effectively moves the
0 commit comments