From 90db6eb95daabe10145c60b126efecd4629f693c Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Tue, 13 Aug 2013 20:14:04 +0300 Subject: [PATCH 1/2] Added an option for the used ABI to the C++ Parser class. Signed-off-by: Dimitar Dobrev --- src/Generator/Parser.cs | 3 ++- src/Parser/Parser.cpp | 2 +- src/Parser/Parser.h | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Generator/Parser.cs b/src/Generator/Parser.cs index 775d1730..e2ec1de6 100644 --- a/src/Generator/Parser.cs +++ b/src/Generator/Parser.cs @@ -52,7 +52,8 @@ namespace CppSharp NoBuiltinIncludes = options.NoBuiltinIncludes, MicrosoftMode = options.MicrosoftMode, ToolSetToUse = options.ToolsetToUse, - TargetTriple = options.TargetTriple + TargetTriple = options.TargetTriple, + Abi = options.Abi }; var result = ClangParser.ParseHeader(parserOptions); diff --git a/src/Parser/Parser.cpp b/src/Parser/Parser.cpp index 219527d1..8c78d23e 100644 --- a/src/Parser/Parser.cpp +++ b/src/Parser/Parser.cpp @@ -114,7 +114,7 @@ void Parser::SetupHeader() C->setInvocation(Inv); TargetOptions& TO = Inv->getTargetOpts(); - TargetABI = Opts->MicrosoftMode ? TargetCXXABI::Microsoft + TargetABI = (Opts->Abi == CppSharp::AST::CppAbi::Microsoft) ? TargetCXXABI::Microsoft : TargetCXXABI::GenericItanium; TO.CXXABI = GetCXXABIString(TargetABI); diff --git a/src/Parser/Parser.h b/src/Parser/Parser.h index 39fb3147..0f687930 100644 --- a/src/Parser/Parser.h +++ b/src/Parser/Parser.h @@ -66,6 +66,7 @@ public ref struct ParserOptions bool NoStandardIncludes; bool NoBuiltinIncludes; bool MicrosoftMode; + CppSharp::AST::CppAbi Abi; bool Verbose; }; From ef1828d7102504346f6eece72371ae1f00035db3 Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Tue, 13 Aug 2013 19:02:39 +0300 Subject: [PATCH 2/2] Checked the desugared type when visiting pointer types. Signed-off-by: Dimitar Dobrev --- src/Generator/Generators/CSharp/CSharpMarshal.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Generator/Generators/CSharp/CSharpMarshal.cs b/src/Generator/Generators/CSharp/CSharpMarshal.cs index 5f5fb5f7..07e03ce5 100644 --- a/src/Generator/Generators/CSharp/CSharpMarshal.cs +++ b/src/Generator/Generators/CSharp/CSharpMarshal.cs @@ -275,8 +275,9 @@ namespace CppSharp.Generators.CSharp var pointee = pointer.Pointee; - if (pointee.IsPrimitiveType(PrimitiveType.Char) || - pointee.IsPrimitiveType(PrimitiveType.WideChar)) + Type type = pointee.Desugar(); + if (type.IsPrimitiveType(PrimitiveType.Char) || + type.IsPrimitiveType(PrimitiveType.WideChar)) { Context.Return.Write("Marshal.StringToHGlobalAnsi({0})", Context.Parameter.Name); @@ -292,7 +293,7 @@ namespace CppSharp.Generators.CSharp } Class @class; - if (pointee.Desugar().IsTagDecl(out @class) && @class.IsValueType) + if (type.IsTagDecl(out @class) && @class.IsValueType) { if (Context.Parameter.Usage == ParameterUsage.Out) { @@ -312,7 +313,7 @@ namespace CppSharp.Generators.CSharp } PrimitiveType primitive; - if (pointee.IsPrimitiveType(out primitive)) + if (type.IsPrimitiveType(out primitive)) { Context.Return.Write(Context.Parameter.Name); return true;