diff --git a/src/Generator/Generators/CSharp/CSharpSources.cs b/src/Generator/Generators/CSharp/CSharpSources.cs index 222a30c3ce..e4a746d5bd 100644 --- a/src/Generator/Generators/CSharp/CSharpSources.cs +++ b/src/Generator/Generators/CSharp/CSharpSources.cs @@ -2450,6 +2450,15 @@ private string OverloadParamNameWithDefValue(Parameter p, ref int index) 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]; diff --git a/src/Generator/Passes/HandleDefaultParamValuesPass.cs b/src/Generator/Passes/HandleDefaultParamValuesPass.cs index fcd0dbb803..46451180ea 100644 --- a/src/Generator/Passes/HandleDefaultParamValuesPass.cs +++ b/src/Generator/Passes/HandleDefaultParamValuesPass.cs @@ -140,8 +140,7 @@ private bool CheckForDefaultPointer(Type desugared, ref string result) return true; } - result = "null"; - return true; + return false; } private bool? CheckForDefaultConstruct(Type desugared, Expression expression, diff --git a/tests/CSharp/CSharp.Tests.cs b/tests/CSharp/CSharp.Tests.cs index 4ed3a4692c..65fc3efcbb 100644 --- a/tests/CSharp/CSharp.Tests.cs +++ b/tests/CSharp/CSharp.Tests.cs @@ -63,6 +63,11 @@ public void TestUncompilableCode() { new Bar(qux).Dispose(); } + using (var quux = new Quux()) + { + quux.SetterWithDefaultOverload = null; + quux.SetSetterWithDefaultOverload(); + } using (ComplexType complexType = TestFlag.Flag1) { } diff --git a/tests/CSharp/CSharp.cpp b/tests/CSharp/CSharp.cpp index 8f6b070d66..2b0997b163 100644 --- a/tests/CSharp/CSharp.cpp +++ b/tests/CSharp/CSharp.cpp @@ -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 { } +MethodsWithDefaultValues::~MethodsWithDefaultValues() +{ +} + void MethodsWithDefaultValues::defaultPointer(Foo *ptr) { } diff --git a/tests/CSharp/CSharp.h b/tests/CSharp/CSharp.h index d84d45ef5e..466719ca5c 100644 --- a/tests/CSharp/CSharp.h +++ b/tests/CSharp/CSharp.h @@ -51,8 +51,14 @@ class DLL_API Quux 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 @@ class DLL_API MethodsWithDefaultValues : public Quux MethodsWithDefaultValues(float a, Zero b = 0); MethodsWithDefaultValues(double d, QList list = QList()); MethodsWithDefaultValues(QRect* pointer, float f = 1, int i = std::numeric_limits::infinity()); + ~MethodsWithDefaultValues(); void defaultPointer(Foo* ptr = 0); void defaultVoidStar(void* ptr = 0); void defaultValueType(QGenericArgument valueType = QGenericArgument());