From d481cf807825358676b394bce9c82f9fb9f081f9 Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Sat, 23 Aug 2014 19:07:25 +0300 Subject: [PATCH] Fixed the renaming of overloads generated because of default arguments. Signed-off-by: Dimitar Dobrev --- src/AST/Method.cs | 1 + src/Generator/Passes/RenamePass.cs | 8 ++++---- tests/CSharpTemp/CSharpTemp.cpp | 16 ++++++++-------- tests/CSharpTemp/CSharpTemp.h | 19 ++++++++++--------- 4 files changed, 23 insertions(+), 21 deletions(-) diff --git a/src/AST/Method.cs b/src/AST/Method.cs index 557ba730..c2216eba 100644 --- a/src/AST/Method.cs +++ b/src/AST/Method.cs @@ -88,6 +88,7 @@ namespace CppSharp.AST IsImplicit = method.IsImplicit; IsOverride = method.IsOverride; IsProxy = method.IsProxy; + IsStatic = method.IsStatic; Kind = method.Kind; IsDefaultConstructor = method.IsDefaultConstructor; IsCopyConstructor = method.IsCopyConstructor; diff --git a/src/Generator/Passes/RenamePass.cs b/src/Generator/Passes/RenamePass.cs index cc13910e..6cd3eae7 100644 --- a/src/Generator/Passes/RenamePass.cs +++ b/src/Generator/Passes/RenamePass.cs @@ -13,11 +13,11 @@ namespace CppSharp.Passes /// public abstract class RenamePass : TranslationUnitPass { - public class ParameterMappedTypeComparer : IEqualityComparer + public class ParameterComparer : IEqualityComparer { public bool Equals(Parameter x, Parameter y) { - return x.QualifiedType == y.QualifiedType; + return x.QualifiedType == y.QualifiedType && x.GenerationKind == y.GenerationKind; } public int GetHashCode(Parameter obj) @@ -134,10 +134,10 @@ namespace CppSharp.Passes if (method != null) { return ((Class) method.Namespace).Methods.Where( - m => m.Parameters.SequenceEqual(function.Parameters, new ParameterMappedTypeComparer())); + m => m.Parameters.SequenceEqual(function.Parameters, new ParameterComparer())); } return function.Namespace.Functions.Where( - f => f.Parameters.SequenceEqual(function.Parameters, new ParameterMappedTypeComparer())); + f => f.Parameters.SequenceEqual(function.Parameters, new ParameterComparer())); } public override bool VisitEnumItem(Enumeration.Item item) diff --git a/tests/CSharpTemp/CSharpTemp.cpp b/tests/CSharpTemp/CSharpTemp.cpp index c665bf3e..a21a8aa1 100644 --- a/tests/CSharpTemp/CSharpTemp.cpp +++ b/tests/CSharpTemp/CSharpTemp.cpp @@ -232,35 +232,35 @@ UntypedFlags operator|(UntypedFlags lhs, UntypedFlags rhs) return static_cast(static_cast(lhs) | static_cast(rhs)); } -void MethodsWithDefaultValues::DefaultPointer(Foo *ptr) +void MethodsWithDefaultValues::defaultPointer(Foo *ptr) { } -void MethodsWithDefaultValues::DefaultValueType(ValueType bar) +void MethodsWithDefaultValues::defaultValueType(ValueType bar) { } -void MethodsWithDefaultValues::DefaultChar(char c) +void MethodsWithDefaultValues::defaultChar(char c) { } -void MethodsWithDefaultValues::DefaultRefTypeBeforeOthers(Foo foo, int i, Bar::Items item) +void MethodsWithDefaultValues::defaultRefTypeBeforeOthers(Foo foo, int i, Bar::Items item) { } -void MethodsWithDefaultValues::DefaultRefTypeAfterOthers(int i, Bar::Items item, Foo foo) +void MethodsWithDefaultValues::defaultRefTypeAfterOthers(int i, Bar::Items item, Foo foo) { } -void MethodsWithDefaultValues::DefaultRefTypeBeforeAndAfterOthers(int i, Foo foo, Bar::Items item, Baz baz) +void MethodsWithDefaultValues::defaultRefTypeBeforeAndAfterOthers(int i, Foo foo, Bar::Items item, Baz baz) { } -void MethodsWithDefaultValues::DefaultIntAssignedAnEnum(int i) +void MethodsWithDefaultValues::defaultIntAssignedAnEnum(int i) { } -void MethodsWithDefaultValues::DefaultRefAssignedValue(const Foo &fooRef) +void MethodsWithDefaultValues::defaultRefAssignedValue(const Foo &fooRef) { } diff --git a/tests/CSharpTemp/CSharpTemp.h b/tests/CSharpTemp/CSharpTemp.h index 9d5f2d44..7d161481 100644 --- a/tests/CSharpTemp/CSharpTemp.h +++ b/tests/CSharpTemp/CSharpTemp.h @@ -208,16 +208,17 @@ UntypedFlags operator|(UntypedFlags lhs, UntypedFlags rhs); class DLL_API MethodsWithDefaultValues { public: - void DefaultPointer(Foo* ptr = 0); - void DefaultValueType(ValueType bar = ValueType()); - void DefaultChar(char c = 'a'); - void DefaultRefTypeBeforeOthers(Foo foo = Foo(), int i = 5, Bar::Items item = Bar::Item2); - void DefaultRefTypeAfterOthers(int i = 5, Bar::Items item = Bar::Item2, Foo foo = Foo()); - void DefaultRefTypeBeforeAndAfterOthers(int i = 5, Foo foo = Foo(), Bar::Items item = Bar::Item2, Baz baz = Baz()); - void DefaultIntAssignedAnEnum(int i = Bar::Item1); + void defaultPointer(Foo* ptr = 0); + void defaultValueType(ValueType bar = ValueType()); + void defaultChar(char c = 'a'); + void defaultRefTypeBeforeOthers(Foo foo = Foo(), int i = 5, Bar::Items item = Bar::Item2); + void defaultRefTypeAfterOthers(int i = 5, Bar::Items item = Bar::Item2, Foo foo = Foo()); + void defaultRefTypeBeforeAndAfterOthers(int i = 5, Foo foo = Foo(), Bar::Items item = Bar::Item2, Baz baz = Baz()); + void defaultIntAssignedAnEnum(int i = Bar::Item1); + void defaultRefAssignedValue(const Foo& fooRef = Foo()); void DefaultRefAssignedValue(const Foo& fooRef = Foo()); - void DefaultEnumAssignedBitwiseOr(Flags flags = Flags::Flag1 | Flags::Flag2); - void DefaultEnumAssignedBitwiseOrShort(UntypedFlags flags = Flag1 | Flag2); + void defaultEnumAssignedBitwiseOr(Flags flags = Flags::Flag1 | Flags::Flag2); + void defaultEnumAssignedBitwiseOrShort(UntypedFlags flags = Flag1 | Flag2); }; class DLL_API HasPrivateOverrideBase