From 0837094d76e62387994981c23278e599c5dc44a4 Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Sat, 23 Jul 2016 19:57:22 +0300 Subject: [PATCH] Fixed the generated C# code when a default arg with an ignored expression is preceded by another default arg. Signed-off-by: Dimitar Dobrev --- src/Generator/Passes/HandleDefaultParamValuesPass.cs | 4 ++++ tests/CSharp/CSharp.Tests.cs | 2 +- tests/CSharp/CSharp.cpp | 2 +- tests/CSharp/CSharp.h | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Generator/Passes/HandleDefaultParamValuesPass.cs b/src/Generator/Passes/HandleDefaultParamValuesPass.cs index fd87a011..3971f6cd 100644 --- a/src/Generator/Passes/HandleDefaultParamValuesPass.cs +++ b/src/Generator/Passes/HandleDefaultParamValuesPass.cs @@ -48,7 +48,11 @@ namespace CppSharp.Passes if (PrintExpression(parameter.Type, parameter.DefaultArgument, ref result) == null) overloadIndices.Add(function.Parameters.IndexOf(parameter)); if (string.IsNullOrEmpty(result)) + { parameter.DefaultArgument = null; + foreach (var p in function.Parameters.TakeWhile(p => p != parameter)) + p.DefaultArgument = null; + } else parameter.DefaultArgument.String = result; } diff --git a/tests/CSharp/CSharp.Tests.cs b/tests/CSharp/CSharp.Tests.cs index 12b8c88a..881584b3 100644 --- a/tests/CSharp/CSharp.Tests.cs +++ b/tests/CSharp/CSharp.Tests.cs @@ -216,7 +216,7 @@ public unsafe class CSharpTests : GeneratorTestFixture methodsWithDefaultValues.DefaultWithEnumInLowerCasedNameSpace(); methodsWithDefaultValues.DefaultWithCharFromInt(); methodsWithDefaultValues.DefaultWithFreeConstantInNameSpace(); - methodsWithDefaultValues.DefaultWithStdNumericLimits(5); + methodsWithDefaultValues.DefaultWithStdNumericLimits(10, 5); } } diff --git a/tests/CSharp/CSharp.cpp b/tests/CSharp/CSharp.cpp index bfb76917..2319a81a 100644 --- a/tests/CSharp/CSharp.cpp +++ b/tests/CSharp/CSharp.cpp @@ -591,7 +591,7 @@ void MethodsWithDefaultValues::defaultWithFreeConstantInNameSpace(int c) { } -void MethodsWithDefaultValues::defaultWithStdNumericLimits(int i) +void MethodsWithDefaultValues::defaultWithStdNumericLimits(double d, int i) { } diff --git a/tests/CSharp/CSharp.h b/tests/CSharp/CSharp.h index ba61e5f3..e933f71c 100644 --- a/tests/CSharp/CSharp.h +++ b/tests/CSharp/CSharp.h @@ -414,7 +414,7 @@ public: void defaultWithEnumInLowerCasedNameSpace(lowerCaseNameSpace::Enum e = lowerCaseNameSpace::Enum::Item2); void defaultWithCharFromInt(char c = 32); void defaultWithFreeConstantInNameSpace(int c = HasFreeConstant::FREE_CONSTANT_IN_NAMESPACE); - void defaultWithStdNumericLimits(int i = std::numeric_limits::infinity()); + void defaultWithStdNumericLimits(double d = 1.0, int i = std::numeric_limits::infinity()); int getA(); private: Foo m_foo;