@@ -55,6 +55,9 @@ public macro AttachedPeerMacro()
55
55
@attached ( extension)
56
56
public macro AttachedConformanceMacro( )
57
57
58
+ @attached ( body)
59
+ public macro BodyMacro( )
60
+
58
61
@freestanding ( expression)
59
62
@freestanding ( declaration)
60
63
@attached ( accessor)
@@ -69,59 +72,68 @@ public macro EverythingMacro()
69
72
import MacroDefinitions
70
73
#endif
71
74
72
- @#^CLASS_ATTR? check= NOMINAL_ATTR^# class C { }
73
- @#^EXTRA_FILTER? check= NOMINAL_ATTR^#IB class C2 { }
74
- @#^ENUM_ATTR? check= NOMINAL_ATTR^# enum E { }
75
- @#^STRUCT_ATTR? check= NOMINAL_ATTR^# struct S { }
76
- // NOMINAL_ATTR-NOT: freestanding
77
- // NOMINAL_ATTR-NOT: AttachedAccessorMacro
75
+ @#^CLASS_ATTR? check= NOMINAL_ATTR;check= NOMINAL_ATTR_NOT^# class C { }
76
+ @#^EXTRA_FILTER? check= NOMINAL_ATTR;check= NOMINAL_ATTR_NOT^#IB class C2 { }
77
+ @#^ENUM_ATTR? check= NOMINAL_ATTR;check= NOMINAL_ATTR_NOT^# enum E { }
78
+ @#^STRUCT_ATTR? check= NOMINAL_ATTR;check= NOMINAL_ATTR_NOT^# struct S{ }
78
79
// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedMemberMacro[#Member Macro#]; name=AttachedMemberMacro
79
80
// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedMemberMacroWithArgs({#arg1: Int#})[#Member Macro#]; name=AttachedMemberMacroWithArgs
80
81
// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedMemberAttributeMacro[#Member Attribute Macro#]; name=AttachedMemberAttributeMacro
81
82
// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedPeerMacro[#Peer Macro#]; name=AttachedPeerMacro
82
83
// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedConformanceMacro[#Extension Macro#]; name=AttachedConformanceMacro
83
84
// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: EverythingMacro[#Expression Macro, Declaration Macro, Accessor Macro, Member Attribute Macro, Member Macro, Peer Macro, Extension Macro#]; name=EverythingMacro
85
+ //
86
+ // NOMINAL_ATTR_NOT-NOT: freestanding
87
+ // NOMINAL_ATTR_NOT-NOT: AttachedAccessorMacro
88
+ // NOMINAL_ATTR_NOT-NOT: BodyMacro
84
89
85
- @#^FUNC_ATTR? check= DECL_ATTR ^# func method( ) { }
90
+ @#^FUNC_ATTR? check= FUNC_ATTR;check = FUNC_ATTR_NOT ^# func method( ) { }
86
91
struct MethodAttrs {
87
- @#^INIT_ATTR? check= DECL_ATTR^# init( ) { }
88
- @#^DEINIT_ATTR? check= DECL_ATTR^# deinit{ }
89
- @#^METHOD_ATTR? check= DECL_ATTR^# func method( ) { }
92
+ var x : Int {
93
+ @#^ACCESSOR_ATTR? check= FUNC_ATTR;check= FUNC_ATTR_NOT^# get { 0 }
94
+ }
95
+ @#^INIT_ATTR? check= FUNC_ATTR;check= FUNC_ATTR_NOT^# init( ) { }
96
+ @#^DEINIT_ATTR? check= FUNC_ATTR;check= FUNC_ATTR_NOT^# deinit{ }
97
+ @#^METHOD_ATTR? check= FUNC_ATTR;check= FUNC_ATTR_NOT^# func method( ) { }
90
98
}
91
- // DECL_ATTR-NOT: freestanding
92
- // DECL_ATTR-NOT: AttachedAccessorMacro
93
- // DECL_ATTR-NOT: AttachedMemberMacro
94
- // DECL_ATTR-NOT: AttachedMemberMacroWithArgs
95
- // DECL_ATTR-NOT: AttachedConformanceMacro
96
- // DECL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedPeerMacro[#Peer Macro#]; name=AttachedPeerMacro
97
- // DECL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: EverythingMacro[#Expression Macro, Declaration Macro, Accessor Macro, Member Attribute Macro, Member Macro, Peer Macro, Extension Macro#]; name=EverythingMacro
98
-
99
- @#^GLOBAL_ATTR? check= VAR_ATTR^# var globalVar
99
+ // FUNC_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedPeerMacro[#Peer Macro#]; name=AttachedPeerMacro
100
+ // FUNC_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: BodyMacro[#Body Macro#]; name=BodyMacro
101
+ // FUNC_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: EverythingMacro[#Expression Macro, Declaration Macro, Accessor Macro, Member Attribute Macro, Member Macro, Peer Macro, Extension Macro#]; name=EverythingMacro
102
+ //
103
+ // FUNC_ATTR_NOT-NOT: freestanding
104
+ // FUNC_ATTR_NOT-NOT: AttachedAccessorMacro
105
+ // FUNC_ATTR_NOT-NOT: AttachedMemberMacro
106
+ // FUNC_ATTR_NOT-NOT: AttachedMemberMacroWithArgs
107
+ // FUNC_ATTR_NOT-NOT: AttachedConformanceMacro
108
+
109
+ @#^GLOBAL_ATTR? check= VAR_ATTR;check= VAR_ATTR_NOT^# var globalVar
100
110
struct PropAttr {
101
- @#^PROP_ATTR? check= VAR_ATTR^# var propVar
111
+ @#^PROP_ATTR? check= VAR_ATTR;check = VAR_ATTR_NOT ^# var propVar
102
112
func localAttr( ) {
103
- @#^LOCAL_ATTR? check= VAR_ATTR^# var localVar
113
+ @#^LOCAL_ATTR? check= VAR_ATTR;check = VAR_ATTR_NOT ^# var localVar
104
114
}
105
115
}
106
- // VAR_ATTR-NOT: freestanding
107
- // VAR_ATTR-NOT: AttachedMemberMacro
108
- // VAR_ATTR-NOT: AttachedMemberMacroWithArgs
109
- // VAR_ATTR-NOT: AttachedMemberAttributeMacro
110
- // VAR_ATTR-NOT: AttachedConformanceMacro
111
116
// VAR_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedAccessorMacro[#Accessor Macro#]; name=AttachedAccessorMacro
112
117
// VAR_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedPeerMacro[#Peer Macro#]; name=AttachedPeerMacro
113
118
// VAR_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: EverythingMacro[#Expression Macro, Declaration Macro, Accessor Macro, Member Attribute Macro, Member Macro, Peer Macro, Extension Macro#]; name=EverythingMacro
119
+ //
120
+ // VAR_ATTR_NOT-NOT: freestanding
121
+ // VAR_ATTR_NOT-NOT: AttachedMemberMacro
122
+ // VAR_ATTR_NOT-NOT: AttachedMemberMacroWithArgs
123
+ // VAR_ATTR_NOT-NOT: AttachedMemberAttributeMacro
124
+ // VAR_ATTR_NOT-NOT: AttachedConformanceMacro
125
+ // VAR_ATTR_NOT-NOT: BodyMacro
114
126
115
127
func paramAttr( @#^PARAM_ATTR? check= PARAM_ATTR^#) { }
116
128
func paramAttr2( @#^PARAM2 _ATTR? check= PARAM_ATTR^# arg: Int) { }
117
129
// TODO: These should both be PARAM_ATTR
118
130
func takeNoArgClosure( _: ( Int ) -> Void ) {
119
- takeClosure { @#^NO_ARG_CLOSURE_ATTR? check= INDEPENDENT_ATTR^# in
131
+ takeClosure { @#^NO_ARG_CLOSURE_ATTR? check= INDEPENDENT_ATTR;check = INDEPENDENT_ATTR_NOT ^# in
120
132
print ( " x " )
121
133
}
122
134
}
123
135
func takeNoArgClosure( _: ( ) -> Void ) {
124
- takeClosure { @#^CLOSURE_ATTR? check= INDEPENDENT_ATTR^# in
136
+ takeClosure { @#^CLOSURE_ATTR? check= INDEPENDENT_ATTR;check = INDEPENDENT_ATTR_NOT ^# in
125
137
print ( " x " )
126
138
}
127
139
}
@@ -132,41 +144,47 @@ func takeNoArgClosure(_: () -> Void) {
132
144
// PARAM_ATTR-NOT: AttachedMemberAttributeMacro
133
145
// PARAM_ATTR-NOT: AttachedPeerMacro
134
146
// PARAM_ATTR-NOT: AttachedConformanceMacro
147
+ // PARAM_ATTR-NOT: BodyMacro
135
148
// PARAM_ATTR-NOT: EverythingMacro
136
149
137
- ##^TOP_LEVEL_FREESTANDING? check= ALL_FREESTANDING^#
150
+ ##^TOP_LEVEL_FREESTANDING? check= ALL_FREESTANDING;check = ALL_FREESTANDING_NOT ^#
138
151
func nestedFreestanding( ) {
139
- ##^TOP_NESTED_FREESTANDING? check= ALL_FREESTANDING^#
152
+ ##^TOP_NESTED_FREESTANDING? check= ALL_FREESTANDING;check = ALL_FREESTANDING_NOT ^#
140
153
}
141
- // ALL_FREESTANDING-NOT: Attached
142
154
// ALL_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingDeclMacro[#Declaration Macro#]; name=freestandingDeclMacro
143
155
// ALL_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingCodeItemMacro[#Code Item Macro#]; name=freestandingCodeItemMacro
144
156
// ALL_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingExprIntMacro[#Int#]; name=freestandingExprIntMacro
145
157
// ALL_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingExprStringMacro[#String#]; name=freestandingExprStringMacro
146
158
// ALL_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingExprTMacro({#(value): T#})[#T#]; name=freestandingExprTMacro(:)
147
159
// ALL_FREESTANDING-DAG: Decl[Macro]/{{.*}}: EverythingMacro[#Expression Macro, Declaration Macro, Accessor Macro, Member Attribute Macro, Member Macro, Peer Macro, Extension Macro#]; name=EverythingMacro
160
+ //
161
+ // ALL_FREESTANDING_NOT-NOT: Attached
162
+ // ALL_FREESTANDING_NOT-NOT: BodyMacro
148
163
149
164
func exprFreestanding( arg: Int ) {
150
- _ = arg + ##^EXPR_FREESTANDING^#
165
+ _ = arg + ##^EXPR_FREESTANDING? check = EXPR_FREESTANDING;check = EXPR_FREESTANDING_NOT ^#
151
166
}
152
- // EXPR_FREESTANDING-NOT: freestandingDeclMacro
153
- // EXPR_FREESTANDING-NOT: freestandingCodeItemMacro
154
- // EXPR_FREESTANDING-NOT: Attached
155
167
// EXPR_FREESTANDING-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: freestandingExprIntMacro[#Int#]; name=freestandingExprIntMacro
156
168
// EXPR_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingExprStringMacro[#String#]; name=freestandingExprStringMacro
157
169
// EXPR_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingExprTMacro({#(value): T#})[#T#]; name=freestandingExprTMacro(:)
158
170
// TODO: This should be invalid in both same module and across modules
159
171
// EXPR_FREESTANDING-DAG: Decl[Macro]/{{.*}}: EverythingMacro[#Expression Macro, Declaration Macro, Accessor Macro, Member Attribute Macro, Member Macro, Peer Macro, Extension Macro#]; name=EverythingMacro
172
+ //
173
+ // EXPR_FREESTANDING_NOT-NOT: freestandingDeclMacro
174
+ // EXPR_FREESTANDING_NOT-NOT: freestandingCodeItemMacro
175
+ // EXPR_FREESTANDING_NOT-NOT: Attached
176
+ // EXPR_FREESTANDING_NOT-NOT: BodyMacro
160
177
161
178
struct NestedFreestanding {
162
- ##^TYPE_NESTED_FREESTANDING? check= ITEM_FREESTANDING^#
179
+ ##^TYPE_NESTED_FREESTANDING? check= ITEM_FREESTANDING;check = ITEM_FREESTANDING_NOT ^#
163
180
}
164
- // ITEM_FREESTANDING-NOT: Attached
165
- // ITEM_FREESTANDING-NOT: freestandingExpr
166
- // ITEM_FREESTANDING-NOT: freestandingCodeItemMacro
167
181
// ITEM_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingDeclMacro[#Declaration Macro#]; name=freestandingDeclMacro
168
182
// ITEM_FREESTANDING-DAG: Decl[Macro]/{{.*}}: EverythingMacro[#Expression Macro, Declaration Macro, Accessor Macro, Member Attribute Macro, Member Macro, Peer Macro, Extension Macro#]; name=EverythingMacro
169
-
183
+ //
184
+ // ITEM_FREESTANDING_NOT-NOT: Attached
185
+ // ITEM_FREESTANDING_NOT-NOT: freestandingExpr
186
+ // ITEM_FREESTANDING_NOT-NOT: freestandingCodeItemMacro
187
+ // ITEM_FREESTANDING_NOT-NOT: BodyMacro
170
188
171
189
@AttachedMemberMacroWithEnumArgs ( . #^ATTACHED_MACRO_ARG^#)
172
190
struct AttachedMacroArg { }
@@ -181,15 +199,17 @@ struct AttachedMacroSecondArgLabel {}
181
199
182
200
183
201
struct LastMember {
184
- @#^LAST_MEMBER_ATTR? check= INDEPENDENT_ATTR^#
202
+ @#^LAST_MEMBER_ATTR? check= INDEPENDENT_ATTR;check = INDEPENDENT_ATTR_NOT ^#
185
203
}
186
- @#^INDEPENDENT? check= INDEPENDENT_ATTR^#
187
- // INDEPENDENT_ATTR-NOT: freestandingExprMacro
188
- // INDEPENDENT_ATTR-NOT: freestandingDeclMacro
204
+ @#^INDEPENDENT? check= INDEPENDENT_ATTR;check= INDEPENDENT_ATTR_NOT^#
189
205
// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedAccessorMacro[#Accessor Macro#]; name=AttachedAccessorMacro
190
206
// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedMemberMacro[#Member Macro#]; name=AttachedMemberMacro
191
207
// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedMemberMacroWithArgs({#arg1: Int#})[#Member Macro#]; name=AttachedMemberMacroWithArgs
192
208
// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedMemberAttributeMacro[#Member Attribute Macro#]; name=AttachedMemberAttributeMacro
193
209
// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedPeerMacro[#Peer Macro#]; name=AttachedPeerMacro
194
210
// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedConformanceMacro[#Extension Macro#]; name=AttachedConformanceMacro
211
+ // INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: BodyMacro[#Body Macro#]; name=BodyMacro
195
212
// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: EverythingMacro[#Expression Macro, Declaration Macro, Accessor Macro, Member Attribute Macro, Member Macro, Peer Macro, Extension Macro#]; name=EverythingMacro
213
+ //
214
+ // INDEPENDENT_ATTR_NOT-NOT: freestandingExprMacro
215
+ // INDEPENDENT_ATTR_NOT-NOT: freestandingDeclMacro
0 commit comments