Browse Source

Fixed a bug when a char parameter is assigned a default value of 0.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>
pull/345/head
Dimitar Dobrev 11 years ago
parent
commit
1dbc76f134
  1. 11
      src/Generator/Passes/HandleDefaultParamValuesPass.cs
  2. 1
      tests/CSharpTemp/CSharpTemp.Tests.cs
  3. 4
      tests/CSharpTemp/CSharpTemp.cpp
  4. 1
      tests/CSharpTemp/CSharpTemp.h

11
src/Generator/Passes/HandleDefaultParamValuesPass.cs

@ -44,6 +44,8 @@ namespace CppSharp.Passes @@ -44,6 +44,8 @@ namespace CppSharp.Passes
continue;
CheckForULongValue(parameter, desugared);
CheckForDefaultEmptyChar(parameter, desugared);
}
GenerateOverloads(function, overloadIndices);
@ -146,6 +148,15 @@ namespace CppSharp.Passes @@ -146,6 +148,15 @@ namespace CppSharp.Passes
parameter.DefaultArgument.String = value.ToString(CultureInfo.InvariantCulture);
}
private void CheckForDefaultEmptyChar(Parameter parameter, Type desugared)
{
if (parameter.DefaultArgument.String == "0" && Driver.Options.MarshalCharAsManagedChar &&
desugared.IsPrimitiveType(PrimitiveType.Char))
{
parameter.DefaultArgument.String = "'\\0'";
}
}
private static void GenerateOverloads(Function function, List<int> overloadIndices)
{
foreach (var overloadIndex in overloadIndices)

1
tests/CSharpTemp/CSharpTemp.Tests.cs

@ -131,6 +131,7 @@ public class CSharpTempTests : GeneratorTestFixture @@ -131,6 +131,7 @@ public class CSharpTempTests : GeneratorTestFixture
{
var methodsWithDefaultValues = new MethodsWithDefaultValues();
methodsWithDefaultValues.DefaultChar();
methodsWithDefaultValues.DefaultEmptyChar();
methodsWithDefaultValues.DefaultPointer();
methodsWithDefaultValues.DefaultRefTypeAfterOthers();
methodsWithDefaultValues.DefaultRefTypeBeforeAndAfterOthers(5, new Foo());

4
tests/CSharpTemp/CSharpTemp.cpp

@ -249,6 +249,10 @@ void MethodsWithDefaultValues::defaultChar(char c) @@ -249,6 +249,10 @@ void MethodsWithDefaultValues::defaultChar(char c)
{
}
void MethodsWithDefaultValues::defaultEmptyChar(char c)
{
}
void MethodsWithDefaultValues::defaultRefTypeBeforeOthers(Foo foo, int i, Bar::Items item)
{
}

1
tests/CSharpTemp/CSharpTemp.h

@ -219,6 +219,7 @@ public: @@ -219,6 +219,7 @@ public:
void defaultPointer(Foo* ptr = 0);
void defaultValueType(ValueType bar = ValueType());
void defaultChar(char c = 'a');
void defaultEmptyChar(char c = 0);
void defaultRefTypeBeforeOthers(Foo foo = Foo(), int i = 5, Bar::Items item = Bar::Item2);
void defaultRefTypeAfterOthers(int i = 5, Bar::Items item = Bar::Item2, Foo foo = Foo());
void defaultRefTypeBeforeAndAfterOthers(int i = 5, Foo foo = Foo(), Bar::Items item = Bar::Item2, Baz baz = Baz());

Loading…
Cancel
Save