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. 9
      src/Generator/Driver.cs
  2. 2
      src/Generator/Generators/CSharp/CSharpTextTemplate.cs
  3. 5
      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

9
src/Generator/Driver.cs

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

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

@ -2342,7 +2342,7 @@ namespace CppSharp.Generators.CSharp
{ {
var virtualCallBuilder = new StringBuilder(); var virtualCallBuilder = new StringBuilder();
var i = VTables.GetVTableIndex(function.OriginalFunction ?? function, @class); 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); Helpers.SlotIdentifier, i, Driver.TargetInfo.PointerWidth / 8);
virtualCallBuilder.AppendLine(); virtualCallBuilder.AppendLine();

5
tests/CSharp/CSharp.Tests.cs

@ -167,7 +167,8 @@ public class CSharpTests : GeneratorTestFixture
[Test] [Test]
public void TestDefaultArguments() public void TestDefaultArguments()
{ {
var methodsWithDefaultValues = new MethodsWithDefaultValues(); using (var methodsWithDefaultValues = new MethodsWithDefaultValues())
{
methodsWithDefaultValues.DefaultPointer(); methodsWithDefaultValues.DefaultPointer();
methodsWithDefaultValues.DefaultVoidStar(); methodsWithDefaultValues.DefaultVoidStar();
methodsWithDefaultValues.DefaultValueType(); methodsWithDefaultValues.DefaultValueType();
@ -195,6 +196,8 @@ public class CSharpTests : GeneratorTestFixture
methodsWithDefaultValues.DefaultDoubleWithoutF(); methodsWithDefaultValues.DefaultDoubleWithoutF();
methodsWithDefaultValues.DefaultIntExpressionWithEnum(); methodsWithDefaultValues.DefaultIntExpressionWithEnum();
methodsWithDefaultValues.DefaultCtorWithMoreThanOneArg(); methodsWithDefaultValues.DefaultCtorWithMoreThanOneArg();
methodsWithDefaultValues.DefaultWithRefManagedLong();
}
} }
[Test] [Test]

4
tests/CSharp/CSharp.cpp

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

1
tests/CSharp/CSharp.h

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

3
tests/Common/Common.Tests.cs

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

2
tests/Common/Common.cpp

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

1
tests/Common/Common.cs

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

8
tests/Common/Common.h

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

Loading…
Cancel
Save