@@ -264,6 +264,63 @@ impl HygieneData {
264
264
}
265
265
scope
266
266
}
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
+ }
267
324
}
268
325
269
326
pub fn clear_markings ( ) {
@@ -359,61 +416,7 @@ impl SyntaxContext {
359
416
}
360
417
361
418
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) )
417
420
}
418
421
419
422
/// Pulls a single mark off of the syntax context. This effectively moves the
0 commit comments