@@ -76,13 +76,6 @@ extension MacroRole {
76
76
}
77
77
}
78
78
79
- extension String {
80
- public init ( bufferStart: UnsafePointer < UInt8 > ? , count: Int ) {
81
- let buffer = UnsafeBufferPointer ( start: bufferStart, count: count)
82
- self . init ( decoding: buffer, as: UTF8 . self)
83
- }
84
- }
85
-
86
79
/// Resolve a reference to type metadata into a macro, if posible.
87
80
///
88
81
/// Returns an unmanaged pointer to an ExportedMacro instance that describes
@@ -117,19 +110,17 @@ public func destroyMacro(
117
110
118
111
@_cdecl ( " swift_ASTGen_resolveExecutableMacro " )
119
112
public func resolveExecutableMacro(
120
- moduleName: UnsafePointer < UInt8 > ,
121
- moduleNameLength: Int ,
122
- typeName: UnsafePointer < UInt8 > ,
123
- typeNameLength: Int ,
113
+ moduleName: UnsafePointer < CChar > ,
114
+ typeName: UnsafePointer < CChar > ,
124
115
pluginOpaqueHandle: UnsafeMutableRawPointer
125
116
) -> UnsafeRawPointer {
126
117
// NOTE: This doesn't actually resolve anything.
127
118
// Executable plugins is "trusted" to have the macro implementation. If not,
128
119
// the actual expansion fails.
129
120
let exportedPtr = UnsafeMutablePointer< ExportedExecutableMacro> . allocate( capacity: 1 )
130
121
exportedPtr. initialize ( to: . init(
131
- moduleName: String ( bufferStart : moduleName, count : moduleNameLength ) ,
132
- typeName: String ( bufferStart : typeName, count : typeNameLength ) ,
122
+ moduleName: String ( cString : moduleName) ,
123
+ typeName: String ( cString : typeName) ,
133
124
plugin: CompilerPlugin ( opaqueHandle: pluginOpaqueHandle) ) )
134
125
return UnsafeRawPointer ( exportedPtr)
135
126
}
@@ -143,34 +134,6 @@ public func destroyExecutableMacro(
143
134
macroPtr. deallocate ( )
144
135
}
145
136
146
- /// Allocate a copy of the given string as a UTF-8 string.
147
- func allocateUTF8String(
148
- _ string: String ,
149
- nullTerminated: Bool = false
150
- ) -> ( UnsafePointer < UInt8 > , Int ) {
151
- var string = string
152
- return string. withUTF8 { utf8 in
153
- let capacity = utf8. count + ( nullTerminated ? 1 : 0 )
154
- let ptr = UnsafeMutablePointer< UInt8> . allocate(
155
- capacity: capacity
156
- )
157
- if let baseAddress = utf8. baseAddress {
158
- ptr. initialize ( from: baseAddress, count: utf8. count)
159
- }
160
-
161
- if nullTerminated {
162
- ptr [ utf8. count] = 0
163
- }
164
-
165
- return ( UnsafePointer < UInt8 > ( ptr) , utf8. count)
166
- }
167
- }
168
-
169
- @_cdecl ( " swift_ASTGen_freeString " )
170
- public func freeString( pointer: UnsafePointer < UInt8 > ? ) {
171
- pointer? . deallocate ( )
172
- }
173
-
174
137
/// Diagnostics produced here.
175
138
enum ASTGenMacroDiagnostic : DiagnosticMessage , FixItMessage {
176
139
case thrownError( Error )
@@ -251,19 +214,16 @@ fileprivate func identifierFromStringLiteral(_ node: ExprSyntax) -> String? {
251
214
/// argument matching the corresponding parameter.
252
215
@_cdecl ( " swift_ASTGen_checkMacroDefinition " )
253
216
func checkMacroDefinition(
254
- diagEnginePtr: UnsafeMutablePointer < UInt8 > ,
217
+ diagEnginePtr: UnsafeMutableRawPointer ,
255
218
sourceFilePtr: UnsafeRawPointer ,
256
219
macroLocationPtr: UnsafePointer < UInt8 > ,
257
- externalMacroPointer: UnsafeMutablePointer < UnsafePointer < UInt8 > ? > ,
258
- externalMacroLength: UnsafeMutablePointer < Int > ,
220
+ externalMacroOutPtr: UnsafeMutablePointer < BridgedString > ,
259
221
replacementsPtr: UnsafeMutablePointer < UnsafeMutablePointer < Int > ? > ,
260
222
numReplacementsPtr: UnsafeMutablePointer < Int >
261
223
) -> Int {
262
- // Clear out the "out" parameters.
263
- externalMacroPointer. pointee = nil
264
- externalMacroLength. pointee = 0
265
- replacementsPtr. pointee = nil
266
- numReplacementsPtr. pointee = 0
224
+ // Assert "out" parameters are initialized.
225
+ assert ( externalMacroOutPtr. pointee. isEmptyInitialized)
226
+ assert ( replacementsPtr. pointee == nil && numReplacementsPtr. pointee == 0 )
267
227
268
228
let sourceFilePtr = sourceFilePtr. bindMemory ( to: ExportedSourceFile . self, capacity: 1 )
269
229
@@ -304,8 +264,8 @@ func checkMacroDefinition(
304
264
}
305
265
306
266
// Form the "ModuleName.TypeName" result string.
307
- ( externalMacroPointer . pointee, externalMacroLength . pointee ) =
308
- allocateUTF8String ( " \( module) . \( type) " , nullTerminated: true )
267
+ externalMacroOutPtr . pointee =
268
+ allocateBridgedString ( " \( module) . \( type) " , nullTerminated: true )
309
269
310
270
// Translate this into a use of #externalMacro.
311
271
let expansionSourceSyntax : ExprSyntax =
@@ -368,15 +328,15 @@ func checkMacroDefinition(
368
328
}
369
329
370
330
// Form the "ModuleName.TypeName" result string.
371
- ( externalMacroPointer . pointee, externalMacroLength . pointee ) =
372
- allocateUTF8String ( " \( module) . \( type) " , nullTerminated: true )
331
+ externalMacroOutPtr . pointee =
332
+ allocateBridgedString ( " \( module) . \( type) " , nullTerminated: true )
373
333
return Int ( BridgedMacroDefinitionKind . externalMacro. rawValue)
374
334
375
335
case let . expansion( expansionSyntax, replacements: replacements) :
376
336
// Provide the expansion syntax.
377
- ( externalMacroPointer . pointee, externalMacroLength . pointee ) =
378
- allocateUTF8String ( expansionSyntax. trimmedDescription,
379
- nullTerminated: true )
337
+ externalMacroOutPtr . pointee =
338
+ allocateBridgedString ( expansionSyntax. trimmedDescription,
339
+ nullTerminated: true )
380
340
381
341
382
342
// If there are no replacements, we're done.
@@ -429,44 +389,30 @@ public func freeExpansionReplacements(
429
389
// Make an expansion result for '@_cdecl' function caller.
430
390
func makeExpansionOutputResult(
431
391
expandedSource: String ? ,
432
- outputPointer: UnsafeMutablePointer < UnsafePointer < UInt8 > ? > ,
433
- outputLength: UnsafeMutablePointer < Int >
392
+ outputPointer: UnsafeMutablePointer < BridgedString >
434
393
) -> Int {
435
394
guard var expandedSource = expandedSource else {
395
+ outputPointer. pointee = BridgedString ( )
436
396
return - 1
437
397
}
438
-
439
- // Form the result buffer for our caller.
440
- expandedSource. withUTF8 { utf8 in
441
- let evaluatedResultPtr = UnsafeMutablePointer< UInt8> . allocate( capacity: utf8. count + 1 )
442
- if let baseAddress = utf8. baseAddress {
443
- evaluatedResultPtr. initialize ( from: baseAddress, count: utf8. count)
444
- }
445
- evaluatedResultPtr [ utf8. count] = 0
446
-
447
- outputPointer. pointee = UnsafePointer ( evaluatedResultPtr)
448
- outputLength. pointee = utf8. count
449
- }
398
+ outputPointer. pointee = allocateBridgedString ( expandedSource, nullTerminated: true )
450
399
return 0
451
400
}
452
401
453
402
@_cdecl ( " swift_ASTGen_expandFreestandingMacro " )
454
403
@usableFromInline
455
404
func expandFreestandingMacro(
456
- diagEnginePtr: UnsafeMutablePointer < UInt8 > ,
405
+ diagEnginePtr: UnsafeMutableRawPointer ,
457
406
macroPtr: UnsafeRawPointer ,
458
407
macroKind: UInt8 ,
459
- discriminatorText: UnsafePointer < UInt8 > ,
460
- discriminatorTextLength: Int ,
408
+ discriminatorText: UnsafePointer < CChar > ,
461
409
rawMacroRole: UInt8 ,
462
410
sourceFilePtr: UnsafeRawPointer ,
463
411
sourceLocationPtr: UnsafePointer < UInt8 > ? ,
464
- expandedSourcePointer: UnsafeMutablePointer < UnsafePointer < UInt8 > ? > ,
465
- expandedSourceLength: UnsafeMutablePointer < Int >
412
+ expandedSourceOutPtr: UnsafeMutablePointer < BridgedString >
466
413
) -> Int {
467
414
// We didn't expand anything so far.
468
- expandedSourcePointer. pointee = nil
469
- expandedSourceLength. pointee = 0
415
+ assert ( expandedSourceOutPtr. pointee. isEmptyInitialized)
470
416
471
417
guard let sourceLocationPtr = sourceLocationPtr else {
472
418
print ( " NULL source location " )
@@ -486,10 +432,8 @@ func expandFreestandingMacro(
486
432
return 1
487
433
}
488
434
489
- let discriminatorBuffer = UnsafeBufferPointer (
490
- start: discriminatorText, count: discriminatorTextLength
491
- )
492
- let discriminator = String ( decoding: discriminatorBuffer, as: UTF8 . self)
435
+
436
+ let discriminator = String ( cString: discriminatorText)
493
437
494
438
let macroRole = MacroRole ( rawMacroRole: rawMacroRole)
495
439
let expandedSource : String ?
@@ -514,15 +458,14 @@ func expandFreestandingMacro(
514
458
515
459
return makeExpansionOutputResult (
516
460
expandedSource: expandedSource,
517
- outputPointer: expandedSourcePointer,
518
- outputLength: expandedSourceLength
461
+ outputPointer: expandedSourceOutPtr
519
462
)
520
463
}
521
464
522
465
func expandFreestandingMacroIPC(
523
466
macroPtr: UnsafeRawPointer ,
524
467
macroRole: MacroRole ,
525
- diagEnginePtr: UnsafeMutablePointer < UInt8 > ,
468
+ diagEnginePtr: UnsafeMutableRawPointer ,
526
469
expansionSyntax: FreestandingMacroExpansionSyntax ,
527
470
sourceFilePtr: UnsafePointer < ExportedSourceFile > ,
528
471
discriminator: String
@@ -597,7 +540,7 @@ func expandFreestandingMacroIPC(
597
540
func expandFreestandingMacroInProcess(
598
541
macroPtr: UnsafeRawPointer ,
599
542
macroRole: MacroRole ,
600
- diagEnginePtr: UnsafeMutablePointer < UInt8 > ,
543
+ diagEnginePtr: UnsafeMutableRawPointer ,
601
544
expansionSyntax: FreestandingMacroExpansionSyntax ,
602
545
sourceFilePtr: UnsafePointer < ExportedSourceFile > ,
603
546
discriminator: String
@@ -717,28 +660,23 @@ func findSyntaxNodeInSourceFile<Node: SyntaxProtocol>(
717
660
@_cdecl ( " swift_ASTGen_expandAttachedMacro " )
718
661
@usableFromInline
719
662
func expandAttachedMacro(
720
- diagEnginePtr: UnsafeMutablePointer < UInt8 > ,
663
+ diagEnginePtr: UnsafeMutableRawPointer ,
721
664
macroPtr: UnsafeRawPointer ,
722
665
macroKind: UInt8 ,
723
- discriminatorText: UnsafePointer < UInt8 > ,
724
- discriminatorTextLength: Int ,
725
- qualifiedTypeText: UnsafePointer < UInt8 > ,
726
- qualifiedTypeLength: Int ,
727
- conformanceListText: UnsafePointer < UInt8 > ,
728
- conformanceListLength: Int ,
666
+ discriminatorText: UnsafePointer < CChar > ,
667
+ qualifiedTypeText: UnsafePointer < CChar > ,
668
+ conformanceListText: UnsafePointer < CChar > ,
729
669
rawMacroRole: UInt8 ,
730
670
customAttrSourceFilePtr: UnsafeRawPointer ,
731
671
customAttrSourceLocPointer: UnsafePointer < UInt8 > ? ,
732
672
declarationSourceFilePtr: UnsafeRawPointer ,
733
673
attachedTo declarationSourceLocPointer: UnsafePointer < UInt8 > ? ,
734
674
parentDeclSourceFilePtr: UnsafeRawPointer ? ,
735
675
parentDeclSourceLocPointer: UnsafePointer < UInt8 > ? ,
736
- expandedSourcePointer: UnsafeMutablePointer < UnsafePointer < UInt8 > ? > ,
737
- expandedSourceLength: UnsafeMutablePointer < Int >
676
+ expandedSourceOutPtr: UnsafeMutablePointer < BridgedString >
738
677
) -> Int {
739
678
// We didn't expand anything so far.
740
- expandedSourcePointer. pointee = nil
741
- expandedSourceLength. pointee = 0
679
+ assert ( expandedSourceOutPtr. pointee. isEmptyInitialized)
742
680
743
681
// Dig out the custom attribute for the attached macro declarations.
744
682
guard let customAttrNode = findSyntaxNodeInSourceFile (
@@ -772,21 +710,9 @@ func expandAttachedMacro(
772
710
let declarationSourceFilePtr = declarationSourceFilePtr. bindMemory ( to: ExportedSourceFile . self, capacity: 1 )
773
711
let parentDeclSourceFilePtr = parentDeclSourceFilePtr? . bindMemory ( to: ExportedSourceFile . self, capacity: 1 )
774
712
775
- let discriminatorBuffer = UnsafeBufferPointer (
776
- start: discriminatorText, count: discriminatorTextLength
777
- )
778
- let discriminator = String ( decoding: discriminatorBuffer, as: UTF8 . self)
779
-
780
- let qualifiedTypeBuffer = UnsafeBufferPointer (
781
- start: qualifiedTypeText, count: qualifiedTypeLength
782
- )
783
- let qualifiedType = String ( decoding: qualifiedTypeBuffer, as: UTF8 . self)
784
-
785
- let conformanceListBuffer = UnsafeBufferPointer (
786
- start: conformanceListText, count: conformanceListLength
787
- )
788
- let conformanceList = String ( decoding: conformanceListBuffer, as: UTF8 . self)
789
-
713
+ let discriminator = String ( cString: discriminatorText)
714
+ let qualifiedType = String ( cString: qualifiedTypeText)
715
+ let conformanceList = String ( cString: conformanceListText)
790
716
791
717
let expandedSource : String ?
792
718
switch MacroPluginKind ( rawValue: macroKind) ! {
@@ -822,13 +748,12 @@ func expandAttachedMacro(
822
748
823
749
return makeExpansionOutputResult (
824
750
expandedSource: expandedSource,
825
- outputPointer: expandedSourcePointer,
826
- outputLength: expandedSourceLength
751
+ outputPointer: expandedSourceOutPtr
827
752
)
828
753
}
829
754
830
755
func expandAttachedMacroIPC(
831
- diagEnginePtr: UnsafeMutablePointer < UInt8 > ,
756
+ diagEnginePtr: UnsafeMutableRawPointer ,
832
757
macroPtr: UnsafeRawPointer ,
833
758
rawMacroRole: UInt8 ,
834
759
discriminator: String ,
@@ -962,7 +887,7 @@ func expandAttachedMacroIPC(
962
887
}
963
888
964
889
func expandAttachedMacroInProcess(
965
- diagEnginePtr: UnsafeMutablePointer < UInt8 > ,
890
+ diagEnginePtr: UnsafeMutableRawPointer ,
966
891
macroPtr: UnsafeRawPointer ,
967
892
rawMacroRole: UInt8 ,
968
893
discriminator: String ,
0 commit comments