Browse Source

Fixed the generated C# when an instance method has a parameter named "instance".

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1170/head
Dimitar Dobrev 7 years ago
parent
commit
bc7f20a10a
  1. 6
      src/AST/FunctionExtensions.cs
  2. 5
      src/Generator/Generators/CSharp/CSharpSources.cs
  3. 1
      tests/Common/Common.Tests.cs
  4. 10
      tests/Common/Common.cpp
  5. 11
      tests/Common/Common.h

6
src/AST/FunctionExtensions.cs

@ -21,7 +21,7 @@ namespace CppSharp.AST
@params.Add(new Parameter @params.Add(new Parameter
{ {
QualifiedType = pointer, QualifiedType = pointer,
Name = "instance", Name = "__instance",
Namespace = function Namespace = function
}); });
} }
@ -32,7 +32,7 @@ namespace CppSharp.AST
@params.Add(new Parameter @params.Add(new Parameter
{ {
QualifiedType = pointer, QualifiedType = pointer,
Name = "instance", Name = "__instance",
Namespace = function Namespace = function
}); });
} }
@ -57,7 +57,7 @@ namespace CppSharp.AST
@params.Add(new Parameter @params.Add(new Parameter
{ {
QualifiedType = pointer, QualifiedType = pointer,
Name = "instance", Name = "__instance",
Namespace = function Namespace = function
}); });
} }

5
src/Generator/Generators/CSharp/CSharpSources.cs

@ -1786,12 +1786,13 @@ namespace CppSharp.Generators.CSharp
string.Join(", ", @params)); string.Join(", ", @params));
WriteOpenBraceAndIndent(); WriteOpenBraceAndIndent();
WriteLine("if (!NativeToManagedMap.ContainsKey(instance))"); WriteLine($"if (!NativeToManagedMap.ContainsKey({Helpers.InstanceField}))");
WriteLineIndent("throw new global::System.Exception(\"No managed instance was found\");"); WriteLineIndent("throw new global::System.Exception(\"No managed instance was found\");");
NewLine(); NewLine();
var printedClass = @class.Visit(TypePrinter); var printedClass = @class.Visit(TypePrinter);
WriteLine($"var {Helpers.TargetIdentifier} = ({printedClass}) NativeToManagedMap[instance];"); WriteLine($@"var {Helpers.TargetIdentifier} = ({
printedClass}) NativeToManagedMap[{Helpers.InstanceField}];");
WriteLine("if ({0}.{1})", Helpers.TargetIdentifier, Helpers.OwnsNativeInstanceIdentifier); WriteLine("if ({0}.{1})", Helpers.TargetIdentifier, Helpers.OwnsNativeInstanceIdentifier);
WriteLineIndent("{0}.SetupVTables();", Helpers.TargetIdentifier); WriteLineIndent("{0}.SetupVTables();", Helpers.TargetIdentifier);
GenerateVTableManagedCall(method); GenerateVTableManagedCall(method);

1
tests/Common/Common.Tests.cs

@ -55,6 +55,7 @@ public class CommonTests : GeneratorTestFixture
ItemsDifferByCase itemsDifferByCase = ItemsDifferByCase.Case_a; ItemsDifferByCase itemsDifferByCase = ItemsDifferByCase.Case_a;
itemsDifferByCase = ItemsDifferByCase.CaseA; itemsDifferByCase = ItemsDifferByCase.CaseA;
itemsDifferByCase.GetHashCode(); itemsDifferByCase.GetHashCode();
new AmbiguousParamNames(0, 0).Dispose();
Common.SMallFollowedByCapital(); Common.SMallFollowedByCapital();
Common.IntegerOverload(0); Common.IntegerOverload(0);
Common.IntegerOverload((uint) 0); Common.IntegerOverload((uint) 0);

10
tests/Common/Common.cpp

@ -848,7 +848,7 @@ HasOverloadsWithDifferentPointerKindsToSameType::~HasOverloadsWithDifferentPoint
{ {
} }
void HasOverloadsWithDifferentPointerKindsToSameType::overload(int& in) void HasOverloadsWithDifferentPointerKindsToSameType::overload(int& i)
{ {
} }
@ -991,6 +991,14 @@ void DerivedFromSecondaryBaseWithIgnoredVirtualMethod::ignored(const IgnoredType
{ {
} }
AmbiguousParamNames::AmbiguousParamNames(int instance, int in)
{
}
AmbiguousParamNames::~AmbiguousParamNames()
{
}
void integerOverload(int i) void integerOverload(int i)
{ {
} }

11
tests/Common/Common.h

@ -1310,7 +1310,7 @@ class DLL_API HasOverloadsWithDifferentPointerKindsToSameType
public: public:
HasOverloadsWithDifferentPointerKindsToSameType(); HasOverloadsWithDifferentPointerKindsToSameType();
~HasOverloadsWithDifferentPointerKindsToSameType(); ~HasOverloadsWithDifferentPointerKindsToSameType();
void overload(int& in); void overload(int& i);
void overload(int&& i); void overload(int&& i);
void overload(const int& i); void overload(const int& i);
void overload(const Foo& rx, int from = -1); void overload(const Foo& rx, int from = -1);
@ -1394,6 +1394,13 @@ public:
void ignored(const IgnoredType& ignoredParam); void ignored(const IgnoredType& ignoredParam);
}; };
class DLL_API AmbiguousParamNames
{
public:
AmbiguousParamNames(int instance, int in);
~AmbiguousParamNames();
};
template<typename T> void TemplatedFunction(T type) template<typename T> void TemplatedFunction(T type)
{ {
@ -1403,7 +1410,7 @@ inline namespace InlineNamespace
{ {
void FunctionInsideInlineNamespace() void FunctionInsideInlineNamespace()
{ {
} }
} }

Loading…
Cancel
Save