Browse Source

Merge branch 'master' into outenum

pull/268/head
Tom Spilman 12 years ago
parent
commit
2912d6601b
  1. 3
      src/Generator/Generators/CLI/CLISourcesTemplate.cs
  2. 5
      src/Generator/Generators/CSharp/CSharpMarshal.cs
  3. 19
      tests/Basic/Basic.Tests.cs
  4. 12
      tests/Basic/Basic.cpp
  5. 2
      tests/Basic/Basic.cs
  6. 3
      tests/Basic/Basic.h
  7. 1
      tests/Tests.h

3
src/Generator/Generators/CLI/CLISourcesTemplate.cs

@ -1067,6 +1067,9 @@ namespace CppSharp.Generators.CLI
var typePrinter = new CppTypePrinter(Driver.TypeDatabase); var typePrinter = new CppTypePrinter(Driver.TypeDatabase);
var type = paramType.Visit(typePrinter); var type = paramType.Visit(typePrinter);
if (param.IsInOut)
WriteLine("{0} {1} = {2};", type, argName, param.Name);
else
WriteLine("{0} {1};", type, argName); WriteLine("{0} {1};", type, argName);
} }
else else

5
src/Generator/Generators/CSharp/CSharpMarshal.cs

@ -474,9 +474,12 @@ namespace CppSharp.Generators.CSharp
{ {
var typeName = Type.TypePrinterDelegate(pointee); var typeName = Type.TypePrinterDelegate(pointee);
if (param.IsInOut)
Context.SupportBefore.WriteLine("{0} _{1} = {1};", typeName, param.Name);
else
Context.SupportBefore.WriteLine("{0} _{1};", typeName, param.Name); Context.SupportBefore.WriteLine("{0} _{1};", typeName, param.Name);
Context.Return.Write("&_{0}", param.Name);
Context.Return.Write("&_{0}", param.Name);
} }
else else
Context.Return.Write(Helpers.SafeIdentifier(Context.Parameter.Name)); Context.Return.Write(Helpers.SafeIdentifier(Context.Parameter.Name));

19
tests/Basic/Basic.Tests.cs

@ -77,6 +77,25 @@ public class BasicTests : GeneratorTestFixture
Assert.That(f, Is.EqualTo(10.0f)); Assert.That(f, Is.EqualTo(10.0f));
} }
public void TestPrimitiveInOutParameters()
{
var hello = new Hello();
int i = 10;
Assert.That(hello.TestPrimitiveInOut(ref i), Is.True);
Assert.That(i, Is.EqualTo(20));
}
[Test]
public void TestPrimitiveInOutRefParameters()
{
var hello = new Hello();
int i = 10;
Assert.That(hello.TestPrimitiveInOutRef(ref i), Is.True);
Assert.That(i, Is.EqualTo(20));
}
[Test] [Test]
public void TestEnumOut() public void TestEnumOut()
{ {

12
tests/Basic/Basic.cpp

@ -169,6 +169,18 @@ bool Hello::TestPrimitiveOutRef(CS_OUT float& f)
return true; return true;
} }
bool Hello::TestPrimitiveInOut(CS_IN_OUT int* i)
{
*i += 10;
return true;
}
bool Hello::TestPrimitiveInOutRef(CS_IN_OUT int& i)
{
i += 10;
return true;
}
void Hello::EnumOut(int value, CS_OUT Enum* e) void Hello::EnumOut(int value, CS_OUT Enum* e)
{ {
*e = (Enum)value; *e = (Enum)value;

2
tests/Basic/Basic.cs

@ -31,6 +31,8 @@ namespace CppSharp.Tests
ctx.SetClassAsValueType("Bar2"); ctx.SetClassAsValueType("Bar2");
ctx.SetMethodParameterUsage("Hello", "TestPrimitiveOut", 1, ParameterUsage.Out); ctx.SetMethodParameterUsage("Hello", "TestPrimitiveOut", 1, ParameterUsage.Out);
ctx.SetMethodParameterUsage("Hello", "TestPrimitiveOutRef", 1, ParameterUsage.Out); ctx.SetMethodParameterUsage("Hello", "TestPrimitiveOutRef", 1, ParameterUsage.Out);
ctx.SetMethodParameterUsage("Hello", "TestPrimitiveInOut", 1, ParameterUsage.InOut);
ctx.SetMethodParameterUsage("Hello", "TestPrimitiveInOutRef", 1, ParameterUsage.InOut);
ctx.SetMethodParameterUsage("Hello", "EnumOut", 2, ParameterUsage.Out); ctx.SetMethodParameterUsage("Hello", "EnumOut", 2, ParameterUsage.Out);
ctx.SetMethodParameterUsage("Hello", "EnumOutRef", 2, ParameterUsage.Out); ctx.SetMethodParameterUsage("Hello", "EnumOutRef", 2, ParameterUsage.Out);
} }

3
tests/Basic/Basic.h

@ -124,6 +124,9 @@ public:
bool TestPrimitiveOut(CS_OUT float* f); bool TestPrimitiveOut(CS_OUT float* f);
bool TestPrimitiveOutRef(CS_OUT float& f); bool TestPrimitiveOutRef(CS_OUT float& f);
bool TestPrimitiveInOut(CS_IN_OUT int* i);
bool TestPrimitiveInOutRef(CS_IN_OUT int& i);
void EnumOut(int value, CS_OUT Enum* e); void EnumOut(int value, CS_OUT Enum* e);
void EnumOutRef(int value, CS_OUT Enum& e); void EnumOutRef(int value, CS_OUT Enum& e);
}; };

1
tests/Tests.h

@ -23,3 +23,4 @@
#endif #endif
#define CS_OUT #define CS_OUT
#define CS_IN_OUT
Loading…
Cancel
Save