Browse Source

Fixed the generated code for default value of 0 to a class mapped to an enum.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>
pull/376/head
Dimitar Dobrev 11 years ago
parent
commit
191821b1d4
  1. 8
      src/Generator/Passes/HandleDefaultParamValuesPass.cs
  2. 9
      src/Generator/Passes/ParamTypeToInterfacePass.cs
  3. 10
      src/Generator/Types/TypeMap.cs
  4. 9
      tests/CSharpTemp/CSharpTemp.cpp
  5. 11
      tests/CSharpTemp/CSharpTemp.cs
  6. 3
      tests/CSharpTemp/CSharpTemp.h

8
src/Generator/Passes/HandleDefaultParamValuesPass.cs

@ -78,6 +78,7 @@ namespace CppSharp.Passes @@ -78,6 +78,7 @@ namespace CppSharp.Passes
if (Driver.TypeDatabase.FindTypeMap(decl, type, out typeMap))
{
Type typeInSignature;
string mappedTo;
if (Driver.Options.IsCSharpGenerator)
{
@ -86,6 +87,7 @@ namespace CppSharp.Passes @@ -86,6 +87,7 @@ namespace CppSharp.Passes
CSharpKind = CSharpTypePrinterContextKind.Managed,
Type = type
};
typeInSignature = typeMap.CSharpSignatureType(typePrinterContext).SkipPointerRefs();
mappedTo = typeMap.CSharpSignature(typePrinterContext);
}
else
@ -94,8 +96,14 @@ namespace CppSharp.Passes @@ -94,8 +96,14 @@ namespace CppSharp.Passes
{
Type = type
};
typeInSignature = typeMap.CLISignatureType(typePrinterContext).SkipPointerRefs();
mappedTo = typeMap.CLISignature(typePrinterContext);
}
Enumeration @enum;
if (typeInSignature.TryGetEnum(out @enum))
{
return true;
}
if (mappedTo == "string" && ctor.Parameters.Count == 0)
{
parameter.DefaultArgument.String = "\"\"";

9
src/Generator/Passes/ParamTypeToInterfacePass.cs

@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
using CppSharp.AST;
using CppSharp.AST.Extensions;
namespace CppSharp.Passes
{
@ -19,13 +20,7 @@ namespace CppSharp.Passes @@ -19,13 +20,7 @@ namespace CppSharp.Passes
private static void ChangeToInterfaceType(QualifiedType type)
{
var tagType = type.Type as TagType;
if (tagType == null)
{
var pointerType = type.Type as PointerType;
if (pointerType != null)
tagType = pointerType.Pointee as TagType;
}
var tagType = type.Type.SkipPointerRefs() as TagType;
if (tagType != null)
{
var @class = tagType.Declaration as Class;

10
src/Generator/Types/TypeMap.cs

@ -57,6 +57,11 @@ namespace CppSharp.Types @@ -57,6 +57,11 @@ namespace CppSharp.Types
#region C# backend
public virtual Type CSharpSignatureType(CSharpTypePrinterContext ctx)
{
return new CILType(typeof(object));
}
public virtual string CSharpSignature(CSharpTypePrinterContext ctx)
{
throw new NotImplementedException();
@ -85,6 +90,11 @@ namespace CppSharp.Types @@ -85,6 +90,11 @@ namespace CppSharp.Types
#region C++/CLI backend
public virtual Type CLISignatureType(CLITypePrinterContext ctx)
{
return new CILType(typeof(object));
}
public virtual string CLISignature(CLITypePrinterContext ctx)
{
throw new NotImplementedException();

9
tests/CSharpTemp/CSharpTemp.cpp

@ -135,6 +135,11 @@ QFlags<T>::QFlags(T t) : flag(t) @@ -135,6 +135,11 @@ QFlags<T>::QFlags(T t) : flag(t)
{
}
template <typename T>
QFlags<T>::QFlags(Zero) : flag(0)
{
}
template <typename T>
QFlags<T>::operator T()
{
@ -285,6 +290,10 @@ void MethodsWithDefaultValues::defaultMappedToEnum(QFlags<Flags> qFlags) @@ -285,6 +290,10 @@ void MethodsWithDefaultValues::defaultMappedToEnum(QFlags<Flags> qFlags)
{
}
void MethodsWithDefaultValues::defaultMappedToZeroEnum(QFlags<Flags> qFlags)
{
}
void MethodsWithDefaultValues::defaultIntWithLongExpression(unsigned int i)
{
}

11
tests/CSharpTemp/CSharpTemp.cs

@ -7,6 +7,7 @@ using CppSharp.Passes; @@ -7,6 +7,7 @@ using CppSharp.Passes;
using CppSharp.Types;
using CppSharp.Utils;
using Attribute = CppSharp.AST.Attribute;
using Type = CppSharp.AST.Type;
namespace CppSharp.Tests
{
@ -18,11 +19,15 @@ namespace CppSharp.Tests @@ -18,11 +19,15 @@ namespace CppSharp.Tests
return string.Empty;
}
public override Type CSharpSignatureType(CSharpTypePrinterContext ctx)
{
var templateArgument = ((TemplateSpecializationType) ctx.Type.Desugar()).Arguments[0];
return templateArgument.Type.Type;
}
public override string CSharpSignature(CSharpTypePrinterContext ctx)
{
TemplateArgument templateArgument =
((TemplateSpecializationType) ctx.Type.Desugar()).Arguments[0];
return templateArgument.Type.Type.ToString();
return this.CSharpSignatureType(ctx).ToString();
}
public override void CSharpMarshalToNative(MarshalContext ctx)

3
tests/CSharpTemp/CSharpTemp.h

@ -106,8 +106,10 @@ Proprietor::Proprietor() {} @@ -106,8 +106,10 @@ Proprietor::Proprietor() {}
template <typename T>
class DLL_API QFlags
{
typedef int (*Zero);
public:
QFlags(T t);
QFlags(Zero);
operator T();
private:
T flag;
@ -233,6 +235,7 @@ public: @@ -233,6 +235,7 @@ public:
void defaultEnumAssignedBitwiseOrShort(UntypedFlags flags = Flag1 | Flag2);
void defaultNonEmptyCtor(QGenericArgument arg = QGenericArgument(0));
void defaultMappedToEnum(QFlags<Flags> qFlags = Flags::Flag1);
void defaultMappedToZeroEnum(QFlags<Flags> qFlags = 0);
void defaultIntWithLongExpression(unsigned int i = DEFAULT_INT);
};

Loading…
Cancel
Save