File tree 1 file changed +28
-7
lines changed
1 file changed +28
-7
lines changed Original file line number Diff line number Diff line change 15
15
macro_rules! define_field {
16
16
( ) => {
17
17
struct S { field: u8 }
18
- }
18
+ } ;
19
+ ( $field: ident) => {
20
+ struct Z { $field: u8 }
21
+ } ;
19
22
}
20
23
21
- macro use_field( $define_field: item) {
22
- $define_field
24
+ mod modern {
25
+ macro use_field( $define_field1: item, $define_field2: item) {
26
+ $define_field1
27
+ $define_field2
28
+
29
+ // OK, both struct name `S` and field `name` resolve to definitions
30
+ // produced by `define_field` and living in the "root" context
31
+ // that is in scope at `use_field`'s def-site.
32
+ fn f ( ) { S { field : 0 } ; }
33
+ fn g ( ) { Z { field : 0 } ; }
34
+ }
23
35
24
- // OK, both struct name `S` and field `name` resolve to definitions produced by `define_field`
25
- // and living in the "root" context that is in scope at `use_field`'s def-site.
26
- fn f ( ) { S { field : 0 } ; }
36
+ use_field ! ( define_field!{ } , define_field!{ field } ) ;
27
37
}
28
38
29
- use_field ! ( define_field!{ } ) ;
39
+ mod legacy {
40
+ macro_rules! use_field { ( $define_field1: item, $define_field2: item) => {
41
+ $define_field1
42
+ $define_field2
43
+
44
+ // OK, everything is at the same call-site.
45
+ fn f( ) { S { field: 0 } ; }
46
+ fn g( ) { Z { field: 0 } ; }
47
+ } }
48
+
49
+ use_field ! ( define_field!{ } , define_field!{ field } ) ;
50
+ }
30
51
31
52
fn main ( ) { }
You can’t perform that action at this time.
0 commit comments