From 65d6c49e1ba37727a3e9d35144ae2a186b748c33 Mon Sep 17 00:00:00 2001 From: Mohit Mohta Date: Tue, 18 Jul 2017 22:23:23 +0530 Subject: [PATCH] Making the code run properly from a different working directory (#891) --- src/CppParser/Bindings/CLI/CppParser.cpp | 10 ++++++ src/CppParser/Bindings/CLI/CppParser.h | 6 ++++ .../CppSharp.CppParser.cs | 35 +++++++++++++++---- .../CSharp/i686-apple-darwin12.4.0/Std.cs | 4 +-- .../i686-pc-win32-msvc/CppSharp.CppParser.cs | 35 +++++++++++++++---- .../Bindings/CSharp/i686-pc-win32-msvc/Std.cs | 4 +-- .../CppSharp.CppParser.cs | 35 +++++++++++++++---- .../CSharp/x86_64-apple-darwin12.4.0/Std.cs | 4 +-- .../CppSharp.CppParser.cs | 35 +++++++++++++++---- .../CSharp/x86_64-linux-gnu-cxx11abi/Std.cs | 6 ++-- .../x86_64-linux-gnu/CppSharp.CppParser.cs | 35 +++++++++++++++---- .../Bindings/CSharp/x86_64-linux-gnu/Std.cs | 6 ++-- .../CppSharp.CppParser.cs | 35 +++++++++++++++---- .../CSharp/x86_64-pc-win32-msvc/Std.cs | 4 +-- src/CppParser/CppParser.h | 1 + src/CppParser/Parser.cpp | 20 ++--------- src/Parser/ParserOptions.cs | 2 ++ 17 files changed, 204 insertions(+), 73 deletions(-) diff --git a/src/CppParser/Bindings/CLI/CppParser.cpp b/src/CppParser/Bindings/CLI/CppParser.cpp index a1eb2371..de67f9ed 100644 --- a/src/CppParser/Bindings/CLI/CppParser.cpp +++ b/src/CppParser/Bindings/CLI/CppParser.cpp @@ -379,6 +379,16 @@ void CppSharp::Parser::CppParserOptions::TargetTriple::set(System::String^ value ((::CppSharp::CppParser::CppParserOptions*)NativePtr)->targetTriple = clix::marshalString(value); } +System::String^ CppSharp::Parser::CppParserOptions::CurrentDir::get() +{ + return clix::marshalString(((::CppSharp::CppParser::CppParserOptions*)NativePtr)->currentDir); +} + +void CppSharp::Parser::CppParserOptions::CurrentDir::set(System::String^ value) +{ + ((::CppSharp::CppParser::CppParserOptions*)NativePtr)->currentDir = clix::marshalString(value); +} + CppSharp::Parser::AST::CppAbi CppSharp::Parser::CppParserOptions::Abi::get() { return (CppSharp::Parser::AST::CppAbi)((::CppSharp::CppParser::CppParserOptions*)NativePtr)->abi; diff --git a/src/CppParser/Bindings/CLI/CppParser.h b/src/CppParser/Bindings/CLI/CppParser.h index 19cb8bc9..a9bb61d9 100644 --- a/src/CppParser/Bindings/CLI/CppParser.h +++ b/src/CppParser/Bindings/CLI/CppParser.h @@ -162,6 +162,12 @@ namespace CppSharp void set(System::String^); } + property System::String^ CurrentDir + { + System::String^ get(); + void set(System::String^); + } + property CppSharp::Parser::AST::CppAbi Abi { CppSharp::Parser::AST::CppAbi 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 6f7f3104..7b7f8adb 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 @@ -17839,7 +17839,7 @@ namespace CppSharp public unsafe partial class CppParserOptions : IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 132)] + [StructLayout(LayoutKind.Explicit, Size = 144)] public partial struct __Internal { [FieldOffset(0)] @@ -17876,24 +17876,27 @@ namespace CppSharp internal global::Std.__1.BasicString.__Internal targetTriple; [FieldOffset(116)] + internal global::Std.__1.BasicString.__Internal currentDir; + + [FieldOffset(128)] internal global::CppSharp.Parser.AST.CppAbi abi; - [FieldOffset(120)] + [FieldOffset(132)] internal byte noStandardIncludes; - [FieldOffset(121)] + [FieldOffset(133)] internal byte noBuiltinIncludes; - [FieldOffset(122)] + [FieldOffset(134)] internal byte microsoftMode; - [FieldOffset(123)] + [FieldOffset(135)] internal byte verbose; - [FieldOffset(124)] + [FieldOffset(136)] internal global::CppSharp.Parser.LanguageVersion languageVersion; - [FieldOffset(128)] + [FieldOffset(140)] internal global::System.IntPtr targetInfo; [SuppressUnmanagedCodeSecurity] @@ -18307,6 +18310,24 @@ namespace CppSharp } } + public string CurrentDir + { + get + { + var __basicStringRet = global::Std.__1.BasicString, global::Std.__1.Allocator>.__CreateInstance(((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->currentDir); + var __stringRet = global::Std.__1.BasicStringExtensions.CStr(__basicStringRet); + __basicStringRet.Dispose(false); + return __stringRet; + } + + set + { + var __allocator0 = new global::Std.__1.Allocator(); + var __basicString0 = global::Std.__1.BasicStringExtensions.BasicString(value, __allocator0); + ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->currentDir = *(global::Std.__1.BasicString.__Internal*) __basicString0.__Instance; + } + } + public global::CppSharp.Parser.AST.CppAbi Abi { get diff --git a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/Std.cs b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/Std.cs index 32ededa9..d3ee1963 100644 --- a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/Std.cs +++ b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/Std.cs @@ -204,7 +204,7 @@ namespace Std global::Std.__1.Allocator.__Internal.ctorc__N_std_N___1_S_allocator__C((__Instance + __PointerAdjustment)); return; } - throw new global::System.InvalidOperationException(); + throw new ArgumentOutOfRangeException("_Tp", string.Join(", ", new[] { typeof(_Tp).FullName }), "global::Std.__1.Allocator<_Tp> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: ."); } public void Dispose() @@ -1566,7 +1566,7 @@ namespace Std global::Std.__1.BasicString.__Internal.dtorc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C((__Instance + __PointerAdjustment)); return; } - throw new global::System.InvalidOperationException(); + throw new ArgumentOutOfRangeException("_CharT, _Traits, _Allocator", string.Join(", ", new[] { typeof(_CharT).FullName, typeof(_Traits).FullName, typeof(_Allocator).FullName }), "global::Std.__1.BasicString<_CharT, _Traits, _Allocator> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: , global::Std.__1.Allocator>."); } if (__ownsNativeInstance) Marshal.FreeHGlobal(__Instance); 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 8aab48c2..ca3b5d40 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 @@ -17839,7 +17839,7 @@ namespace CppSharp public unsafe partial class CppParserOptions : IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 156)] + [StructLayout(LayoutKind.Explicit, Size = 180)] public partial struct __Internal { [FieldOffset(0)] @@ -17876,24 +17876,27 @@ namespace CppSharp internal global::Std.BasicString.__Internal targetTriple; [FieldOffset(140)] + internal global::Std.BasicString.__Internal currentDir; + + [FieldOffset(164)] internal global::CppSharp.Parser.AST.CppAbi abi; - [FieldOffset(144)] + [FieldOffset(168)] internal byte noStandardIncludes; - [FieldOffset(145)] + [FieldOffset(169)] internal byte noBuiltinIncludes; - [FieldOffset(146)] + [FieldOffset(170)] internal byte microsoftMode; - [FieldOffset(147)] + [FieldOffset(171)] internal byte verbose; - [FieldOffset(148)] + [FieldOffset(172)] internal global::CppSharp.Parser.LanguageVersion languageVersion; - [FieldOffset(152)] + [FieldOffset(176)] internal global::System.IntPtr targetInfo; [SuppressUnmanagedCodeSecurity] @@ -18307,6 +18310,24 @@ namespace CppSharp } } + public string CurrentDir + { + get + { + var __basicStringRet = global::Std.BasicString, global::Std.Allocator>.__CreateInstance(((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->currentDir); + var __stringRet = global::Std.BasicStringExtensions.CStr(__basicStringRet); + __basicStringRet.Dispose(false); + return __stringRet; + } + + set + { + var __allocator0 = new global::Std.Allocator(); + var __basicString0 = global::Std.BasicStringExtensions.BasicString(value, __allocator0); + ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->currentDir = *(global::Std.BasicString.__Internal*) __basicString0.__Instance; + } + } + public global::CppSharp.Parser.AST.CppAbi Abi { get diff --git a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std.cs b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std.cs index 8a24d4b8..1004ac7a 100644 --- a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std.cs +++ b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std.cs @@ -524,7 +524,7 @@ namespace Std global::Std.Allocator.__Internal.ctorc__N_std_S_allocator__C((__Instance + __PointerAdjustment)); return; } - throw new global::System.InvalidOperationException(); + throw new ArgumentOutOfRangeException("_Ty", string.Join(", ", new[] { typeof(_Ty).FullName }), "global::Std.Allocator<_Ty> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: ."); } public void Dispose() @@ -672,7 +672,7 @@ namespace Std global::Std.BasicString.__Internal.dtorc__N_std_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C((__Instance + __PointerAdjustment), 0); return; } - throw new global::System.InvalidOperationException(); + throw new ArgumentOutOfRangeException("_Elem, _Traits, _Alloc", string.Join(", ", new[] { typeof(_Elem).FullName, typeof(_Traits).FullName, typeof(_Alloc).FullName }), "global::Std.BasicString<_Elem, _Traits, _Alloc> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: , global::Std.Allocator>."); } if (__ownsNativeInstance) Marshal.FreeHGlobal(__Instance); 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 5e7f99d0..1c7c51ba 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 @@ -17838,7 +17838,7 @@ namespace CppSharp public unsafe partial class CppParserOptions : IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 256)] + [StructLayout(LayoutKind.Explicit, Size = 280)] public partial struct __Internal { [FieldOffset(0)] @@ -17875,24 +17875,27 @@ namespace CppSharp internal global::Std.__1.BasicString.__Internal targetTriple; [FieldOffset(232)] + internal global::Std.__1.BasicString.__Internal currentDir; + + [FieldOffset(256)] internal global::CppSharp.Parser.AST.CppAbi abi; - [FieldOffset(236)] + [FieldOffset(260)] internal byte noStandardIncludes; - [FieldOffset(237)] + [FieldOffset(261)] internal byte noBuiltinIncludes; - [FieldOffset(238)] + [FieldOffset(262)] internal byte microsoftMode; - [FieldOffset(239)] + [FieldOffset(263)] internal byte verbose; - [FieldOffset(240)] + [FieldOffset(264)] internal global::CppSharp.Parser.LanguageVersion languageVersion; - [FieldOffset(248)] + [FieldOffset(272)] internal global::System.IntPtr targetInfo; [SuppressUnmanagedCodeSecurity] @@ -18306,6 +18309,24 @@ namespace CppSharp } } + public string CurrentDir + { + get + { + var __basicStringRet = global::Std.__1.BasicString, global::Std.__1.Allocator>.__CreateInstance(((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->currentDir); + var __stringRet = global::Std.__1.BasicStringExtensions.CStr(__basicStringRet); + __basicStringRet.Dispose(false); + return __stringRet; + } + + set + { + var __allocator0 = new global::Std.__1.Allocator(); + var __basicString0 = global::Std.__1.BasicStringExtensions.BasicString(value, __allocator0); + ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->currentDir = *(global::Std.__1.BasicString.__Internal*) __basicString0.__Instance; + } + } + public global::CppSharp.Parser.AST.CppAbi Abi { get diff --git a/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/Std.cs b/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/Std.cs index 81920b33..b9810a9b 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/Std.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/Std.cs @@ -204,7 +204,7 @@ namespace Std global::Std.__1.Allocator.__Internal.ctorc__N_std_N___1_S_allocator__C((__Instance + __PointerAdjustment)); return; } - throw new global::System.InvalidOperationException(); + throw new ArgumentOutOfRangeException("_Tp", string.Join(", ", new[] { typeof(_Tp).FullName }), "global::Std.__1.Allocator<_Tp> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: ."); } public void Dispose() @@ -1566,7 +1566,7 @@ namespace Std global::Std.__1.BasicString.__Internal.dtorc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C((__Instance + __PointerAdjustment)); return; } - throw new global::System.InvalidOperationException(); + throw new ArgumentOutOfRangeException("_CharT, _Traits, _Allocator", string.Join(", ", new[] { typeof(_CharT).FullName, typeof(_Traits).FullName, typeof(_Allocator).FullName }), "global::Std.__1.BasicString<_CharT, _Traits, _Allocator> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: , global::Std.__1.Allocator>."); } if (__ownsNativeInstance) Marshal.FreeHGlobal(__Instance); 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 3d307934..a693ff85 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 @@ -17838,7 +17838,7 @@ namespace CppSharp public unsafe partial class CppParserOptions : IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 272)] + [StructLayout(LayoutKind.Explicit, Size = 304)] public partial struct __Internal { [FieldOffset(0)] @@ -17875,24 +17875,27 @@ namespace CppSharp internal global::Std.Cxx11.BasicString.__Internal targetTriple; [FieldOffset(248)] + internal global::Std.Cxx11.BasicString.__Internal currentDir; + + [FieldOffset(280)] internal global::CppSharp.Parser.AST.CppAbi abi; - [FieldOffset(252)] + [FieldOffset(284)] internal byte noStandardIncludes; - [FieldOffset(253)] + [FieldOffset(285)] internal byte noBuiltinIncludes; - [FieldOffset(254)] + [FieldOffset(286)] internal byte microsoftMode; - [FieldOffset(255)] + [FieldOffset(287)] internal byte verbose; - [FieldOffset(256)] + [FieldOffset(288)] internal global::CppSharp.Parser.LanguageVersion languageVersion; - [FieldOffset(264)] + [FieldOffset(296)] internal global::System.IntPtr targetInfo; [SuppressUnmanagedCodeSecurity] @@ -18306,6 +18309,24 @@ namespace CppSharp } } + public string CurrentDir + { + get + { + var __basicStringRet = global::Std.Cxx11.BasicString, global::Std.Allocator>.__CreateInstance(((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->currentDir); + var __stringRet = global::Std.Cxx11.BasicStringExtensions.CStr(__basicStringRet); + __basicStringRet.Dispose(false); + return __stringRet; + } + + set + { + var __allocator0 = new global::Std.Allocator(); + var __basicString0 = global::Std.Cxx11.BasicStringExtensions.BasicString(value, __allocator0); + ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->currentDir = *(global::Std.Cxx11.BasicString.__Internal*) __basicString0.__Instance; + } + } + public global::CppSharp.Parser.AST.CppAbi Abi { get diff --git a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/Std.cs b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/Std.cs index b24e9634..ee5fbefd 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/Std.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/Std.cs @@ -108,7 +108,7 @@ namespace Std global::Std.Allocator.__Internal.ctorc__N_std_S_allocator__C((__Instance + __PointerAdjustment)); return; } - throw new global::System.InvalidOperationException(); + throw new ArgumentOutOfRangeException("_Tp", string.Join(", ", new[] { typeof(_Tp).FullName }), "global::Std.Allocator<_Tp> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: ."); } public void Dispose() @@ -130,7 +130,7 @@ namespace Std global::Std.Allocator.__Internal.dtorc__N_std_S_allocator__C((__Instance + __PointerAdjustment)); return; } - throw new global::System.InvalidOperationException(); + throw new ArgumentOutOfRangeException("_Tp", string.Join(", ", new[] { typeof(_Tp).FullName }), "global::Std.Allocator<_Tp> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: ."); } if (__ownsNativeInstance) Marshal.FreeHGlobal(__Instance); @@ -815,7 +815,7 @@ namespace Std global::Std.Cxx11.BasicString.__Internal.dtorc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C((__Instance + __PointerAdjustment)); return; } - throw new global::System.InvalidOperationException(); + throw new ArgumentOutOfRangeException("_CharT, _Traits, _Alloc", string.Join(", ", new[] { typeof(_CharT).FullName, typeof(_Traits).FullName, typeof(_Alloc).FullName }), "global::Std.Cxx11.BasicString<_CharT, _Traits, _Alloc> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: , global::Std.Allocator>."); } if (__ownsNativeInstance) Marshal.FreeHGlobal(__Instance); 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 2b322556..b2428315 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 @@ -17838,7 +17838,7 @@ namespace CppSharp public unsafe partial class CppParserOptions : IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 224)] + [StructLayout(LayoutKind.Explicit, Size = 232)] public partial struct __Internal { [FieldOffset(0)] @@ -17875,24 +17875,27 @@ namespace CppSharp internal global::Std.BasicString.__Internal targetTriple; [FieldOffset(200)] + internal global::Std.BasicString.__Internal currentDir; + + [FieldOffset(208)] internal global::CppSharp.Parser.AST.CppAbi abi; - [FieldOffset(204)] + [FieldOffset(212)] internal byte noStandardIncludes; - [FieldOffset(205)] + [FieldOffset(213)] internal byte noBuiltinIncludes; - [FieldOffset(206)] + [FieldOffset(214)] internal byte microsoftMode; - [FieldOffset(207)] + [FieldOffset(215)] internal byte verbose; - [FieldOffset(208)] + [FieldOffset(216)] internal global::CppSharp.Parser.LanguageVersion languageVersion; - [FieldOffset(216)] + [FieldOffset(224)] internal global::System.IntPtr targetInfo; [SuppressUnmanagedCodeSecurity] @@ -18306,6 +18309,24 @@ namespace CppSharp } } + public string CurrentDir + { + get + { + var __basicStringRet = global::Std.BasicString, global::Std.Allocator>.__CreateInstance(((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->currentDir); + var __stringRet = global::Std.BasicStringExtensions.CStr(__basicStringRet); + __basicStringRet.Dispose(false); + return __stringRet; + } + + set + { + var __allocator0 = new global::Std.Allocator(); + var __basicString0 = global::Std.BasicStringExtensions.BasicString(value, __allocator0); + ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->currentDir = *(global::Std.BasicString.__Internal*) __basicString0.__Instance; + } + } + public global::CppSharp.Parser.AST.CppAbi Abi { get diff --git a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/Std.cs b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/Std.cs index ad08d0a8..3f83b42a 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/Std.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/Std.cs @@ -117,7 +117,7 @@ namespace Std global::Std.Allocator.__Internal.ctorc__N_std_S_allocator__C((__Instance + __PointerAdjustment)); return; } - throw new global::System.InvalidOperationException(); + throw new ArgumentOutOfRangeException("_Tp", string.Join(", ", new[] { typeof(_Tp).FullName }), "global::Std.Allocator<_Tp> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: ."); } public void Dispose() @@ -139,7 +139,7 @@ namespace Std global::Std.Allocator.__Internal.dtorc__N_std_S_allocator__C((__Instance + __PointerAdjustment)); return; } - throw new global::System.InvalidOperationException(); + throw new ArgumentOutOfRangeException("_Tp", string.Join(", ", new[] { typeof(_Tp).FullName }), "global::Std.Allocator<_Tp> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: ."); } if (__ownsNativeInstance) Marshal.FreeHGlobal(__Instance); @@ -816,7 +816,7 @@ namespace Std global::Std.BasicString.__Internal.dtorc__N_std_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C((__Instance + __PointerAdjustment)); return; } - throw new global::System.InvalidOperationException(); + throw new ArgumentOutOfRangeException("_CharT, _Traits, _Alloc", string.Join(", ", new[] { typeof(_CharT).FullName, typeof(_Traits).FullName, typeof(_Alloc).FullName }), "global::Std.BasicString<_CharT, _Traits, _Alloc> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: , global::Std.Allocator>."); } if (__ownsNativeInstance) Marshal.FreeHGlobal(__Instance); 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 5cfbf801..e89b934d 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 @@ -17839,7 +17839,7 @@ namespace CppSharp public unsafe partial class CppParserOptions : IDisposable { - [StructLayout(LayoutKind.Explicit, Size = 272)] + [StructLayout(LayoutKind.Explicit, Size = 304)] public partial struct __Internal { [FieldOffset(0)] @@ -17876,24 +17876,27 @@ namespace CppSharp internal global::Std.BasicString.__Internal targetTriple; [FieldOffset(248)] + internal global::Std.BasicString.__Internal currentDir; + + [FieldOffset(280)] internal global::CppSharp.Parser.AST.CppAbi abi; - [FieldOffset(252)] + [FieldOffset(284)] internal byte noStandardIncludes; - [FieldOffset(253)] + [FieldOffset(285)] internal byte noBuiltinIncludes; - [FieldOffset(254)] + [FieldOffset(286)] internal byte microsoftMode; - [FieldOffset(255)] + [FieldOffset(287)] internal byte verbose; - [FieldOffset(256)] + [FieldOffset(288)] internal global::CppSharp.Parser.LanguageVersion languageVersion; - [FieldOffset(264)] + [FieldOffset(296)] internal global::System.IntPtr targetInfo; [SuppressUnmanagedCodeSecurity] @@ -18307,6 +18310,24 @@ namespace CppSharp } } + public string CurrentDir + { + get + { + var __basicStringRet = global::Std.BasicString, global::Std.Allocator>.__CreateInstance(((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->currentDir); + var __stringRet = global::Std.BasicStringExtensions.CStr(__basicStringRet); + __basicStringRet.Dispose(false); + return __stringRet; + } + + set + { + var __allocator0 = new global::Std.Allocator(); + var __basicString0 = global::Std.BasicStringExtensions.BasicString(value, __allocator0); + ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->currentDir = *(global::Std.BasicString.__Internal*) __basicString0.__Instance; + } + } + public global::CppSharp.Parser.AST.CppAbi Abi { get diff --git a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std.cs b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std.cs index 8e24a10e..ab7d58e2 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std.cs @@ -524,7 +524,7 @@ namespace Std global::Std.Allocator.__Internal.ctorc__N_std_S_allocator__C((__Instance + __PointerAdjustment)); return; } - throw new global::System.InvalidOperationException(); + throw new ArgumentOutOfRangeException("_Ty", string.Join(", ", new[] { typeof(_Ty).FullName }), "global::Std.Allocator<_Ty> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: ."); } public void Dispose() @@ -682,7 +682,7 @@ namespace Std global::Std.BasicString.__Internal.dtorc__N_std_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C((__Instance + __PointerAdjustment), 0); return; } - throw new global::System.InvalidOperationException(); + throw new ArgumentOutOfRangeException("_Elem, _Traits, _Alloc", string.Join(", ", new[] { typeof(_Elem).FullName, typeof(_Traits).FullName, typeof(_Alloc).FullName }), "global::Std.BasicString<_Elem, _Traits, _Alloc> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: , global::Std.Allocator>."); } if (__ownsNativeInstance) Marshal.FreeHGlobal(__Instance); diff --git a/src/CppParser/CppParser.h b/src/CppParser/CppParser.h index 26be525d..014fddc2 100644 --- a/src/CppParser/CppParser.h +++ b/src/CppParser/CppParser.h @@ -64,6 +64,7 @@ struct CS_API CppParserOptions int toolSetToUse; std::string targetTriple; + std::string currentDir; CppAbi abi; bool noStandardIncludes; diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index c61171e0..86b5b603 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -71,19 +71,6 @@ Parser::Parser(CppParserOptions* Opts) : lib(Opts->ASTContext), opts(Opts), inde { } -//-----------------------------------// - -std::string GetCurrentLibraryDir() -{ -#ifdef HAVE_DLFCN - Dl_info dl_info; - dladdr((void *)GetCurrentLibraryDir, &dl_info); - return dl_info.dli_fname; -#else - return "."; -#endif -} - LayoutField Parser::WalkVTablePointer(Class* Class, const clang::CharUnits& Offset, const std::string& prefix) { @@ -201,15 +188,14 @@ void Parser::ReadClassLayout(Class* Class, const clang::RecordDecl* RD, } } -static std::string GetClangResourceDir() +static std::string GetClangResourceDir(std::string CurrentDir) { using namespace llvm; using namespace clang; // Compute the path to the resource directory. StringRef ClangResourceDir(CLANG_RESOURCE_DIR); - - SmallString<128> P(GetCurrentLibraryDir()); + SmallString<128> P(CurrentDir); llvm::sys::path::remove_filename(P); if (ClangResourceDir != "") @@ -342,7 +328,7 @@ void Parser::SetupHeader() #ifndef __APPLE__ // Initialize the default platform headers. - HSOpts.ResourceDir = GetClangResourceDir(); + HSOpts.ResourceDir = GetClangResourceDir(opts->currentDir); llvm::SmallString<128> ResourceDir(HSOpts.ResourceDir); llvm::sys::path::append(ResourceDir, "include"); diff --git a/src/Parser/ParserOptions.cs b/src/Parser/ParserOptions.cs index 85b692a4..fecc4865 100644 --- a/src/Parser/ParserOptions.cs +++ b/src/Parser/ParserOptions.cs @@ -1,4 +1,5 @@ using CppSharp.Parser.AST; +using System.Reflection; namespace CppSharp.Parser { @@ -8,6 +9,7 @@ namespace CppSharp.Parser { Abi = Platform.IsUnixPlatform ? CppAbi.Itanium : CppAbi.Microsoft; MicrosoftMode = !Platform.IsUnixPlatform; + CurrentDir = Assembly.GetExecutingAssembly().Location; } public bool IsItaniumLikeAbi { get { return Abi != CppAbi.Microsoft; } }