Skip to content

Commit 802d066

Browse files
add test & comment
1 parent 4224eab commit 802d066

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

lib/Interpreter/CppInterOp.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1964,6 +1964,8 @@ namespace Cpp {
19641964
// even when we supply the object parameter. Therefore we only use it in
19651965
// cases where we know it works and set this variable to true when we do.
19661966

1967+
// true if not a overloaded operators or the overloaded operator is call
1968+
// operator
19671969
bool op_flag = !FD->isOverloadedOperator() ||
19681970
FD->getOverloadedOperator() == clang::OO_Call;
19691971

unittests/CppInterOp/FunctionReflectionTest.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1684,6 +1684,45 @@ TEST(FunctionReflectionTest, GetFunctionCallWrapper) {
16841684
bool boolean = false;
16851685
FCI_op.Invoke((void*)&boolean, {args, /*args_size=*/1}, object);
16861686
EXPECT_TRUE(boolean);
1687+
1688+
Interp->process(R"(
1689+
namespace N1 {
1690+
1691+
template <typename... _Tn> struct Klass3 {
1692+
using type = int;
1693+
};
1694+
1695+
namespace N2 {
1696+
template <typename T1, typename T2> class Klass1 {};
1697+
1698+
template <typename T1, typename T2> class Klass2 {};
1699+
1700+
template <typename T1, typename T2, typename T3, typename T4>
1701+
constexpr Klass2<
1702+
T1, typename Klass3<T2, Klass1<T3, T4>>::type>
1703+
operator+(const Klass2<T1, T2> &__lhs,
1704+
const Klass1<T3, T4> &__rhs) {
1705+
typedef Klass1<T3, T4> __T1;
1706+
typedef typename Klass3<T2, __T1>::type __ct;
1707+
typedef Klass2<T1, __ct> __T2;
1708+
return {};
1709+
}
1710+
} // namespace N2
1711+
} // namespace N1
1712+
1713+
N1::N2::Klass2<int, double> K1;
1714+
N1::N2::Klass1<char, float> K2;
1715+
)");
1716+
1717+
Cpp::TCppType_t K1 = Cpp::GetTypeFromScope(Cpp::GetNamed("K1"));
1718+
Cpp::TCppType_t K2 = Cpp::GetTypeFromScope(Cpp::GetNamed("K2"));
1719+
operators.clear();
1720+
Cpp::GetOperator(Cpp::GetScope("N2", Cpp::GetScope("N1")), Cpp::OP_Plus, operators);
1721+
EXPECT_EQ(operators.size(), 1);
1722+
Cpp::TCppFunction_t kop =
1723+
Cpp::BestOverloadFunctionMatch(operators, {}, {K1, K2});
1724+
auto chrono_op_fn_callable = Cpp::MakeFunctionCallable(kop);
1725+
EXPECT_EQ(chrono_op_fn_callable.getKind(), Cpp::JitCall::kGenericCall);
16871726
}
16881727

16891728
TEST(FunctionReflectionTest, IsConstMethod) {

0 commit comments

Comments
 (0)