Browse Source

Fixed the internal abstract impls with default params of a pointer type.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>
pull/575/head
Dimitar Dobrev 10 years ago
parent
commit
324e241c25
  1. 13
      src/Generator/Driver.cs
  2. 2
      src/Generator/Generators/CSharp/CSharpTextTemplate.cs
  3. 59
      tests/CSharp/CSharp.Tests.cs
  4. 4
      tests/CSharp/CSharp.cpp
  5. 1
      tests/CSharp/CSharp.h
  6. 3
      tests/Common/Common.Tests.cs
  7. 2
      tests/Common/Common.cpp
  8. 1
      tests/Common/Common.cs
  9. 8
      tests/Common/Common.h

13
src/Generator/Driver.cs

@ -270,14 +270,15 @@ namespace CppSharp @@ -270,14 +270,15 @@ namespace CppSharp
TranslationUnitPasses.AddPass(new CheckFlagEnumsPass());
TranslationUnitPasses.AddPass(new CheckDuplicatedNamesPass());
TranslationUnitPasses.AddPass(new RenameRootNamespacesPass());
if (Options.IsCSharpGenerator && Options.GenerateDefaultValuesForArguments)
{
TranslationUnitPasses.AddPass(new HandleDefaultParamValuesPass());
TranslationUnitPasses.AddPass(new FixDefaultParamValuesOfOverridesPass());
}
if (Options.IsCSharpGenerator)
{
TranslationUnitPasses.AddPass(new GenerateAbstractImplementationsPass());
if (Options.GenerateDefaultValuesForArguments)
{
TranslationUnitPasses.AddPass(new HandleDefaultParamValuesPass());
TranslationUnitPasses.AddPass(new FixDefaultParamValuesOfOverridesPass());
}
}
if (Options.GenerateInterfacesForMultipleInheritance)
{

2
src/Generator/Generators/CSharp/CSharpTextTemplate.cs

@ -2342,7 +2342,7 @@ namespace CppSharp.Generators.CSharp @@ -2342,7 +2342,7 @@ namespace CppSharp.Generators.CSharp
{
var virtualCallBuilder = new StringBuilder();
var i = VTables.GetVTableIndex(function.OriginalFunction ?? function, @class);
virtualCallBuilder.AppendFormat("void* {0} = *(void**) ((IntPtr) __OriginalVTables[0] + {1} * {2});",
virtualCallBuilder.AppendFormat("var {0} = *(void**) ((IntPtr) __OriginalVTables[0] + {1} * {2});",
Helpers.SlotIdentifier, i, Driver.TargetInfo.PointerWidth / 8);
virtualCallBuilder.AppendLine();

59
tests/CSharp/CSharp.Tests.cs

@ -167,34 +167,37 @@ public class CSharpTests : GeneratorTestFixture @@ -167,34 +167,37 @@ public class CSharpTests : GeneratorTestFixture
[Test]
public void TestDefaultArguments()
{
var methodsWithDefaultValues = new MethodsWithDefaultValues();
methodsWithDefaultValues.DefaultPointer();
methodsWithDefaultValues.DefaultVoidStar();
methodsWithDefaultValues.DefaultValueType();
methodsWithDefaultValues.DefaultChar();
methodsWithDefaultValues.DefaultEmptyChar();
methodsWithDefaultValues.DefaultRefTypeBeforeOthers();
methodsWithDefaultValues.DefaultRefTypeAfterOthers();
methodsWithDefaultValues.DefaultRefTypeBeforeAndAfterOthers(0, null);
methodsWithDefaultValues.DefaultIntAssignedAnEnum();
methodsWithDefaultValues.defaultRefAssignedValue();
methodsWithDefaultValues.DefaultRefAssignedValue();
methodsWithDefaultValues.DefaultEnumAssignedBitwiseOr();
methodsWithDefaultValues.DefaultEnumAssignedBitwiseOrShort();
methodsWithDefaultValues.DefaultNonEmptyCtor();
methodsWithDefaultValues.DefaultMappedToEnum();
methodsWithDefaultValues.DefaultMappedToZeroEnum();
methodsWithDefaultValues.DefaultMappedToEnumAssignedWithCtor();
methodsWithDefaultValues.DefaultImplicitCtorInt();
methodsWithDefaultValues.DefaultImplicitCtorChar();
methodsWithDefaultValues.DefaultImplicitCtorFoo();
methodsWithDefaultValues.DefaultIntWithLongExpression();
methodsWithDefaultValues.DefaultRefTypeEnumImplicitCtor();
methodsWithDefaultValues.Rotate4x4Matrix(0, 0, 0);
methodsWithDefaultValues.DefaultPointerToValueType();
methodsWithDefaultValues.DefaultDoubleWithoutF();
methodsWithDefaultValues.DefaultIntExpressionWithEnum();
methodsWithDefaultValues.DefaultCtorWithMoreThanOneArg();
using (var methodsWithDefaultValues = new MethodsWithDefaultValues())
{
methodsWithDefaultValues.DefaultPointer();
methodsWithDefaultValues.DefaultVoidStar();
methodsWithDefaultValues.DefaultValueType();
methodsWithDefaultValues.DefaultChar();
methodsWithDefaultValues.DefaultEmptyChar();
methodsWithDefaultValues.DefaultRefTypeBeforeOthers();
methodsWithDefaultValues.DefaultRefTypeAfterOthers();
methodsWithDefaultValues.DefaultRefTypeBeforeAndAfterOthers(0, null);
methodsWithDefaultValues.DefaultIntAssignedAnEnum();
methodsWithDefaultValues.defaultRefAssignedValue();
methodsWithDefaultValues.DefaultRefAssignedValue();
methodsWithDefaultValues.DefaultEnumAssignedBitwiseOr();
methodsWithDefaultValues.DefaultEnumAssignedBitwiseOrShort();
methodsWithDefaultValues.DefaultNonEmptyCtor();
methodsWithDefaultValues.DefaultMappedToEnum();
methodsWithDefaultValues.DefaultMappedToZeroEnum();
methodsWithDefaultValues.DefaultMappedToEnumAssignedWithCtor();
methodsWithDefaultValues.DefaultImplicitCtorInt();
methodsWithDefaultValues.DefaultImplicitCtorChar();
methodsWithDefaultValues.DefaultImplicitCtorFoo();
methodsWithDefaultValues.DefaultIntWithLongExpression();
methodsWithDefaultValues.DefaultRefTypeEnumImplicitCtor();
methodsWithDefaultValues.Rotate4x4Matrix(0, 0, 0);
methodsWithDefaultValues.DefaultPointerToValueType();
methodsWithDefaultValues.DefaultDoubleWithoutF();
methodsWithDefaultValues.DefaultIntExpressionWithEnum();
methodsWithDefaultValues.DefaultCtorWithMoreThanOneArg();
methodsWithDefaultValues.DefaultWithRefManagedLong();
}
}
[Test]

4
tests/CSharp/CSharp.cpp

@ -470,6 +470,10 @@ void MethodsWithDefaultValues::defaultWithComplexArgs(const QRect& rectangle) @@ -470,6 +470,10 @@ void MethodsWithDefaultValues::defaultWithComplexArgs(const QRect& rectangle)
{
}
void MethodsWithDefaultValues::defaultWithRefManagedLong(long long* i)
{
}
int MethodsWithDefaultValues::getA()
{
return m_foo.A;

1
tests/CSharp/CSharp.h

@ -361,6 +361,7 @@ public: @@ -361,6 +361,7 @@ public:
void defaultIntExpressionWithEnum(int i = Qt::GlobalColor::black + 1);
void defaultCtorWithMoreThanOneArg(QMargins m = QMargins(0, 0, 0, 0));
void defaultWithComplexArgs(const QRect& rectangle = QRect(QPoint(0, 0), QSize(-1, -1)));
void defaultWithRefManagedLong(long long* i = 0);
int getA();
private:
Foo m_foo;

3
tests/Common/Common.Tests.cs

@ -202,7 +202,8 @@ public class CommonTests : GeneratorTestFixture @@ -202,7 +202,8 @@ public class CommonTests : GeneratorTestFixture
var abstractFoo = returnsAbstractFoo.Foo;
Assert.AreEqual(abstractFoo.pureFunction(1), 5);
Assert.AreEqual(abstractFoo.pureFunction1(), 10);
Assert.AreEqual(abstractFoo.pureFunction2(), 15);
var ok = false;
Assert.AreEqual(abstractFoo.pureFunction2(ref ok), 15);
}
[Test]

2
tests/Common/Common.cpp

@ -307,7 +307,7 @@ int ImplementsAbstractFoo::pureFunction1() @@ -307,7 +307,7 @@ int ImplementsAbstractFoo::pureFunction1()
return 10;
}
int ImplementsAbstractFoo::pureFunction2()
int ImplementsAbstractFoo::pureFunction2(bool* ok)
{
return 15;
}

1
tests/Common/Common.cs

@ -26,6 +26,7 @@ namespace CppSharp.Tests @@ -26,6 +26,7 @@ namespace CppSharp.Tests
driver.Options.MarshalCharAsManagedChar = true;
driver.Options.GenerateProperties = true;
driver.Options.GenerateConversionOperators = true;
driver.Options.GenerateDefaultValuesForArguments = true;
}
public override void Preprocess(Driver driver, ASTContext ctx)

8
tests/Common/Common.h

@ -190,17 +190,17 @@ public: @@ -190,17 +190,17 @@ public:
class DLL_API AbstractFoo
{
public:
virtual int pureFunction(int i) = 0;
virtual int pureFunction(int i = 0) = 0;
virtual int pureFunction1() = 0;
virtual int pureFunction2() = 0;
virtual int pureFunction2(bool* ok = 0) = 0;
};
class DLL_API ImplementsAbstractFoo : public AbstractFoo
{
public:
virtual int pureFunction(int i);
virtual int pureFunction(int i = 0);
virtual int pureFunction1();
virtual int pureFunction2();
virtual int pureFunction2(bool* ok = 0);
};
class DLL_API ReturnsAbstractFoo

Loading…
Cancel
Save