From 3e8b15c42c8732eb2ede72134ef7e2406deb8b03 Mon Sep 17 00:00:00 2001 From: Mohit Mohta Date: Thu, 20 Jul 2017 22:13:45 +0530 Subject: [PATCH] Made the C/C++ language switches adjustable in managed code. (#895) --- src/CppParser/Bindings/CLI/CppParser.cpp | 10 --- src/CppParser/Bindings/CLI/CppParser.h | 23 ------- .../CppSharp.CppParser.cs | 34 +--------- .../i686-pc-win32-msvc/CppSharp.CppParser.cs | 34 +--------- .../CppSharp.CppParser.cs | 34 +--------- .../CppSharp.CppParser.cs | 34 +--------- .../x86_64-linux-gnu/CppSharp.CppParser.cs | 34 +--------- .../CppSharp.CppParser.cs | 34 +--------- src/CppParser/CppParser.cpp | 1 - src/CppParser/CppParser.h | 29 --------- src/CppParser/Parser.cpp | 33 ---------- src/Parser/ParserOptions.cs | 62 +++++++++++++++++++ 12 files changed, 68 insertions(+), 294 deletions(-) diff --git a/src/CppParser/Bindings/CLI/CppParser.cpp b/src/CppParser/Bindings/CLI/CppParser.cpp index de67f9ed..ac4d2fa3 100644 --- a/src/CppParser/Bindings/CLI/CppParser.cpp +++ b/src/CppParser/Bindings/CLI/CppParser.cpp @@ -439,16 +439,6 @@ void CppSharp::Parser::CppParserOptions::Verbose::set(bool value) ((::CppSharp::CppParser::CppParserOptions*)NativePtr)->verbose = value; } -CppSharp::Parser::LanguageVersion CppSharp::Parser::CppParserOptions::LanguageVersion::get() -{ - return (CppSharp::Parser::LanguageVersion)((::CppSharp::CppParser::CppParserOptions*)NativePtr)->languageVersion; -} - -void CppSharp::Parser::CppParserOptions::LanguageVersion::set(CppSharp::Parser::LanguageVersion value) -{ - ((::CppSharp::CppParser::CppParserOptions*)NativePtr)->languageVersion = (::CppSharp::CppParser::LanguageVersion)value; -} - CppSharp::Parser::ParserTargetInfo^ CppSharp::Parser::CppParserOptions::TargetInfo::get() { return (((::CppSharp::CppParser::CppParserOptions*)NativePtr)->targetInfo == nullptr) ? nullptr : gcnew CppSharp::Parser::ParserTargetInfo((::CppSharp::CppParser::ParserTargetInfo*)((::CppSharp::CppParser::CppParserOptions*)NativePtr)->targetInfo); diff --git a/src/CppParser/Bindings/CLI/CppParser.h b/src/CppParser/Bindings/CLI/CppParser.h index a9bb61d9..7d42fffa 100644 --- a/src/CppParser/Bindings/CLI/CppParser.h +++ b/src/CppParser/Bindings/CLI/CppParser.h @@ -13,7 +13,6 @@ namespace CppSharp { namespace Parser { - enum struct LanguageVersion; enum struct ParserDiagnosticLevel; enum struct ParserResultKind; enum struct SourceLocationKind; @@ -36,22 +35,6 @@ namespace CppSharp { namespace Parser { - public enum struct LanguageVersion - { - /// The C programming language. - C = 0, - /// The C programming language (GNU version). - GNUC = 1, - /// The C++ programming language year 1998; supports deprecated constructs. - CPlusPlus98 = 2, - /// The C++ programming language year 1998; supports deprecated constructs (GNU version). - GNUPlusPlus98 = 3, - /// The C++ programming language year 2011. - CPlusPlus11 = 4, - /// The C++ programming language year 2011 (GNU version). - GNUPlusPlus11 = 5 - }; - public enum struct ParserDiagnosticLevel { Ignored = 0, @@ -198,12 +181,6 @@ namespace CppSharp void set(bool); } - property CppSharp::Parser::LanguageVersion LanguageVersion - { - CppSharp::Parser::LanguageVersion get(); - void set(CppSharp::Parser::LanguageVersion); - } - property CppSharp::Parser::ParserTargetInfo^ TargetInfo { CppSharp::Parser::ParserTargetInfo^ get(); diff --git a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs index 7b7f8adb..2ce43db4 100644 --- a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs @@ -17749,22 +17749,6 @@ namespace CppSharp { namespace Parser { - public enum LanguageVersion - { - /// The C programming language. - C = 0, - /// The C programming language (GNU version). - GNUC = 1, - /// The C++ programming language year 1998; supports deprecated constructs. - CPlusPlus98 = 2, - /// The C++ programming language year 1998; supports deprecated constructs (GNU version). - GNUPlusPlus98 = 3, - /// The C++ programming language year 2011. - CPlusPlus11 = 4, - /// The C++ programming language year 2011 (GNU version). - GNUPlusPlus11 = 5 - } - public enum ParserDiagnosticLevel { Ignored = 0, @@ -17839,7 +17823,7 @@ namespace CppSharp public unsafe partial class CppParserOptions : IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 144)] + [StructLayout(LayoutKind.Explicit, Size = 140)] public partial struct __Internal { [FieldOffset(0)] @@ -17894,9 +17878,6 @@ namespace CppSharp internal byte verbose; [FieldOffset(136)] - internal global::CppSharp.Parser.LanguageVersion languageVersion; - - [FieldOffset(140)] internal global::System.IntPtr targetInfo; [SuppressUnmanagedCodeSecurity] @@ -18393,19 +18374,6 @@ namespace CppSharp } } - public global::CppSharp.Parser.LanguageVersion LanguageVersion - { - get - { - return ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->languageVersion; - } - - set - { - ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->languageVersion = value; - } - } - public global::CppSharp.Parser.ParserTargetInfo TargetInfo { 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 ca3b5d40..3169551e 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 @@ -17749,22 +17749,6 @@ namespace CppSharp { namespace Parser { - public enum LanguageVersion - { - /// The C programming language. - C = 0, - /// The C programming language (GNU version). - GNUC = 1, - /// The C++ programming language year 1998; supports deprecated constructs. - CPlusPlus98 = 2, - /// The C++ programming language year 1998; supports deprecated constructs (GNU version). - GNUPlusPlus98 = 3, - /// The C++ programming language year 2011. - CPlusPlus11 = 4, - /// The C++ programming language year 2011 (GNU version). - GNUPlusPlus11 = 5 - } - public enum ParserDiagnosticLevel { Ignored = 0, @@ -17839,7 +17823,7 @@ namespace CppSharp public unsafe partial class CppParserOptions : IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 180)] + [StructLayout(LayoutKind.Explicit, Size = 176)] public partial struct __Internal { [FieldOffset(0)] @@ -17894,9 +17878,6 @@ namespace CppSharp internal byte verbose; [FieldOffset(172)] - internal global::CppSharp.Parser.LanguageVersion languageVersion; - - [FieldOffset(176)] internal global::System.IntPtr targetInfo; [SuppressUnmanagedCodeSecurity] @@ -18393,19 +18374,6 @@ namespace CppSharp } } - public global::CppSharp.Parser.LanguageVersion LanguageVersion - { - get - { - return ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->languageVersion; - } - - set - { - ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->languageVersion = value; - } - } - public global::CppSharp.Parser.ParserTargetInfo TargetInfo { get diff --git a/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs index 1c7c51ba..921fd200 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs @@ -17748,22 +17748,6 @@ namespace CppSharp { namespace Parser { - public enum LanguageVersion - { - /// The C programming language. - C = 0, - /// The C programming language (GNU version). - GNUC = 1, - /// The C++ programming language year 1998; supports deprecated constructs. - CPlusPlus98 = 2, - /// The C++ programming language year 1998; supports deprecated constructs (GNU version). - GNUPlusPlus98 = 3, - /// The C++ programming language year 2011. - CPlusPlus11 = 4, - /// The C++ programming language year 2011 (GNU version). - GNUPlusPlus11 = 5 - } - public enum ParserDiagnosticLevel { Ignored = 0, @@ -17838,7 +17822,7 @@ namespace CppSharp public unsafe partial class CppParserOptions : IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 280)] + [StructLayout(LayoutKind.Explicit, Size = 272)] public partial struct __Internal { [FieldOffset(0)] @@ -17893,9 +17877,6 @@ namespace CppSharp internal byte verbose; [FieldOffset(264)] - internal global::CppSharp.Parser.LanguageVersion languageVersion; - - [FieldOffset(272)] internal global::System.IntPtr targetInfo; [SuppressUnmanagedCodeSecurity] @@ -18392,19 +18373,6 @@ namespace CppSharp } } - public global::CppSharp.Parser.LanguageVersion LanguageVersion - { - get - { - return ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->languageVersion; - } - - set - { - ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->languageVersion = value; - } - } - public global::CppSharp.Parser.ParserTargetInfo TargetInfo { get diff --git a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs index a693ff85..2e4cdccd 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs @@ -17748,22 +17748,6 @@ namespace CppSharp { namespace Parser { - public enum LanguageVersion - { - /// The C programming language. - C = 0, - /// The C programming language (GNU version). - GNUC = 1, - /// The C++ programming language year 1998; supports deprecated constructs. - CPlusPlus98 = 2, - /// The C++ programming language year 1998; supports deprecated constructs (GNU version). - GNUPlusPlus98 = 3, - /// The C++ programming language year 2011. - CPlusPlus11 = 4, - /// The C++ programming language year 2011 (GNU version). - GNUPlusPlus11 = 5 - } - public enum ParserDiagnosticLevel { Ignored = 0, @@ -17838,7 +17822,7 @@ namespace CppSharp public unsafe partial class CppParserOptions : IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 304)] + [StructLayout(LayoutKind.Explicit, Size = 296)] public partial struct __Internal { [FieldOffset(0)] @@ -17893,9 +17877,6 @@ namespace CppSharp internal byte verbose; [FieldOffset(288)] - internal global::CppSharp.Parser.LanguageVersion languageVersion; - - [FieldOffset(296)] internal global::System.IntPtr targetInfo; [SuppressUnmanagedCodeSecurity] @@ -18392,19 +18373,6 @@ namespace CppSharp } } - public global::CppSharp.Parser.LanguageVersion LanguageVersion - { - get - { - return ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->languageVersion; - } - - set - { - ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->languageVersion = value; - } - } - public global::CppSharp.Parser.ParserTargetInfo TargetInfo { get diff --git a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs index b2428315..a3b7b650 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs @@ -17748,22 +17748,6 @@ namespace CppSharp { namespace Parser { - public enum LanguageVersion - { - /// The C programming language. - C = 0, - /// The C programming language (GNU version). - GNUC = 1, - /// The C++ programming language year 1998; supports deprecated constructs. - CPlusPlus98 = 2, - /// The C++ programming language year 1998; supports deprecated constructs (GNU version). - GNUPlusPlus98 = 3, - /// The C++ programming language year 2011. - CPlusPlus11 = 4, - /// The C++ programming language year 2011 (GNU version). - GNUPlusPlus11 = 5 - } - public enum ParserDiagnosticLevel { Ignored = 0, @@ -17838,7 +17822,7 @@ namespace CppSharp public unsafe partial class CppParserOptions : IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 232)] + [StructLayout(LayoutKind.Explicit, Size = 224)] public partial struct __Internal { [FieldOffset(0)] @@ -17893,9 +17877,6 @@ namespace CppSharp internal byte verbose; [FieldOffset(216)] - internal global::CppSharp.Parser.LanguageVersion languageVersion; - - [FieldOffset(224)] internal global::System.IntPtr targetInfo; [SuppressUnmanagedCodeSecurity] @@ -18392,19 +18373,6 @@ namespace CppSharp } } - public global::CppSharp.Parser.LanguageVersion LanguageVersion - { - get - { - return ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->languageVersion; - } - - set - { - ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->languageVersion = value; - } - } - public global::CppSharp.Parser.ParserTargetInfo TargetInfo { 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 e89b934d..c2fc8d99 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 @@ -17749,22 +17749,6 @@ namespace CppSharp { namespace Parser { - public enum LanguageVersion - { - /// The C programming language. - C = 0, - /// The C programming language (GNU version). - GNUC = 1, - /// The C++ programming language year 1998; supports deprecated constructs. - CPlusPlus98 = 2, - /// The C++ programming language year 1998; supports deprecated constructs (GNU version). - GNUPlusPlus98 = 3, - /// The C++ programming language year 2011. - CPlusPlus11 = 4, - /// The C++ programming language year 2011 (GNU version). - GNUPlusPlus11 = 5 - } - public enum ParserDiagnosticLevel { Ignored = 0, @@ -17839,7 +17823,7 @@ namespace CppSharp public unsafe partial class CppParserOptions : IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 304)] + [StructLayout(LayoutKind.Explicit, Size = 296)] public partial struct __Internal { [FieldOffset(0)] @@ -17894,9 +17878,6 @@ namespace CppSharp internal byte verbose; [FieldOffset(288)] - internal global::CppSharp.Parser.LanguageVersion languageVersion; - - [FieldOffset(296)] internal global::System.IntPtr targetInfo; [SuppressUnmanagedCodeSecurity] @@ -18393,19 +18374,6 @@ namespace CppSharp } } - public global::CppSharp.Parser.LanguageVersion LanguageVersion - { - get - { - return ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->languageVersion; - } - - set - { - ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->languageVersion = value; - } - } - public global::CppSharp.Parser.ParserTargetInfo TargetInfo { get diff --git a/src/CppParser/CppParser.cpp b/src/CppParser/CppParser.cpp index a8ca0529..1307c500 100644 --- a/src/CppParser/CppParser.cpp +++ b/src/CppParser/CppParser.cpp @@ -18,7 +18,6 @@ CppParserOptions::CppParserOptions() , noBuiltinIncludes(false) , microsoftMode(false) , verbose(false) - , languageVersion(CppParser::LanguageVersion::GNUPlusPlus11) , targetInfo(0) { } diff --git a/src/CppParser/CppParser.h b/src/CppParser/CppParser.h index 014fddc2..8c99234e 100644 --- a/src/CppParser/CppParser.h +++ b/src/CppParser/CppParser.h @@ -15,34 +15,6 @@ namespace CppSharp { namespace CppParser { using namespace CppSharp::CppParser::AST; -enum class LanguageVersion -{ - /** - * The C programming language. - */ - C, - /** - * The C programming language (GNU version). - */ - GNUC, - /** - * The C++ programming language year 1998; supports deprecated constructs. - */ - CPlusPlus98, - /** - * The C++ programming language year 1998; supports deprecated constructs (GNU version). - */ - GNUPlusPlus98, - /** - * The C++ programming language year 2011. - */ - CPlusPlus11, - /** - * The C++ programming language year 2011 (GNU version). - */ - GNUPlusPlus11 -}; - struct CS_API CppParserOptions { CppParserOptions(); @@ -71,7 +43,6 @@ struct CS_API CppParserOptions bool noBuiltinIncludes; bool microsoftMode; bool verbose; - LanguageVersion languageVersion; ParserTargetInfo* targetInfo; }; diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index d8094d92..5f26facf 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -237,39 +237,6 @@ void Parser::SetupHeader() std::vector args; args.push_back("-cc1"); - switch (opts->languageVersion) - { - case CppParser::LanguageVersion::C: - case CppParser::LanguageVersion::GNUC: - args.push_back("-xc"); - break; - default: - args.push_back("-xc++"); - break; - } - - switch (opts->languageVersion) - { - case CppParser::LanguageVersion::C: - args.push_back("-std=c99"); - break; - case CppParser::LanguageVersion::GNUC: - args.push_back("-std=gnu99"); - break; - case CppParser::LanguageVersion::CPlusPlus98: - args.push_back("-std=c++98"); - break; - case CppParser::LanguageVersion::GNUPlusPlus98: - args.push_back("-std=gnu++98"); - break; - case CppParser::LanguageVersion::CPlusPlus11: - args.push_back(opts->microsoftMode ? "-std=c++14" : "-std=c++11"); - break; - default: - args.push_back(opts->microsoftMode ? "-std=gnu++14" : "-std=gnu++11"); - break; - } - for (unsigned I = 0, E = opts->Arguments.size(); I != E; ++I) { const auto& Arg = opts->Arguments[I]; diff --git a/src/Parser/ParserOptions.cs b/src/Parser/ParserOptions.cs index 04a9fa63..4ac7862d 100644 --- a/src/Parser/ParserOptions.cs +++ b/src/Parser/ParserOptions.cs @@ -15,6 +15,7 @@ namespace CppSharp.Parser public bool IsItaniumLikeAbi { get { return Abi != CppAbi.Microsoft; } } public bool IsMicrosoftAbi { get { return Abi == CppAbi.Microsoft; } } public bool EnableRtti { get; set; } + public LanguageVersion LanguageVersion { get; set; } = LanguageVersion.GNUPlusPlus11; /// Sets up the parser options to work with the given Visual Studio toolchain. public void SetupMSVC() @@ -81,6 +82,39 @@ namespace CppSharp.Parser private void SetupArguments() { + switch (LanguageVersion) + { + case LanguageVersion.C: + case LanguageVersion.GNUC: + AddArguments("-xc"); + break; + default: + AddArguments("-xc++"); + break; + } + + switch (LanguageVersion) + { + case LanguageVersion.C: + AddArguments("-std=c99"); + break; + case LanguageVersion.GNUC: + AddArguments("-std=gnu99"); + break; + case LanguageVersion.CPlusPlus98: + AddArguments("-std=c++98"); + break; + case LanguageVersion.GNUPlusPlus98: + AddArguments("-std=gnu++98"); + break; + case LanguageVersion.CPlusPlus11: + AddArguments(MicrosoftMode ? "-std=c++14" : "-std=c++11"); + break; + default: + AddArguments(MicrosoftMode ? "-std=gnu++14" : "-std=gnu++11"); + break; + } + if (!EnableRtti) AddArguments("-fno-rtti"); } @@ -93,4 +127,32 @@ namespace CppSharp.Parser SetupMSVC(); } } + + public enum LanguageVersion + { + /** + * The C programming language. + */ + C, + /** + * The C programming language (GNU version). + */ + GNUC, + /** + * The C++ programming language year 1998; supports deprecated constructs. + */ + CPlusPlus98, + /** + * The C++ programming language year 1998; supports deprecated constructs (GNU version). + */ + GNUPlusPlus98, + /** + * The C++ programming language year 2011. + */ + CPlusPlus11, + /** + * The C++ programming language year 2011 (GNU version). + */ + GNUPlusPlus11 + }; }