Skip to content

Commit 8e4054f

Browse files
authored
Merge pull request #39177 from egorzhdan/cxx-operator-caret
C++ Interop: import caret operators
2 parents 22551cf + b506057 commit 8e4054f

File tree

5 files changed

+16
-0
lines changed

5 files changed

+16
-0
lines changed

lib/ClangImporter/ImportName.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1721,6 +1721,7 @@ ImportedName NameImporter::importNameImpl(const clang::NamedDecl *D,
17211721
case clang::OverloadedOperatorKind::OO_Star:
17221722
case clang::OverloadedOperatorKind::OO_Slash:
17231723
case clang::OverloadedOperatorKind::OO_Percent:
1724+
case clang::OverloadedOperatorKind::OO_Caret:
17241725
case clang::OverloadedOperatorKind::OO_Amp:
17251726
case clang::OverloadedOperatorKind::OO_Pipe:
17261727
case clang::OverloadedOperatorKind::OO_Less:

test/Interop/Cxx/operators/Inputs/non-member-inline.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ inline LoadableIntWrapper operator%(LoadableIntWrapper lhs, LoadableIntWrapper r
2525
return LoadableIntWrapper{.value = lhs.value % rhs.value};
2626
}
2727

28+
inline LoadableIntWrapper operator^(LoadableIntWrapper lhs, LoadableIntWrapper rhs) {
29+
return LoadableIntWrapper{.value = lhs.value ^ rhs.value};
30+
}
31+
2832
inline LoadableIntWrapper operator&(LoadableIntWrapper lhs, LoadableIntWrapper rhs) {
2933
return LoadableIntWrapper{.value = lhs.value & rhs.value};
3034
}

test/Interop/Cxx/operators/non-member-inline-module-interface.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
// CHECK-NEXT: func * (lhs: LoadableIntWrapper, rhs: LoadableIntWrapper) -> LoadableIntWrapper
66
// CHECK-NEXT: func / (lhs: LoadableIntWrapper, rhs: LoadableIntWrapper) -> LoadableIntWrapper
77
// CHECK-NEXT: func % (lhs: LoadableIntWrapper, rhs: LoadableIntWrapper) -> LoadableIntWrapper
8+
// CHECK-NEXT: func ^ (lhs: LoadableIntWrapper, rhs: LoadableIntWrapper) -> LoadableIntWrapper
89
// CHECK-NEXT: func & (lhs: LoadableIntWrapper, rhs: LoadableIntWrapper) -> LoadableIntWrapper
910
// CHECK-NEXT: func | (lhs: LoadableIntWrapper, rhs: LoadableIntWrapper) -> LoadableIntWrapper
1011
// CHECK-NEXT: func << (lhs: LoadableIntWrapper, rhs: LoadableIntWrapper) -> LoadableIntWrapper

test/Interop/Cxx/operators/non-member-inline-typechecker.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ let resultMinus = lhs - rhs
1010
let resultStar = lhs * rhs
1111
let resultSlash = lhs / rhs
1212
let resultPercent = lhs % rhs
13+
let resultCaret = lhs ^ rhs
1314
let resultAmp = lhs & rhs
1415
let resultPipe = lhs | rhs
1516
let resultLessLess = lhs << rhs

test/Interop/Cxx/operators/non-member-inline.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,15 @@ OperatorsTestSuite.test("slash (/)") {
4343
expectEqual(1, result.value)
4444
}
4545

46+
OperatorsTestSuite.test("caret (^)") {
47+
let lhs = LoadableIntWrapper(value: 42)
48+
let rhs = LoadableIntWrapper(value: 23)
49+
50+
let result = lhs ^ rhs
51+
52+
expectEqual(61, result.value)
53+
}
54+
4655
OperatorsTestSuite.test("percent (%)") {
4756
let lhs = LoadableIntWrapper(value: 11)
4857
let rhs = LoadableIntWrapper(value: 2)

0 commit comments

Comments
 (0)