Skip to content

Commit 9fc1cfd

Browse files
committed
[cxx-interop] Add support for C++ increment decrement operations: Squash
1 parent ef6d43e commit 9fc1cfd

File tree

5 files changed

+32
-0
lines changed

5 files changed

+32
-0
lines changed

lib/ClangImporter/ImportName.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1802,6 +1802,8 @@ ImportedName NameImporter::importNameImpl(const clang::NamedDecl *D,
18021802
case clang::OverloadedOperatorKind::OO_GreaterEqual:
18031803
case clang::OverloadedOperatorKind::OO_AmpAmp:
18041804
case clang::OverloadedOperatorKind::OO_PipePipe:
1805+
case clang::OverloadedOperatorKind::OO_PlusPlus:
1806+
case clang::OverloadedOperatorKind::OO_MinusMinus:
18051807
baseName = clang::getOperatorSpelling(op);
18061808
isFunction = true;
18071809
argumentNames.resize(

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,14 @@ inline LoadableIntWrapper operator>>(LoadableIntWrapper lhs, LoadableIntWrapper
4545
return LoadableIntWrapper{.value = lhs.value >> rhs.value};
4646
}
4747

48+
inline LoadableIntWrapper operator++(LoadableIntWrapper lhs) {
49+
return LoadableIntWrapper{.value = lhs.value++};
50+
}
51+
52+
inline LoadableIntWrapper operator--(LoadableIntWrapper lhs) {
53+
return LoadableIntWrapper{.value = lhs.value--};
54+
}
55+
4856
inline bool operator<(LoadableIntWrapper lhs, LoadableIntWrapper rhs) { return lhs.value < rhs.value; }
4957

5058
inline bool operator>(LoadableIntWrapper lhs, LoadableIntWrapper rhs) { return lhs.value > rhs.value; }

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
// CHECK-NEXT: func | (lhs: LoadableIntWrapper, rhs: LoadableIntWrapper) -> LoadableIntWrapper
1111
// CHECK-NEXT: func << (lhs: LoadableIntWrapper, rhs: LoadableIntWrapper) -> LoadableIntWrapper
1212
// CHECK-NEXT: func >> (lhs: LoadableIntWrapper, rhs: LoadableIntWrapper) -> LoadableIntWrapper
13+
// CHECK-NEXT: func ++ (lhs: LoadableIntWrapper) -> LoadableIntWrapper
14+
// CHECK-NEXT: func -- (lhs: LoadableIntWrapper) -> LoadableIntWrapper
1315
// CHECK-NEXT: func < (lhs: LoadableIntWrapper, rhs: LoadableIntWrapper) -> Bool
1416
// CHECK-NEXT: func > (lhs: LoadableIntWrapper, rhs: LoadableIntWrapper) -> Bool
1517
// CHECK-NEXT: func == (lhs: LoadableIntWrapper, rhs: LoadableIntWrapper) -> Bool

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ let resultEqualEqual = lhs == rhs
2121
let resultExclaimEqual = lhs != rhs
2222
let resultLessEqual = lhs <= rhs
2323
let resultGreaterEqual = lhs >= rhs
24+
let reusltPlusPlus = lhs ++ rhs
25+
let reusltMinusMinus = lhs -- rhs
2426

2527
var lhsBool = LoadableBoolWrapper(value: true)
2628
var rhsBool = LoadableBoolWrapper(value: false)

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,4 +169,22 @@ OperatorsTestSuite.test("pipe pipe (||)") {
169169
expectEqual(true, result.value)
170170
}
171171

172+
OperatorsTestSuite.test("plus plus (++)") {
173+
let lhs = LoadableIntWrapper(value: 42)
174+
let rhs = LoadableIntWrapper(value: 1)
175+
176+
let result = lhs ++ rhs
177+
178+
expectEqual(43, result.value)
179+
}
180+
181+
OperatorsTestSuite.test("minus minus (--)") {
182+
let lhs = LoadableIntWrapper(value: 42)
183+
let rhs = LoadableIntWrapper(value: 1)
184+
185+
let result = lhs -- 1
186+
187+
expectEqual(41, result.value)
188+
}
189+
172190
runAllTests()

0 commit comments

Comments
 (0)