Browse Source

Added better support for nullptr_t types.

pull/232/merge
triton 12 years ago
parent
commit
eb2bbba883
  1. 3
      src/Generator/Generators/CLI/CLIMarshal.cs
  2. 1
      src/Generator/Generators/CLI/CLITypePrinter.cs
  3. 1
      src/Generator/Generators/CSharp/CSharpMarshal.cs
  4. 1
      src/Generator/Generators/CSharp/CSharpTypePrinter.cs
  5. 1
      src/Generator/Types/CppTypePrinter.cs
  6. 21
      src/Generator/Types/Std/Stdlib.cs
  7. 11
      src/Generator/Types/Types.cs
  8. 7
      tests/Basic/Basic.Tests.cs
  9. 9
      tests/Basic/Basic.h

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

@ -146,11 +146,12 @@ namespace CppSharp.Generators.CLI
case PrimitiveType.UInt64: case PrimitiveType.UInt64:
case PrimitiveType.Float: case PrimitiveType.Float:
case PrimitiveType.Double: case PrimitiveType.Double:
case PrimitiveType.Null:
Context.Return.Write(Context.ReturnVarName); Context.Return.Write(Context.ReturnVarName);
return true; return true;
} }
return false; throw new NotSupportedException();
} }
public override bool VisitTypedefType(TypedefType typedef, TypeQualifiers quals) public override bool VisitTypedefType(TypedefType typedef, TypeQualifiers quals)

1
src/Generator/Generators/CLI/CLITypePrinter.cs

@ -201,6 +201,7 @@ namespace CppSharp.Generators.CLI
case PrimitiveType.Double: return "double"; case PrimitiveType.Double: return "double";
case PrimitiveType.IntPtr: return "IntPtr"; case PrimitiveType.IntPtr: return "IntPtr";
case PrimitiveType.UIntPtr: return "UIntPtr"; case PrimitiveType.UIntPtr: return "UIntPtr";
case PrimitiveType.Null: return "void*";
} }
throw new NotSupportedException(); throw new NotSupportedException();

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

@ -198,6 +198,7 @@ namespace CppSharp.Generators.CSharp
case PrimitiveType.Float: case PrimitiveType.Float:
case PrimitiveType.Double: case PrimitiveType.Double:
case PrimitiveType.WideChar: case PrimitiveType.WideChar:
case PrimitiveType.Null:
Context.Return.Write(Context.ReturnVarName); Context.Return.Write(Context.ReturnVarName);
return true; return true;
case PrimitiveType.Char16: case PrimitiveType.Char16:

1
src/Generator/Generators/CSharp/CSharpTypePrinter.cs

@ -399,6 +399,7 @@ namespace CppSharp.Generators.CSharp
case PrimitiveType.Double: return "double"; case PrimitiveType.Double: return "double";
case PrimitiveType.IntPtr: return "global::System.IntPtr"; case PrimitiveType.IntPtr: return "global::System.IntPtr";
case PrimitiveType.UIntPtr: return "global::System.UIntPtr"; case PrimitiveType.UIntPtr: return "global::System.UIntPtr";
case PrimitiveType.Null: return "void*";
} }
throw new NotSupportedException(); throw new NotSupportedException();

1
src/Generator/Types/CppTypePrinter.cs

@ -114,6 +114,7 @@ namespace CppSharp.Types
case PrimitiveType.Double: return "double"; case PrimitiveType.Double: return "double";
case PrimitiveType.IntPtr: return "void*"; case PrimitiveType.IntPtr: return "void*";
case PrimitiveType.UIntPtr: return "uintptr_t"; case PrimitiveType.UIntPtr: return "uintptr_t";
case PrimitiveType.Null: return "std::nullptr_t";
} }
throw new NotSupportedException(); throw new NotSupportedException();

21
src/Generator/Types/Std/Stdlib.cs

@ -1,6 +1,7 @@
using CppSharp.AST; using CppSharp.AST;
using CppSharp.AST.Extensions; using CppSharp.AST.Extensions;
using CppSharp.Generators; using CppSharp.Generators;
using CppSharp.Generators.AST;
using CppSharp.Generators.CLI; using CppSharp.Generators.CLI;
using CppSharp.Generators.CSharp; using CppSharp.Generators.CSharp;
@ -312,4 +313,24 @@ namespace CppSharp.Types.Std
marshalCtxName, ctx.Parameter.Name); marshalCtxName, ctx.Parameter.Name);
} }
} }
[TypeMap("std::nullptr_t")]
public class NullPtr : TypeMap
{
public override bool DoesMarshalling { get { return false; } }
public override void CLITypeReference(CLITypeReferenceCollector collector,
ASTRecord<Declaration> loc)
{
var typeRef = collector.GetTypeReference(loc.Value);
var include = new Include
{
File = "cstddef",
Kind = Include.IncludeKind.Angled,
};
typeRef.Include = include;
}
}
} }

11
src/Generator/Types/Types.cs

@ -114,6 +114,17 @@ namespace CppSharp
return base.VisitMemberPointerType(member, quals); return base.VisitMemberPointerType(member, quals);
} }
public override bool VisitParameterDecl(Parameter parameter)
{
if (parameter.Type.IsPrimitiveType(PrimitiveType.Null))
{
Ignore();
return false;
}
return base.VisitParameterDecl(parameter);
}
public override bool VisitTemplateSpecializationType( public override bool VisitTemplateSpecializationType(
TemplateSpecializationType template, TypeQualifiers quals) TemplateSpecializationType template, TypeQualifiers quals)
{ {

7
tests/Basic/Basic.Tests.cs

@ -309,5 +309,12 @@ public class BasicTests : GeneratorTestFixture
var ret = basic.TestDecltype(); var ret = basic.TestDecltype();
Assert.AreEqual(0, ret); Assert.AreEqual(0, ret);
} }
[Test]
public unsafe void TestNullPtrType()
{
var ret = basic.TestNullPtrTypeRet();
Assert.AreEqual(IntPtr.Zero, new IntPtr(ret));
}
} }

9
tests/Basic/Basic.h

@ -454,3 +454,12 @@ DLL_API decltype(Expr) TestDecltype()
{ {
return Expr; return Expr;
} }
DLL_API void TestNullPtrType(decltype(nullptr))
{
}
DLL_API decltype(nullptr) TestNullPtrTypeRet()
{
return nullptr;
}
Loading…
Cancel
Save