Browse Source

Fixed the renaming of overloads generated because of default arguments.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>
pull/322/head
Dimitar Dobrev 12 years ago
parent
commit
d481cf8078
  1. 1
      src/AST/Method.cs
  2. 8
      src/Generator/Passes/RenamePass.cs
  3. 16
      tests/CSharpTemp/CSharpTemp.cpp
  4. 19
      tests/CSharpTemp/CSharpTemp.h

1
src/AST/Method.cs

@ -88,6 +88,7 @@ namespace CppSharp.AST
IsImplicit = method.IsImplicit; IsImplicit = method.IsImplicit;
IsOverride = method.IsOverride; IsOverride = method.IsOverride;
IsProxy = method.IsProxy; IsProxy = method.IsProxy;
IsStatic = method.IsStatic;
Kind = method.Kind; Kind = method.Kind;
IsDefaultConstructor = method.IsDefaultConstructor; IsDefaultConstructor = method.IsDefaultConstructor;
IsCopyConstructor = method.IsCopyConstructor; IsCopyConstructor = method.IsCopyConstructor;

8
src/Generator/Passes/RenamePass.cs

@ -13,11 +13,11 @@ namespace CppSharp.Passes
/// </summary> /// </summary>
public abstract class RenamePass : TranslationUnitPass public abstract class RenamePass : TranslationUnitPass
{ {
public class ParameterMappedTypeComparer : IEqualityComparer<Parameter> public class ParameterComparer : IEqualityComparer<Parameter>
{ {
public bool Equals(Parameter x, Parameter y) 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) public int GetHashCode(Parameter obj)
@ -134,10 +134,10 @@ namespace CppSharp.Passes
if (method != null) if (method != null)
{ {
return ((Class) method.Namespace).Methods.Where( 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( 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) public override bool VisitEnumItem(Enumeration.Item item)

16
tests/CSharpTemp/CSharpTemp.cpp

@ -232,35 +232,35 @@ UntypedFlags operator|(UntypedFlags lhs, UntypedFlags rhs)
return static_cast<UntypedFlags>(static_cast<int>(lhs) | static_cast<int>(rhs)); return static_cast<UntypedFlags>(static_cast<int>(lhs) | static_cast<int>(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)
{ {
} }

19
tests/CSharpTemp/CSharpTemp.h

@ -208,16 +208,17 @@ UntypedFlags operator|(UntypedFlags lhs, UntypedFlags rhs);
class DLL_API MethodsWithDefaultValues class DLL_API MethodsWithDefaultValues
{ {
public: public:
void DefaultPointer(Foo* ptr = 0); void defaultPointer(Foo* ptr = 0);
void DefaultValueType(ValueType bar = ValueType()); void defaultValueType(ValueType bar = ValueType());
void DefaultChar(char c = 'a'); void defaultChar(char c = 'a');
void DefaultRefTypeBeforeOthers(Foo foo = Foo(), int i = 5, Bar::Items item = Bar::Item2); 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 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 defaultRefTypeBeforeAndAfterOthers(int i = 5, Foo foo = Foo(), Bar::Items item = Bar::Item2, Baz baz = Baz());
void DefaultIntAssignedAnEnum(int i = Bar::Item1); void defaultIntAssignedAnEnum(int i = Bar::Item1);
void defaultRefAssignedValue(const Foo& fooRef = Foo());
void DefaultRefAssignedValue(const Foo& fooRef = Foo()); void DefaultRefAssignedValue(const Foo& fooRef = Foo());
void DefaultEnumAssignedBitwiseOr(Flags flags = Flags::Flag1 | Flags::Flag2); void defaultEnumAssignedBitwiseOr(Flags flags = Flags::Flag1 | Flags::Flag2);
void DefaultEnumAssignedBitwiseOrShort(UntypedFlags flags = Flag1 | Flag2); void defaultEnumAssignedBitwiseOrShort(UntypedFlags flags = Flag1 | Flag2);
}; };
class DLL_API HasPrivateOverrideBase class DLL_API HasPrivateOverrideBase

Loading…
Cancel
Save