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 @@ -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;

8
src/Generator/Passes/RenamePass.cs

@ -13,11 +13,11 @@ namespace CppSharp.Passes @@ -13,11 +13,11 @@ namespace CppSharp.Passes
/// </summary>
public abstract class RenamePass : TranslationUnitPass
{
public class ParameterMappedTypeComparer : IEqualityComparer<Parameter>
public class ParameterComparer : IEqualityComparer<Parameter>
{
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 @@ -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)

16
tests/CSharpTemp/CSharpTemp.cpp

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

Loading…
Cancel
Save