Browse Source

Merge pull request #548 from genuinelucifer/outParams

Fixed code gen for Out params (Value type and interfaces)
pull/547/head
Dimitar Dobrev 10 years ago
parent
commit
9f5945db79
  1. 1
      .gitignore
  2. 7
      src/Generator/Generators/CSharp/CSharpTextTemplate.cs
  3. 12
      tests/Basic/Basic.Tests.cs
  4. 16
      tests/Basic/Basic.cpp
  5. 17
      tests/Basic/Basic.h
  6. 11
      tests/CSharpTemp/CSharpTemp.Tests.cs
  7. 8
      tests/CSharpTemp/CSharpTemp.cpp
  8. 1
      tests/CSharpTemp/CSharpTemp.cs
  9. 7
      tests/CSharpTemp/CSharpTemp.h

1
.gitignore vendored

@ -30,6 +30,7 @@ src/generator/generator @@ -30,6 +30,7 @@ src/generator/generator
*.csproj
*.ilk
*.manifest
*.tmp
/build/vs2012
/build/vs2013
/build/gmake

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

@ -2634,10 +2634,11 @@ namespace CppSharp.Generators.CSharp @@ -2634,10 +2634,11 @@ namespace CppSharp.Generators.CSharp
var paramType = param.Type;
Class @class;
if ( (paramType.GetFinalPointee() ?? paramType).Desugar().TryGetClass(out @class)
&& @class.IsRefType)
if ((paramType.GetFinalPointee() ?? paramType).Desugar().TryGetClass(out @class))
{
WriteLine("{0} = new {1}();", param.Name, paramType);
var qualifiedIdentifier = CSharpMarshalNativeToManagedPrinter.QualifiedIdentifier(
@class.OriginalClass ?? @class);
WriteLine("{0} = new {1}();", param.Name, qualifiedIdentifier);
}
}

12
tests/Basic/Basic.Tests.cs

@ -523,5 +523,17 @@ public class BasicTests : GeneratorTestFixture @@ -523,5 +523,17 @@ public class BasicTests : GeneratorTestFixture
{
var empty = new ReturnsEmpty().Empty;
}
[Test]
public void TestOutTypeClassesPassTry()
{
RefTypeClassPassTry refTypeClassPassTry;
basic.funcTryRefTypeOut(out refTypeClassPassTry);
basic.funcTryRefTypePtrOut(out refTypeClassPassTry);
ValueTypeClassPassTry valueTypeClassPassTry;
basic.funcTryValTypeOut(out valueTypeClassPassTry);
basic.funcTryValTypePtrOut(out valueTypeClassPassTry);
}
}

16
tests/Basic/Basic.cpp

@ -476,3 +476,19 @@ Empty ReturnsEmpty::getEmpty() @@ -476,3 +476,19 @@ Empty ReturnsEmpty::getEmpty()
{
return Empty();
}
void funcTryRefTypePtrOut(CS_OUT RefTypeClassPassTry* classTry)
{
}
void funcTryRefTypeOut(CS_OUT RefTypeClassPassTry classTry)
{
}
void funcTryValTypePtrOut(CS_OUT ValueTypeClassPassTry* classTry)
{
}
void funcTryValTypeOut(CS_OUT ValueTypeClassPassTry classTry)
{
}

17
tests/Basic/Basic.h

@ -759,16 +759,10 @@ public: @@ -759,16 +759,10 @@ public:
} ct;
};
#define CS_API
class CS_API ClassPassTry
{
public:
int n;
char c;
};
class DLL_API RefTypeClassPassTry { };
void funcTry(CS_OUT ClassPassTry* classTry) { }
void funcTry2(CS_OUT ClassPassTry classTry) { }
void DLL_API funcTryRefTypePtrOut(CS_OUT RefTypeClassPassTry* classTry);
void DLL_API funcTryRefTypeOut(CS_OUT RefTypeClassPassTry classTry);
#define ARRAY_LENGTH 5
#define CS_VALUE_TYPE
@ -805,3 +799,8 @@ class DLL_API ReturnsEmpty @@ -805,3 +799,8 @@ class DLL_API ReturnsEmpty
public:
Empty getEmpty();
};
class DLL_API CS_VALUE_TYPE ValueTypeClassPassTry { };
void DLL_API funcTryValTypePtrOut(CS_OUT ValueTypeClassPassTry* classTry);
void DLL_API funcTryValTypeOut(CS_OUT ValueTypeClassPassTry classTry);

11
tests/CSharpTemp/CSharpTemp.Tests.cs

@ -422,4 +422,15 @@ public class CSharpTempTests : GeneratorTestFixture @@ -422,4 +422,15 @@ public class CSharpTempTests : GeneratorTestFixture
Assert.AreEqual("value", ex.ParamName);
Assert.AreEqual("The provided array's dimensions doesn't match the required size." + Environment.NewLine +"Parameter name: value", ex.Message);
}
[Test]
public void TestOutTypeInterfacePassTry()
{
var interfaceClassObj = new TestParamToInterfacePassBaseTwo();
ITestParamToInterfacePassBaseTwo interfaceType = interfaceClassObj;
var obj = new TestOutTypeInterfaces();
obj.FuncTryInterfaceTypeOut(out interfaceType);
ITestParamToInterfacePassBaseTwo interfaceTypePtr;
obj.FuncTryInterfaceTypePtrOut(out interfaceTypePtr);
}
}

8
tests/CSharpTemp/CSharpTemp.cpp

@ -759,3 +759,11 @@ int OverrideFromIndirectSecondaryBase::property() @@ -759,3 +759,11 @@ int OverrideFromIndirectSecondaryBase::property()
{
return 1;
}
void TestOutTypeInterfaces::funcTryInterfaceTypePtrOut(CS_OUT TestParamToInterfacePassBaseTwo* classTry)
{
}
void TestOutTypeInterfaces::funcTryInterfaceTypeOut(CS_OUT TestParamToInterfacePassBaseTwo classTry)
{
}

1
tests/CSharpTemp/CSharpTemp.cs

@ -133,6 +133,7 @@ namespace CppSharp.Tests @@ -133,6 +133,7 @@ namespace CppSharp.Tests
// are not ambiguous with multiple inheritance pass enabled.
driver.Options.GenerateConversionOperators = true;
driver.TranslationUnitPasses.AddPass(new TestAttributesPass());
driver.TranslationUnitPasses.AddPass(new CheckMacroPass());
driver.Options.MarshalCharAsManagedChar = true;
driver.Options.GenerateDefaultValuesForArguments = true;
driver.Options.GenerateSingleCSharpFile = true;

7
tests/CSharpTemp/CSharpTemp.h

@ -700,3 +700,10 @@ class DLL_API TestVariableWithFixedArrayType @@ -700,3 +700,10 @@ class DLL_API TestVariableWithFixedArrayType
public:
static Foo variableWithFixedArrayType[2];
};
class DLL_API TestOutTypeInterfaces
{
public:
void funcTryInterfaceTypePtrOut(CS_OUT TestParamToInterfacePassBaseTwo* classTry);
void funcTryInterfaceTypeOut(CS_OUT TestParamToInterfacePassBaseTwo classTry);
};
Loading…
Cancel
Save