From 99849da1d1069cbdfe7840c4ad4870132a0c0a9e Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Wed, 29 Jan 2014 23:42:21 +0200 Subject: [PATCH] Added preliminary support for char16 to avoid crashes because of null parameter types. Signed-off-by: Dimitar Dobrev --- src/AST/Type.cs | 3 ++- src/Generator/Generators/CLI/CLIMarshal.cs | 4 ---- src/Generator/Generators/CLI/CLITypePrinter.cs | 1 + src/Generator/Generators/CSharp/CSharpMarshal.cs | 2 ++ .../Generators/CSharp/CSharpTypePrinter.cs | 1 + src/Generator/Types/CppTypePrinter.cs | 1 + src/Generator/Utils/Utils.cs | 1 + src/Parser/Parser.cpp | 2 ++ tests/Basic/Basic.Tests.cs | 5 +++++ tests/Basic/Basic.h | 16 +++++++++------- 10 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/AST/Type.cs b/src/AST/Type.cs index b81d6de0..c51cb6df 100644 --- a/src/AST/Type.cs +++ b/src/AST/Type.cs @@ -817,7 +817,8 @@ namespace CppSharp.AST UInt64, Float, Double, - IntPtr + IntPtr, + Char16 } /// diff --git a/src/Generator/Generators/CLI/CLIMarshal.cs b/src/Generator/Generators/CLI/CLIMarshal.cs index 37b38430..632f495e 100644 --- a/src/Generator/Generators/CLI/CLIMarshal.cs +++ b/src/Generator/Generators/CLI/CLIMarshal.cs @@ -138,8 +138,6 @@ namespace CppSharp.Generators.CLI case PrimitiveType.Double: Context.Return.Write(Context.ReturnVarName); return true; - case PrimitiveType.WideChar: - return false; } return false; @@ -468,8 +466,6 @@ namespace CppSharp.Generators.CLI case PrimitiveType.Double: Context.Return.Write(Context.Parameter.Name); return true; - case PrimitiveType.WideChar: - return false; } return false; diff --git a/src/Generator/Generators/CLI/CLITypePrinter.cs b/src/Generator/Generators/CLI/CLITypePrinter.cs index bb782510..1dcefe2e 100644 --- a/src/Generator/Generators/CLI/CLITypePrinter.cs +++ b/src/Generator/Generators/CLI/CLITypePrinter.cs @@ -171,6 +171,7 @@ namespace CppSharp.Generators.CLI { case PrimitiveType.Bool: return "bool"; case PrimitiveType.Void: return "void"; + case PrimitiveType.Char16: case PrimitiveType.WideChar: return "char"; case PrimitiveType.Int8: return "char"; case PrimitiveType.UInt8: return "unsigned char"; diff --git a/src/Generator/Generators/CSharp/CSharpMarshal.cs b/src/Generator/Generators/CSharp/CSharpMarshal.cs index 1aa99442..8624beb7 100644 --- a/src/Generator/Generators/CSharp/CSharpMarshal.cs +++ b/src/Generator/Generators/CSharp/CSharpMarshal.cs @@ -198,6 +198,7 @@ namespace CppSharp.Generators.CSharp case PrimitiveType.Double: Context.Return.Write(Context.ReturnVarName); return true; + case PrimitiveType.Char16: case PrimitiveType.WideChar: return false; } @@ -509,6 +510,7 @@ namespace CppSharp.Generators.CSharp case PrimitiveType.Double: Context.Return.Write(Context.Parameter.Name); return true; + case PrimitiveType.Char16: case PrimitiveType.WideChar: return false; } diff --git a/src/Generator/Generators/CSharp/CSharpTypePrinter.cs b/src/Generator/Generators/CSharp/CSharpTypePrinter.cs index 2c839dde..3f4d586d 100644 --- a/src/Generator/Generators/CSharp/CSharpTypePrinter.cs +++ b/src/Generator/Generators/CSharp/CSharpTypePrinter.cs @@ -365,6 +365,7 @@ namespace CppSharp.Generators.CSharp { case PrimitiveType.Bool: return "bool"; case PrimitiveType.Void: return "void"; + case PrimitiveType.Char16: case PrimitiveType.WideChar: return "char"; case PrimitiveType.Int8: return "sbyte"; case PrimitiveType.UInt8: return "byte"; diff --git a/src/Generator/Types/CppTypePrinter.cs b/src/Generator/Types/CppTypePrinter.cs index 40f00b82..98f1c277 100644 --- a/src/Generator/Types/CppTypePrinter.cs +++ b/src/Generator/Types/CppTypePrinter.cs @@ -98,6 +98,7 @@ namespace CppSharp.Types { case PrimitiveType.Bool: return "bool"; case PrimitiveType.Void: return "void"; + case PrimitiveType.Char16: case PrimitiveType.WideChar: return "char"; case PrimitiveType.Int8: return "char"; case PrimitiveType.UInt8: return "unsigned char"; diff --git a/src/Generator/Utils/Utils.cs b/src/Generator/Utils/Utils.cs index b5958152..ae900287 100644 --- a/src/Generator/Utils/Utils.cs +++ b/src/Generator/Utils/Utils.cs @@ -23,6 +23,7 @@ namespace CppSharp { case PrimitiveType.Bool: return typeof(bool); case PrimitiveType.Void: return typeof(void); + case PrimitiveType.Char16: case PrimitiveType.WideChar: return typeof(char); case PrimitiveType.Int8: return typeof(sbyte); case PrimitiveType.UInt8: return typeof(byte); diff --git a/src/Parser/Parser.cpp b/src/Parser/Parser.cpp index e4a5d772..70ad98f6 100644 --- a/src/Parser/Parser.cpp +++ b/src/Parser/Parser.cpp @@ -1152,6 +1152,8 @@ static CppSharp::AST::PrimitiveType WalkBuiltinType(const clang::BuiltinType* Bu case clang::BuiltinType::WChar_S: case clang::BuiltinType::WChar_U: return PrimitiveType::WideChar; + case clang::BuiltinType::Char16: return PrimitiveType::Char16; + case clang::BuiltinType::Short: return PrimitiveType::Int16; case clang::BuiltinType::UShort: return PrimitiveType::UInt16; diff --git a/tests/Basic/Basic.Tests.cs b/tests/Basic/Basic.Tests.cs index ebe905bc..a4521679 100644 --- a/tests/Basic/Basic.Tests.cs +++ b/tests/Basic/Basic.Tests.cs @@ -188,5 +188,10 @@ public class BasicTests : GeneratorTestFixture { Assert.That(TestStaticClass.Add(1, 2), Is.EqualTo(3)); } + + [Test, Ignore] + public void TestChar16() + { + } } \ No newline at end of file diff --git a/tests/Basic/Basic.h b/tests/Basic/Basic.h index 21323e8c..d22f8a08 100644 --- a/tests/Basic/Basic.h +++ b/tests/Basic/Basic.h @@ -15,6 +15,8 @@ public: float B; const char* GetANSI(); + // TODO: VC++ does not support char16 + // char16 chr16; }; struct DLL_API Bar @@ -260,10 +262,10 @@ struct DLL_API TestStaticClass private: TestStaticClass(); -}; - -class HasIgnoredField -{ - Base fieldOfIgnoredType; -}; - +}; + +class HasIgnoredField +{ + Base fieldOfIgnoredType; +}; +