@@ -126,45 +126,11 @@ extension Parser {
126
126
}
127
127
case . _private:
128
128
return parseAttribute ( hasRequiredArguments: true ) { parser in
129
- let ( unexpectedBeforeLabel, label) = parser. expectIdentifier ( keywordRecovery: true )
130
- let ( unexpectedBeforeColon, colon) = parser. expect ( . colon)
131
- let filename = parser. consumeAnyToken ( )
132
- return . namedAttributeString(
133
- RawNamedAttributeStringArgumentSyntax (
134
- unexpectedBeforeLabel,
135
- nameTok: label,
136
- unexpectedBeforeColon,
137
- colon: colon,
138
- stringOrDeclname: . string( filename) ,
139
- arena: parser. arena
140
- )
141
- )
129
+ return . underscorePrivateAttributeArguments( parser. parseUnderscorePrivateAttributeArguments ( ) )
142
130
}
143
131
case . _dynamicReplacement:
144
132
return parseAttribute ( hasRequiredArguments: true ) { parser in
145
- let ( unexpectedBeforeLabel, label) = parser. expect ( . forKeyword, remapping: . identifier)
146
- let ( unexpectedBeforeColon, colon) = parser. expect ( . colon)
147
- let base : RawTokenSyntax
148
- let args : RawDeclNameArgumentsSyntax ?
149
- if label. isMissing && colon. isMissing && parser. currentToken. isAtStartOfLine {
150
- base = RawTokenSyntax ( missing: . identifier, arena: parser. arena)
151
- args = nil
152
- } else {
153
- ( base, args) = parser. parseDeclNameRef ( [
154
- . zeroArgCompoundNames, . keywordsUsingSpecialNames, . operators,
155
- ] )
156
- }
157
- let method = RawDeclNameSyntax ( declBaseName: base, declNameArguments: args, arena: parser. arena)
158
- return . namedAttributeString(
159
- RawNamedAttributeStringArgumentSyntax (
160
- unexpectedBeforeLabel,
161
- nameTok: label,
162
- unexpectedBeforeColon,
163
- colon: colon,
164
- stringOrDeclname: . declname( method) ,
165
- arena: parser. arena
166
- )
167
- )
133
+ return . dynamicReplacementArguments( parser. parseDynamicReplacementArguments ( ) )
168
134
}
169
135
case . _spi, . _effects, . _objcRuntimeName, . _projectedValueProperty, . _swift_native_objc_runtime_base, . _typeEraser, . _documentation, . _optimize, . _nonSendable, . exclusivity, . inline, . _alignment:
170
136
// Attributes that take a single token as argument. Some examples of these include:
@@ -219,20 +185,7 @@ extension Parser {
219
185
}
220
186
case . _unavailableFromAsync:
221
187
return parseAttribute ( hasRequiredArguments: false ) { parser in
222
- let ( unexpectedBeforeLabel, label) = parser. expectContextualKeyword ( " message " )
223
- let ( unexpectedBeforeColon, colon) = parser. expect ( . colon)
224
- let ( unexpectedBeforeMessage, message) = parser. expect ( . stringLiteral)
225
- return . namedAttributeString(
226
- RawNamedAttributeStringArgumentSyntax (
227
- unexpectedBeforeLabel,
228
- nameTok: label,
229
- unexpectedBeforeColon,
230
- colon: colon,
231
- unexpectedBeforeMessage,
232
- stringOrDeclname: . string( message) ,
233
- arena: parser. arena
234
- )
235
- )
188
+ return . unavailableFromAsyncArguments( parser. parseUnavailableFromAsyncArguments ( ) )
236
189
}
237
190
case . __objc_bridged, . __raw_doc_comment, . _alwaysEmitConformanceMetadata, . _alwaysEmitIntoClient, . _assemblyVision, . _borrowed, . _compilerInitialized, . _custom, . _disfavoredOverload, . _eagerMove, . _exported, . _fixed_layout, . _frozen, . _hasInitialValue, . _hasMissingDesignatedInitializers, . _hasStorage, . _implementationOnly, . _implicitSelfCapture, . _inheritActorContext, . _inheritsConvenienceInitializers, . _marker, . _moveOnly, . _noAllocation, . _noEagerMove, . _noImplicitCopy, . _noLocks, . _noMetadata, . _nonEphemeral, . _nonoverride, . _objc_non_lazy_realization, . _show_in_interface, . _specializeExtension, . _spiOnly, . _staticInitializeObjCMetadata, . _transparent, . _unsafeInheritExecutor, . _weakLinked, . atReasync, . atRethrows, . discardableResult, . dynamicCallable, . dynamicMemberLookup, . frozen, . GKInspectable, . globalActor, . IBAction, . IBDesignable, . IBInspectable, . IBOutlet, . IBSegueAction, . inlinable, . LLDBDebuggerFunction, . main, . noDerivative, . nonobjc, . NSApplicationMain, . NSCopying,
238
191
. NSManaged, . objcMembers, . preconcurrency, . propertyWrapper, . requires_stored_property_inits, . resultBuilder, . runtimeMetadata, . Sendable, . testable, . typeWrapper, . typeWrapperIgnored, . UIApplicationMain, . unsafe_no_objc_tagged_pointer, . usableFromInline, . warn_unqualified_access,
@@ -926,6 +879,66 @@ extension Parser {
926
879
}
927
880
}
928
881
882
+ extension Parser {
883
+ mutating func parseUnderscorePrivateAttributeArguments( ) -> RawUnderscorePrivateAttributeArgumentsSyntax {
884
+ let ( unexpectedBeforeLabel, label) = self . expectContextualKeyword ( " sourceFile " )
885
+ let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
886
+ let ( unexpectedBeforeFilename, filename) = self . expect ( . stringLiteral)
887
+ return RawUnderscorePrivateAttributeArgumentsSyntax (
888
+ unexpectedBeforeLabel,
889
+ sourceFileLabel: label,
890
+ unexpectedBeforeColon,
891
+ colon: colon,
892
+ unexpectedBeforeFilename,
893
+ filename: filename,
894
+ arena: self . arena
895
+ )
896
+ }
897
+ }
898
+
899
+ extension Parser {
900
+ mutating func parseDynamicReplacementArguments( ) -> RawDynamicReplacementArgumentsSyntax {
901
+ let ( unexpectedBeforeLabel, label) = self . expect ( . forKeyword, remapping: . identifier)
902
+ let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
903
+ let base : RawTokenSyntax
904
+ let args : RawDeclNameArgumentsSyntax ?
905
+ if label. isMissing && colon. isMissing && self . currentToken. isAtStartOfLine {
906
+ base = RawTokenSyntax ( missing: . identifier, arena: self . arena)
907
+ args = nil
908
+ } else {
909
+ ( base, args) = self . parseDeclNameRef ( [
910
+ . zeroArgCompoundNames, . keywordsUsingSpecialNames, . operators,
911
+ ] )
912
+ }
913
+ let method = RawDeclNameSyntax ( declBaseName: base, declNameArguments: args, arena: self . arena)
914
+ return RawDynamicReplacementArgumentsSyntax (
915
+ unexpectedBeforeLabel,
916
+ forLabel: label,
917
+ unexpectedBeforeColon,
918
+ colon: colon,
919
+ declname: method,
920
+ arena: self . arena
921
+ )
922
+ }
923
+ }
924
+
925
+ extension Parser {
926
+ mutating func parseUnavailableFromAsyncArguments( ) -> RawUnavailableFromAsyncArgumentsSyntax {
927
+ let ( unexpectedBeforeLabel, label) = self . expectContextualKeyword ( " message " )
928
+ let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
929
+ let ( unexpectedBeforeMessage, message) = self . expect ( . stringLiteral)
930
+ return RawUnavailableFromAsyncArgumentsSyntax (
931
+ unexpectedBeforeLabel,
932
+ messageLabel: label,
933
+ unexpectedBeforeColon,
934
+ colon: colon,
935
+ unexpectedBeforeMessage,
936
+ message: message,
937
+ arena: self . arena
938
+ )
939
+ }
940
+ }
941
+
929
942
// MARK: Lookahead
930
943
931
944
extension Parser . Lookahead {
0 commit comments