diff --git a/src/Generator/Passes/CheckOperatorsOverloads.cs b/src/Generator/Passes/CheckOperatorsOverloads.cs index ee9fa0ec..fac8c98f 100644 --- a/src/Generator/Passes/CheckOperatorsOverloads.cs +++ b/src/Generator/Passes/CheckOperatorsOverloads.cs @@ -89,7 +89,7 @@ namespace CppSharp.Passes } } - void CreateIndexer(Class @class, Method @operator) + private void CreateIndexer(Class @class, Method @operator) { var property = new Property { @@ -103,7 +103,7 @@ namespace CppSharp.Passes var returnType = @operator.Type; if (returnType.IsAddress()) { - var pointer = returnType as PointerType; + var pointer = (PointerType) returnType; var qualifiedPointee = pointer.QualifiedPointee; if (!qualifiedPointee.Qualifiers.IsConst) property.SetMethod = @operator; @@ -126,7 +126,7 @@ namespace CppSharp.Passes @operator.GenerationKind = GenerationKind.Internal; } - static void HandleMissingOperatorOverloadPair(Class @class, CXXOperatorKind op1, + private static void HandleMissingOperatorOverloadPair(Class @class, CXXOperatorKind op1, CXXOperatorKind op2) { foreach (var op in @class.Operators.Where( @@ -134,7 +134,7 @@ namespace CppSharp.Passes { int index; var missingKind = CheckMissingOperatorOverloadPair(@class, out index, op1, op2, - op.Parameters.Last().Type); + op.Parameters.First().Type, op.Parameters.Last().Type); if (missingKind == CXXOperatorKind.None || !op.IsGenerated) continue; @@ -154,13 +154,13 @@ namespace CppSharp.Passes } } - static CXXOperatorKind CheckMissingOperatorOverloadPair(Class @class, - out int index, CXXOperatorKind op1, CXXOperatorKind op2, Type type) + static CXXOperatorKind CheckMissingOperatorOverloadPair(Class @class, out int index, + CXXOperatorKind op1, CXXOperatorKind op2, Type typeLeft, Type typeRight) { var first = @class.Operators.FirstOrDefault(o => o.OperatorKind == op1 && - o.Parameters.Last().Type.Equals(type)); + o.Parameters.First().Type.Equals(typeLeft) && o.Parameters.Last().Type.Equals(typeRight)); var second = @class.Operators.FirstOrDefault(o => o.OperatorKind == op2 && - o.Parameters.Last().Type.Equals(type)); + o.Parameters.First().Type.Equals(typeLeft) && o.Parameters.Last().Type.Equals(typeRight)); var hasFirst = first != null; var hasSecond = second != null; diff --git a/tests/Common/Common.Tests.cs b/tests/Common/Common.Tests.cs index 3a1e4d72..89cd8d2e 100644 --- a/tests/Common/Common.Tests.cs +++ b/tests/Common/Common.Tests.cs @@ -16,6 +16,7 @@ public class CommonTests : GeneratorTestFixture using (var foo = new Foo()) { Bar bar = foo; + Assert.IsTrue(Bar.Item.Item1 == bar); } using (var overridesNonDirectVirtual = new OverridesNonDirectVirtual()) { diff --git a/tests/Common/Common.cpp b/tests/Common/Common.cpp index 1e7b3424..5d8c9393 100644 --- a/tests/Common/Common.cpp +++ b/tests/Common/Common.cpp @@ -67,7 +67,7 @@ Bar::Bar(const Foo* foo) { } -Bar::Item Bar::RetItem1() +Bar::Item Bar::RetItem1() const { return Bar::Item1; } @@ -82,6 +82,11 @@ bool Bar::operator ==(const Bar& other) const return A == other.A && B == other.B; } +bool operator ==(Bar::Item item, const Bar& bar) +{ + return item == bar.RetItem1(); +} + Bar2::Nested::operator int() const { return 300; diff --git a/tests/Common/Common.h b/tests/Common/Common.h index 3148d1bf..c4af3b40 100644 --- a/tests/Common/Common.h +++ b/tests/Common/Common.h @@ -73,7 +73,7 @@ struct DLL_API Bar Bar(); Bar(Foo foo); explicit Bar(const Foo* foo); - Item RetItem1(); + Item RetItem1() const; int A; float B; @@ -82,6 +82,8 @@ struct DLL_API Bar bool operator ==(const Bar& other) const; }; +DLL_API bool operator ==(Bar::Item item, const Bar& bar); + class DLL_API Foo2 : public Foo { struct Copy {