Browse Source

Fixed the generated C# for setters with default parameters.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1139/head
Dimitar Dobrev 7 years ago
parent
commit
637018f4d6
  1. 9
      src/Generator/Generators/CSharp/CSharpSources.cs
  2. 3
      src/Generator/Passes/HandleDefaultParamValuesPass.cs
  3. 5
      tests/CSharp/CSharp.Tests.cs
  4. 29
      tests/CSharp/CSharp.cpp
  5. 7
      tests/CSharp/CSharp.h

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

@ -2450,6 +2450,15 @@ namespace CppSharp.Generators.CSharp @@ -2450,6 +2450,15 @@ namespace CppSharp.Generators.CSharp
private void GenerateOverloadCall(Function function)
{
if (function.OriginalFunction.GenerationKind == GenerationKind.Internal)
{
var property = ((Class) function.Namespace).Properties.First(
p => p.SetMethod == function.OriginalFunction);
WriteLine($@"{property.Name} = {ExpressionPrinter.VisitParameter(
function.Parameters.First(p => p.Kind == ParameterKind.Regular))};");
return;
}
for (int i = 0, j = 0; i < function.Parameters.Count; i++)
{
var parameter = function.Parameters[i];

3
src/Generator/Passes/HandleDefaultParamValuesPass.cs

@ -140,8 +140,7 @@ namespace CppSharp.Passes @@ -140,8 +140,7 @@ namespace CppSharp.Passes
return true;
}
result = "null";
return true;
return false;
}
private bool? CheckForDefaultConstruct(Type desugared, Expression expression,

5
tests/CSharp/CSharp.Tests.cs

@ -63,6 +63,11 @@ public unsafe class CSharpTests : GeneratorTestFixture @@ -63,6 +63,11 @@ public unsafe class CSharpTests : GeneratorTestFixture
{
new Bar(qux).Dispose();
}
using (var quux = new Quux())
{
quux.SetterWithDefaultOverload = null;
quux.SetSetterWithDefaultOverload();
}
using (ComplexType complexType = TestFlag.Flag1)
{
}

29
tests/CSharp/CSharp.cpp

@ -98,27 +98,44 @@ const Foo& Bar::operator[](int i) const @@ -98,27 +98,44 @@ const Foo& Bar::operator[](int i) const
}
Quux::Quux()
Quux::Quux() : _setterWithDefaultOverload(0)
{
}
Quux::Quux(int i)
Quux::Quux(int i) : Quux()
{
}
Quux::Quux(char c)
Quux::Quux(char c) : Quux()
{
}
Quux::Quux(Foo f)
Quux::Quux(Foo f) : Quux()
{
}
Quux::~Quux()
{
if (_setterWithDefaultOverload)
{
delete _setterWithDefaultOverload;
_setterWithDefaultOverload = 0;
}
}
Foo* Quux::setterWithDefaultOverload()
{
return _setterWithDefaultOverload;
}
void Quux::setSetterWithDefaultOverload(Foo* value)
{
_setterWithDefaultOverload = value;
}
QColor::QColor()
{
@ -527,6 +544,10 @@ MethodsWithDefaultValues::MethodsWithDefaultValues(QRect* pointer, float f, int @@ -527,6 +544,10 @@ MethodsWithDefaultValues::MethodsWithDefaultValues(QRect* pointer, float f, int
{
}
MethodsWithDefaultValues::~MethodsWithDefaultValues()
{
}
void MethodsWithDefaultValues::defaultPointer(Foo *ptr)
{
}

7
tests/CSharp/CSharp.h

@ -51,8 +51,14 @@ public: @@ -51,8 +51,14 @@ public:
Quux(int i);
Quux(char c);
Quux(Foo f);
~Quux();
Foo* setterWithDefaultOverload();
void setSetterWithDefaultOverload(Foo* value = new Foo());
private:
int priv;
Foo* _setterWithDefaultOverload;
};
class Bar;
@ -384,6 +390,7 @@ public: @@ -384,6 +390,7 @@ public:
MethodsWithDefaultValues(float a, Zero b = 0);
MethodsWithDefaultValues(double d, QList<QColor> list = QList<QColor>());
MethodsWithDefaultValues(QRect* pointer, float f = 1, int i = std::numeric_limits<double>::infinity());
~MethodsWithDefaultValues();
void defaultPointer(Foo* ptr = 0);
void defaultVoidStar(void* ptr = 0);
void defaultValueType(QGenericArgument valueType = QGenericArgument());

Loading…
Cancel
Save