File tree Expand file tree Collapse file tree 4 files changed +28
-0
lines changed Expand file tree Collapse file tree 4 files changed +28
-0
lines changed Original file line number Diff line number Diff line change @@ -57,6 +57,10 @@ fn main() {
5757 println ! ( "cargo:rustc-cfg=span_locations" ) ;
5858 }
5959
60+ if version. minor >= 45 {
61+ println ! ( "cargo:rustc-cfg=hygiene" ) ;
62+ }
63+
6064 let target = env:: var ( "TARGET" ) . unwrap ( ) ;
6165 if !enable_use_proc_macro ( & target) {
6266 return ;
Original file line number Diff line number Diff line change @@ -374,6 +374,11 @@ impl Span {
374374 Span { lo : 0 , hi : 0 }
375375 }
376376
377+ #[ cfg( hygiene) ]
378+ pub fn mixed_site ( ) -> Span {
379+ Span :: call_site ( )
380+ }
381+
377382 #[ cfg( procmacro2_semver_exempt) ]
378383 pub fn def_site ( ) -> Span {
379384 Span :: call_site ( )
Original file line number Diff line number Diff line change @@ -348,6 +348,16 @@ impl Span {
348348 Span :: _new ( imp:: Span :: call_site ( ) )
349349 }
350350
351+ /// The span located at the invocation of the procedural macro, but with
352+ /// local variables, labels, and `$crate` resolved at the definition site
353+ /// of the macro. This is the same hygiene behavior as `macro_rules`.
354+ ///
355+ /// This function requires Rust 1.45 or later.
356+ #[ cfg( hygiene) ]
357+ pub fn mixed_site ( ) -> Span {
358+ Span :: _new ( imp:: Span :: mixed_site ( ) )
359+ }
360+
351361 /// A span that resolves at the macro definition site.
352362 ///
353363 /// This method is semver exempt and not exposed by default.
Original file line number Diff line number Diff line change @@ -376,6 +376,15 @@ impl Span {
376376 }
377377 }
378378
379+ #[ cfg( hygiene) ]
380+ pub fn mixed_site ( ) -> Span {
381+ if inside_proc_macro ( ) {
382+ Span :: Compiler ( proc_macro:: Span :: mixed_site ( ) )
383+ } else {
384+ Span :: Fallback ( fallback:: Span :: mixed_site ( ) )
385+ }
386+ }
387+
379388 #[ cfg( super_unstable) ]
380389 pub fn def_site ( ) -> Span {
381390 if inside_proc_macro ( ) {
You can’t perform that action at this time.
0 commit comments