Skip to content

Commit 53986b6

Browse files
committed
[cxx-interop][SwiftCompilerSources] Use swift::DiagnosticArgument instead of BridgedDiagnosticArgument
This also removes `BridgedDiagnosticArgumentKind` in favor of `swift::DiagnosticArgumentKind`, bringing us one step closer to bridging the entire diagnostic engine via C++ interop. rdar://83361087
1 parent 1821b62 commit 53986b6

File tree

3 files changed

+13
-47
lines changed

3 files changed

+13
-47
lines changed

SwiftCompilerSources/Sources/AST/DiagnosticEngine.swift

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,26 +16,17 @@ import Basic
1616

1717
public typealias DiagID = BridgedDiagID
1818

19-
extension BridgedDiagnosticArgument {
20-
init(stringRef val: BridgedStringRef) {
21-
self.init(kind: .stringRef, value: .init(stringRefValue: val))
22-
}
23-
init(int val: Int) {
24-
self.init(kind: .int, value: .init(intValue: val))
25-
}
26-
}
27-
2819
public protocol DiagnosticArgument {
29-
func _withBridgedDiagnosticArgument(_ fn: (BridgedDiagnosticArgument) -> Void)
20+
func _withBridgedDiagnosticArgument(_ fn: (swift.DiagnosticArgument) -> Void)
3021
}
3122
extension String: DiagnosticArgument {
32-
public func _withBridgedDiagnosticArgument(_ fn: (BridgedDiagnosticArgument) -> Void) {
33-
withBridgedStringRef { fn(BridgedDiagnosticArgument(stringRef: $0)) }
23+
public func _withBridgedDiagnosticArgument(_ fn: (swift.DiagnosticArgument) -> Void) {
24+
withBridgedStringRef { fn(swift.DiagnosticArgument(llvm.StringRef($0))) }
3425
}
3526
}
3627
extension Int: DiagnosticArgument {
37-
public func _withBridgedDiagnosticArgument(_ fn: (BridgedDiagnosticArgument) -> Void) {
38-
fn(BridgedDiagnosticArgument(int: self))
28+
public func _withBridgedDiagnosticArgument(_ fn: (swift.DiagnosticArgument) -> Void) {
29+
fn(swift.DiagnosticArgument(Int32(self)))
3930
}
4031
}
4132

@@ -82,7 +73,7 @@ public struct DiagnosticEngine {
8273

8374
let bridgedSourceLoc: swift.SourceLoc = position.bridged
8475
let bridgedHighlightRange: swift.CharSourceRange = highlight.bridged
85-
var bridgedArgs: [BridgedDiagnosticArgument] = []
76+
var bridgedArgs: [swift.DiagnosticArgument] = []
8677
var bridgedFixIts: [swift.DiagnosticInfo.FixIt] = []
8778

8879
// Build a higher-order function to wrap every 'withBridgedXXX { ... }'

include/swift/AST/ASTBridging.h

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
#include "swift/Basic/BasicBridging.h"
1717
#include "swift/Basic/Compiler.h"
18+
#include "swift/AST/DiagnosticEngine.h"
1819
#include <stdbool.h>
1920
#include <stddef.h>
2021

@@ -38,19 +39,6 @@ typedef enum ENUM_EXTENSIBILITY_ATTR(open) BridgedDiagID : uint32_t {
3839
#include "swift/AST/DiagnosticsAll.def"
3940
} BridgedDiagID;
4041

41-
typedef enum ENUM_EXTENSIBILITY_ATTR(open) BridgedDiagnosticArgumentKind {
42-
BridgedDiagnosticArgumentKind_StringRef,
43-
BridgedDiagnosticArgumentKind_Int,
44-
} BridgedDiagnosticArgumentKind;
45-
46-
typedef struct {
47-
BridgedDiagnosticArgumentKind kind;
48-
union {
49-
BridgedStringRef stringRefValue;
50-
SwiftInt intValue;
51-
} value;
52-
} BridgedDiagnosticArgument;
53-
5442
typedef struct {
5543
void * _Nonnull object;
5644
} BridgedDiagnosticEngine;

lib/AST/ASTBridging.cpp

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,33 +23,20 @@ DiagnosticEngine *getDiagnosticEngine(const BridgedDiagnosticEngine &bridged) {
2323
return static_cast<DiagnosticEngine *>(bridged.object);
2424
}
2525

26-
/// BridgedDiagnosticArgument -> DiagnosticArgument
27-
DiagnosticArgument
28-
getDiagnosticArgument(const BridgedDiagnosticArgument &bridged) {
29-
switch (bridged.kind) {
30-
case BridgedDiagnosticArgumentKind_StringRef:
31-
return {getStringRef(bridged.value.stringRefValue)};
32-
case BridgedDiagnosticArgumentKind_Int:
33-
return {(int)bridged.value.intValue};
34-
}
35-
llvm_unreachable("unhandled enum value");
36-
}
37-
3826
} // namespace
3927

4028
void DiagnosticEngine_diagnose(
4129
BridgedDiagnosticEngine bridgedEngine, SourceLoc loc,
4230
BridgedDiagID bridgedDiagID,
43-
BridgedArrayRef /*BridgedDiagnosticArgument*/ bridgedArguments,
31+
BridgedArrayRef /*DiagnosticArgument*/ bridgedArguments,
4432
CharSourceRange highlight,
4533
BridgedArrayRef /*DiagnosticInfo::FixIt*/ bridgedFixIts) {
4634
auto *D = getDiagnosticEngine(bridgedEngine);
4735

4836
auto diagID = static_cast<DiagID>(bridgedDiagID);
4937
SmallVector<DiagnosticArgument, 2> arguments;
50-
for (auto bridgedArg :
51-
getArrayRef<BridgedDiagnosticArgument>(bridgedArguments)) {
52-
arguments.push_back(getDiagnosticArgument(bridgedArg));
38+
for (auto arg : getArrayRef<DiagnosticArgument>(bridgedArguments)) {
39+
arguments.push_back(arg);
5340
}
5441
auto inflight = D->diagnose(loc, diagID, arguments);
5542

@@ -59,9 +46,9 @@ void DiagnosticEngine_diagnose(
5946
}
6047

6148
// Add fix-its.
62-
for (auto bridgedFixIt : getArrayRef<DiagnosticInfo::FixIt>(bridgedFixIts)) {
63-
auto range = bridgedFixIt.getRange();
64-
auto text = bridgedFixIt.getText();
49+
for (auto fixIt : getArrayRef<DiagnosticInfo::FixIt>(bridgedFixIts)) {
50+
auto range = fixIt.getRange();
51+
auto text = fixIt.getText();
6552
inflight.fixItReplaceChars(range.getStart(), range.getEnd(), text);
6653
}
6754
}

0 commit comments

Comments
 (0)