Browse Source

Ensure valid C# for default args assigned secondary bases

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1635/head
Dimitar Dobrev 4 years ago
parent
commit
385c5e9387
  1. 15
      src/Generator/Generators/CSharp/CSharpExpressionPrinter.cs
  2. 1
      tests/CSharp/CSharp.Tests.cs
  3. 8
      tests/CSharp/CSharp.cpp
  4. 2
      tests/CSharp/CSharp.h

15
src/Generator/Generators/CSharp/CSharpExpressionPrinter.cs

@ -31,19 +31,8 @@ namespace CppSharp.Generators.CSharp @@ -31,19 +31,8 @@ namespace CppSharp.Generators.CSharp
return $"({desugared.Visit(typePrinter)}) {expression}";
var finalType = (desugared.GetFinalPointee() ?? desugared).Desugar();
if (finalType.TryGetClass(out var @class) && @class.IsInterface)
{
string cast;
if (parameter.DefaultArgument.Declaration is Method method &&
method.IsConstructor && method.Namespace == @class.OriginalClass)
{
cast = string.Empty;
}
else
{
cast = $"({@class.OriginalClass.Visit(typePrinter)}) ";
}
return cast + expression;
}
return $@"({@class.Visit(typePrinter)}) ({
@class.OriginalClass.Visit(typePrinter)}) {expression}";
return expression;
}

1
tests/CSharp/CSharp.Tests.cs

@ -342,6 +342,7 @@ public unsafe class CSharpTests @@ -342,6 +342,7 @@ public unsafe class CSharpTests
methodsWithDefaultValues.DefaultWithFreeConstantInNameSpace();
methodsWithDefaultValues.DefaultWithStdNumericLimits(10, 5);
methodsWithDefaultValues.DefaultWithSpecialization();
methodsWithDefaultValues.DefaultOverloadedImplicitCtor();
methodsWithDefaultValues.DefaultWithParamNamedSameAsMethod(5);
}
}

8
tests/CSharp/CSharp.cpp

@ -822,6 +822,14 @@ void MethodsWithDefaultValues::defaultWithSpecialization(IndependentFields<int> @@ -822,6 +822,14 @@ void MethodsWithDefaultValues::defaultWithSpecialization(IndependentFields<int>
{
}
void MethodsWithDefaultValues::defaultOverloadedImplicitCtor(P p)
{
}
void MethodsWithDefaultValues::defaultOverloadedImplicitCtor(Qux q)
{
}
int MethodsWithDefaultValues::DefaultWithParamNamedSameAsMethod(int DefaultWithParamNamedSameAsMethod, const Foo& defaultArg)
{
return 1;

2
tests/CSharp/CSharp.h

@ -483,6 +483,8 @@ public: @@ -483,6 +483,8 @@ public:
void defaultWithStdNumericLimits(double d = 1.0, int i = std::numeric_limits<double>::infinity());
void defaultWithParamRequiringRename(_ClassWithLeadingUnderscore* ptr = nullptr);
void defaultWithSpecialization(IndependentFields<int> specialization = IndependentFields<int>());
void defaultOverloadedImplicitCtor(P p);
void defaultOverloadedImplicitCtor(Qux q = Qux());
int DefaultWithParamNamedSameAsMethod(int DefaultWithParamNamedSameAsMethod, const Foo& defaultArg = Foo());
int getA();
private:

Loading…
Cancel
Save