From e8e03f7aaeee58b7d66cc5f81cd85e227aa00b34 Mon Sep 17 00:00:00 2001 From: Kimon Topouzidis Date: Thu, 8 Jun 2017 01:32:14 +0300 Subject: [PATCH] Added float128 to the marshalling structures in the C# generator. (#857) --- src/CppParser/Bindings/CLI/Target.cpp | 20 +++++++++++ src/CppParser/Bindings/CLI/Target.h | 12 +++++++ .../i686-pc-win32-msvc/CppSharp.CppParser.cs | 34 ++++++++++++++++++- .../CppSharp.CppParser.cs | 34 ++++++++++++++++++- src/CppParser/Parser.cpp | 4 ++- src/CppParser/Target.cpp | 4 ++- src/CppParser/Target.h | 4 ++- 7 files changed, 107 insertions(+), 5 deletions(-) diff --git a/src/CppParser/Bindings/CLI/Target.cpp b/src/CppParser/Bindings/CLI/Target.cpp index bf6d8808..757505fa 100644 --- a/src/CppParser/Bindings/CLI/Target.cpp +++ b/src/CppParser/Bindings/CLI/Target.cpp @@ -430,6 +430,26 @@ void CppSharp::Parser::ParserTargetInfo::WCharWidth::set(unsigned int value) ((::CppSharp::CppParser::ParserTargetInfo*)NativePtr)->wCharWidth = value; } +unsigned int CppSharp::Parser::ParserTargetInfo::Float128Align::get() +{ + return ((::CppSharp::CppParser::ParserTargetInfo*)NativePtr)->float128Align; +} + +void CppSharp::Parser::ParserTargetInfo::Float128Align::set(unsigned int value) +{ + ((::CppSharp::CppParser::ParserTargetInfo*)NativePtr)->float128Align = value; +} + +unsigned int CppSharp::Parser::ParserTargetInfo::Float128Width::get() +{ + return ((::CppSharp::CppParser::ParserTargetInfo*)NativePtr)->float128Width; +} + +void CppSharp::Parser::ParserTargetInfo::Float128Width::set(unsigned int value) +{ + ((::CppSharp::CppParser::ParserTargetInfo*)NativePtr)->float128Width = value; +} + System::String^ CppSharp::Parser::ParserTargetInfo::ABI::get() { auto __ret = ((::CppSharp::CppParser::ParserTargetInfo*)NativePtr)->getABI(); diff --git a/src/CppParser/Bindings/CLI/Target.h b/src/CppParser/Bindings/CLI/Target.h index d460f9b3..1f580385 100644 --- a/src/CppParser/Bindings/CLI/Target.h +++ b/src/CppParser/Bindings/CLI/Target.h @@ -284,6 +284,18 @@ namespace CppSharp void set(unsigned int); } + property unsigned int Float128Align + { + unsigned int get(); + void set(unsigned int); + } + + property unsigned int Float128Width + { + unsigned int get(); + void set(unsigned int); + } + property System::String^ ABI { System::String^ get(); diff --git a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs index fa52ffa6..ae331884 100644 --- a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs @@ -16805,7 +16805,7 @@ namespace CppSharp public unsafe partial class ParserTargetInfo : IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 176)] + [StructLayout(LayoutKind.Explicit, Size = 184)] public partial struct __Internal { [FieldOffset(0)] @@ -16925,6 +16925,12 @@ namespace CppSharp [FieldOffset(172)] internal uint wCharWidth; + [FieldOffset(176)] + internal uint float128Align; + + [FieldOffset(180)] + internal uint float128Width; + [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, EntryPoint="??0ParserTargetInfo@CppParser@CppSharp@@QAE@XZ")] @@ -17521,6 +17527,32 @@ namespace CppSharp } } + public uint Float128Align + { + get + { + return ((global::CppSharp.Parser.ParserTargetInfo.__Internal*) __Instance)->float128Align; + } + + set + { + ((global::CppSharp.Parser.ParserTargetInfo.__Internal*) __Instance)->float128Align = value; + } + } + + public uint Float128Width + { + get + { + return ((global::CppSharp.Parser.ParserTargetInfo.__Internal*) __Instance)->float128Width; + } + + set + { + ((global::CppSharp.Parser.ParserTargetInfo.__Internal*) __Instance)->float128Width = value; + } + } + public string ABI { get diff --git a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs index 540274bd..e526cf91 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs @@ -16805,7 +16805,7 @@ namespace CppSharp public unsafe partial class ParserTargetInfo : IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 184)] + [StructLayout(LayoutKind.Explicit, Size = 192)] public partial struct __Internal { [FieldOffset(0)] @@ -16925,6 +16925,12 @@ namespace CppSharp [FieldOffset(180)] internal uint wCharWidth; + [FieldOffset(184)] + internal uint float128Align; + + [FieldOffset(188)] + internal uint float128Width; + [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, EntryPoint="??0ParserTargetInfo@CppParser@CppSharp@@QEAA@XZ")] @@ -17521,6 +17527,32 @@ namespace CppSharp } } + public uint Float128Align + { + get + { + return ((global::CppSharp.Parser.ParserTargetInfo.__Internal*) __Instance)->float128Align; + } + + set + { + ((global::CppSharp.Parser.ParserTargetInfo.__Internal*) __Instance)->float128Align = value; + } + } + + public uint Float128Width + { + get + { + return ((global::CppSharp.Parser.ParserTargetInfo.__Internal*) __Instance)->float128Width; + } + + set + { + ((global::CppSharp.Parser.ParserTargetInfo.__Internal*) __Instance)->float128Width = value; + } + } + public string ABI { get diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index ab610b56..238872cc 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -1919,7 +1919,7 @@ static PrimitiveType WalkBuiltinType(const clang::BuiltinType* Builtin) case clang::BuiltinType::Float: return PrimitiveType::Float; case clang::BuiltinType::Double: return PrimitiveType::Double; case clang::BuiltinType::LongDouble: return PrimitiveType::LongDouble; - case clang::BuiltinType::Float128: return PrimitiveType::Half; + case clang::BuiltinType::Float128: return PrimitiveType::Float128; case clang::BuiltinType::NullPtr: return PrimitiveType::Null; @@ -4326,6 +4326,8 @@ ParserTargetInfo* Parser::GetTargetInfo() parserTargetInfo->pointerWidth = TI.getPointerWidth(0); parserTargetInfo->wCharAlign = TI.getWCharAlign(); parserTargetInfo->wCharWidth = TI.getWCharWidth(); + parserTargetInfo->float128Align = TI.getFloat128Align(); + parserTargetInfo->float128Width = TI.getFloat128Width(); return parserTargetInfo; } diff --git a/src/CppParser/Target.cpp b/src/CppParser/Target.cpp index 4e22bfdd..c4f135a0 100644 --- a/src/CppParser/Target.cpp +++ b/src/CppParser/Target.cpp @@ -38,7 +38,9 @@ ParserTargetInfo::ParserTargetInfo() : pointerAlign(0), pointerWidth(0), wCharAlign(0), - wCharWidth(0) + wCharWidth(0), + float128Align(0), + float128Width(0) { } diff --git a/src/CppParser/Target.h b/src/CppParser/Target.h index 428e8989..d25baba0 100644 --- a/src/CppParser/Target.h +++ b/src/CppParser/Target.h @@ -72,6 +72,8 @@ struct CS_API ParserTargetInfo unsigned int pointerWidth; unsigned int wCharAlign; unsigned int wCharWidth; + unsigned int float128Align; + unsigned int float128Width; }; -} } \ No newline at end of file +} }