Browse Source

Reused the parsing of headers to get the target info as well.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1005/head
Dimitar Dobrev 8 years ago
parent
commit
33bc64ad9a
  1. 18
      src/CppParser/Bindings/CLI/CppParser.cpp
  2. 8
      src/CppParser/Bindings/CLI/CppParser.h
  3. 40
      src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs
  4. 40
      src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs
  5. 40
      src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs
  6. 40
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs
  7. 40
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs
  8. 40
      src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs
  9. 4
      src/CppParser/CppParser.cpp
  10. 2
      src/CppParser/CppParser.h
  11. 23
      src/CppParser/Parser.cpp
  12. 12
      src/CppParser/Parser.h
  13. 22
      src/Generator/Driver.cs
  14. 1
      src/Generator/Passes/GenerateSymbolsPass.cs
  15. 10
      src/Parser/Parser.cs

18
src/CppParser/Bindings/CLI/CppParser.cpp

@ -723,6 +723,16 @@ void CppSharp::Parser::ParserResult::Library::set(CppSharp::Parser::AST::NativeL
((::CppSharp::CppParser::ParserResult*)NativePtr)->library = (::CppSharp::CppParser::AST::NativeLibrary*)value->NativePtr; ((::CppSharp::CppParser::ParserResult*)NativePtr)->library = (::CppSharp::CppParser::AST::NativeLibrary*)value->NativePtr;
} }
CppSharp::Parser::ParserTargetInfo^ CppSharp::Parser::ParserResult::TargetInfo::get()
{
return (((::CppSharp::CppParser::ParserResult*)NativePtr)->targetInfo == nullptr) ? nullptr : gcnew CppSharp::Parser::ParserTargetInfo((::CppSharp::CppParser::ParserTargetInfo*)((::CppSharp::CppParser::ParserResult*)NativePtr)->targetInfo);
}
void CppSharp::Parser::ParserResult::TargetInfo::set(CppSharp::Parser::ParserTargetInfo^ value)
{
((::CppSharp::CppParser::ParserResult*)NativePtr)->targetInfo = (::CppSharp::CppParser::ParserTargetInfo*)value->NativePtr;
}
unsigned int CppSharp::Parser::ParserResult::DiagnosticsCount::get() unsigned int CppSharp::Parser::ParserResult::DiagnosticsCount::get()
{ {
auto __ret = ((::CppSharp::CppParser::ParserResult*)NativePtr)->getDiagnosticsCount(); auto __ret = ((::CppSharp::CppParser::ParserResult*)NativePtr)->getDiagnosticsCount();
@ -761,14 +771,6 @@ CppSharp::Parser::ParserResult^ CppSharp::Parser::ClangParser::ParseLibrary(CppS
return (__ret == nullptr) ? nullptr : gcnew CppSharp::Parser::ParserResult((::CppSharp::CppParser::ParserResult*)__ret); return (__ret == nullptr) ? nullptr : gcnew CppSharp::Parser::ParserResult((::CppSharp::CppParser::ParserResult*)__ret);
} }
CppSharp::Parser::ParserTargetInfo^ CppSharp::Parser::ClangParser::GetTargetInfo(CppSharp::Parser::CppParserOptions^ Opts)
{
auto __arg0 = (::CppSharp::CppParser::CppParserOptions*)Opts->NativePtr;
auto __ret = ::CppSharp::CppParser::ClangParser::GetTargetInfo(__arg0);
if (__ret == nullptr) return nullptr;
return (__ret == nullptr) ? nullptr : gcnew CppSharp::Parser::ParserTargetInfo((::CppSharp::CppParser::ParserTargetInfo*)__ret);
}
CppSharp::Parser::ClangParser::ClangParser() CppSharp::Parser::ClangParser::ClangParser()
{ {
__ownsNativeInstance = true; __ownsNativeInstance = true;

8
src/CppParser/Bindings/CLI/CppParser.h

@ -368,6 +368,12 @@ namespace CppSharp
void set(CppSharp::Parser::AST::NativeLibrary^); void set(CppSharp::Parser::AST::NativeLibrary^);
} }
property CppSharp::Parser::ParserTargetInfo^ TargetInfo
{
CppSharp::Parser::ParserTargetInfo^ get();
void set(CppSharp::Parser::ParserTargetInfo^);
}
property unsigned int DiagnosticsCount property unsigned int DiagnosticsCount
{ {
unsigned int get(); unsigned int get();
@ -406,8 +412,6 @@ namespace CppSharp
static CppSharp::Parser::ParserResult^ ParseLibrary(CppSharp::Parser::CppParserOptions^ Opts); static CppSharp::Parser::ParserResult^ ParseLibrary(CppSharp::Parser::CppParserOptions^ Opts);
static CppSharp::Parser::ParserTargetInfo^ GetTargetInfo(CppSharp::Parser::CppParserOptions^ Opts);
protected: protected:
bool __ownsNativeInstance; bool __ownsNativeInstance;
}; };

40
src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs

@ -18751,7 +18751,7 @@ namespace CppSharp
public unsafe partial class ParserResult : IDisposable public unsafe partial class ParserResult : IDisposable
{ {
[StructLayout(LayoutKind.Explicit, Size = 20)] [StructLayout(LayoutKind.Explicit, Size = 24)]
public partial struct __Internal public partial struct __Internal
{ {
[FieldOffset(0)] [FieldOffset(0)]
@ -18763,6 +18763,9 @@ namespace CppSharp
[FieldOffset(16)] [FieldOffset(16)]
internal global::System.IntPtr library; internal global::System.IntPtr library;
[FieldOffset(20)]
internal global::System.IntPtr targetInfo;
[SuppressUnmanagedCodeSecurity] [SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser12ParserResultC2Ev")] EntryPoint="_ZN8CppSharp9CppParser12ParserResultC2Ev")]
@ -18926,6 +18929,24 @@ namespace CppSharp
} }
} }
public global::CppSharp.Parser.ParserTargetInfo TargetInfo
{
get
{
global::CppSharp.Parser.ParserTargetInfo __result0;
if (((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo == IntPtr.Zero) __result0 = null;
else if (global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap.ContainsKey(((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo))
__result0 = (global::CppSharp.Parser.ParserTargetInfo) global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap[((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo];
else __result0 = global::CppSharp.Parser.ParserTargetInfo.__CreateInstance(((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo);
return __result0;
}
set
{
((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo = ReferenceEquals(value, null) ? global::System.IntPtr.Zero : value.__Instance;
}
}
public uint DiagnosticsCount public uint DiagnosticsCount
{ {
get get
@ -18955,11 +18976,6 @@ namespace CppSharp
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser11ClangParser12ParseLibraryEPNS0_16CppParserOptionsE")] EntryPoint="_ZN8CppSharp9CppParser11ClangParser12ParseLibraryEPNS0_16CppParserOptionsE")]
internal static extern global::System.IntPtr ParseLibrary(global::System.IntPtr Opts); internal static extern global::System.IntPtr ParseLibrary(global::System.IntPtr Opts);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser11ClangParser13GetTargetInfoEPNS0_16CppParserOptionsE")]
internal static extern global::System.IntPtr GetTargetInfo(global::System.IntPtr Opts);
} }
public global::System.IntPtr __Instance { get; protected set; } public global::System.IntPtr __Instance { get; protected set; }
@ -19055,18 +19071,6 @@ namespace CppSharp
else __result0 = global::CppSharp.Parser.ParserResult.__CreateInstance(__ret); else __result0 = global::CppSharp.Parser.ParserResult.__CreateInstance(__ret);
return __result0; return __result0;
} }
public static global::CppSharp.Parser.ParserTargetInfo GetTargetInfo(global::CppSharp.Parser.CppParserOptions Opts)
{
var __arg0 = ReferenceEquals(Opts, null) ? global::System.IntPtr.Zero : Opts.__Instance;
var __ret = __Internal.GetTargetInfo(__arg0);
global::CppSharp.Parser.ParserTargetInfo __result0;
if (__ret == IntPtr.Zero) __result0 = null;
else if (global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap.ContainsKey(__ret))
__result0 = (global::CppSharp.Parser.ParserTargetInfo) global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap[__ret];
else __result0 = global::CppSharp.Parser.ParserTargetInfo.__CreateInstance(__ret);
return __result0;
}
} }
} }
} }

40
src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs

@ -18751,7 +18751,7 @@ namespace CppSharp
public unsafe partial class ParserResult : IDisposable public unsafe partial class ParserResult : IDisposable
{ {
[StructLayout(LayoutKind.Explicit, Size = 20)] [StructLayout(LayoutKind.Explicit, Size = 24)]
public partial struct __Internal public partial struct __Internal
{ {
[FieldOffset(0)] [FieldOffset(0)]
@ -18763,6 +18763,9 @@ namespace CppSharp
[FieldOffset(16)] [FieldOffset(16)]
internal global::System.IntPtr library; internal global::System.IntPtr library;
[FieldOffset(20)]
internal global::System.IntPtr targetInfo;
[SuppressUnmanagedCodeSecurity] [SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall,
EntryPoint="??0ParserResult@CppParser@CppSharp@@QAE@XZ")] EntryPoint="??0ParserResult@CppParser@CppSharp@@QAE@XZ")]
@ -18926,6 +18929,24 @@ namespace CppSharp
} }
} }
public global::CppSharp.Parser.ParserTargetInfo TargetInfo
{
get
{
global::CppSharp.Parser.ParserTargetInfo __result0;
if (((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo == IntPtr.Zero) __result0 = null;
else if (global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap.ContainsKey(((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo))
__result0 = (global::CppSharp.Parser.ParserTargetInfo) global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap[((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo];
else __result0 = global::CppSharp.Parser.ParserTargetInfo.__CreateInstance(((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo);
return __result0;
}
set
{
((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo = ReferenceEquals(value, null) ? global::System.IntPtr.Zero : value.__Instance;
}
}
public uint DiagnosticsCount public uint DiagnosticsCount
{ {
get get
@ -18955,11 +18976,6 @@ namespace CppSharp
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="?ParseLibrary@ClangParser@CppParser@CppSharp@@SAPAUParserResult@23@PAUCppParserOptions@23@@Z")] EntryPoint="?ParseLibrary@ClangParser@CppParser@CppSharp@@SAPAUParserResult@23@PAUCppParserOptions@23@@Z")]
internal static extern global::System.IntPtr ParseLibrary(global::System.IntPtr Opts); internal static extern global::System.IntPtr ParseLibrary(global::System.IntPtr Opts);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="?GetTargetInfo@ClangParser@CppParser@CppSharp@@SAPAUParserTargetInfo@23@PAUCppParserOptions@23@@Z")]
internal static extern global::System.IntPtr GetTargetInfo(global::System.IntPtr Opts);
} }
public global::System.IntPtr __Instance { get; protected set; } public global::System.IntPtr __Instance { get; protected set; }
@ -19055,18 +19071,6 @@ namespace CppSharp
else __result0 = global::CppSharp.Parser.ParserResult.__CreateInstance(__ret); else __result0 = global::CppSharp.Parser.ParserResult.__CreateInstance(__ret);
return __result0; return __result0;
} }
public static global::CppSharp.Parser.ParserTargetInfo GetTargetInfo(global::CppSharp.Parser.CppParserOptions Opts)
{
var __arg0 = ReferenceEquals(Opts, null) ? global::System.IntPtr.Zero : Opts.__Instance;
var __ret = __Internal.GetTargetInfo(__arg0);
global::CppSharp.Parser.ParserTargetInfo __result0;
if (__ret == IntPtr.Zero) __result0 = null;
else if (global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap.ContainsKey(__ret))
__result0 = (global::CppSharp.Parser.ParserTargetInfo) global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap[__ret];
else __result0 = global::CppSharp.Parser.ParserTargetInfo.__CreateInstance(__ret);
return __result0;
}
} }
} }
} }

40
src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs

@ -18750,7 +18750,7 @@ namespace CppSharp
public unsafe partial class ParserResult : IDisposable public unsafe partial class ParserResult : IDisposable
{ {
[StructLayout(LayoutKind.Explicit, Size = 40)] [StructLayout(LayoutKind.Explicit, Size = 48)]
public partial struct __Internal public partial struct __Internal
{ {
[FieldOffset(0)] [FieldOffset(0)]
@ -18762,6 +18762,9 @@ namespace CppSharp
[FieldOffset(32)] [FieldOffset(32)]
internal global::System.IntPtr library; internal global::System.IntPtr library;
[FieldOffset(40)]
internal global::System.IntPtr targetInfo;
[SuppressUnmanagedCodeSecurity] [SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser12ParserResultC2Ev")] EntryPoint="_ZN8CppSharp9CppParser12ParserResultC2Ev")]
@ -18925,6 +18928,24 @@ namespace CppSharp
} }
} }
public global::CppSharp.Parser.ParserTargetInfo TargetInfo
{
get
{
global::CppSharp.Parser.ParserTargetInfo __result0;
if (((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo == IntPtr.Zero) __result0 = null;
else if (global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap.ContainsKey(((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo))
__result0 = (global::CppSharp.Parser.ParserTargetInfo) global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap[((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo];
else __result0 = global::CppSharp.Parser.ParserTargetInfo.__CreateInstance(((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo);
return __result0;
}
set
{
((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo = ReferenceEquals(value, null) ? global::System.IntPtr.Zero : value.__Instance;
}
}
public uint DiagnosticsCount public uint DiagnosticsCount
{ {
get get
@ -18954,11 +18975,6 @@ namespace CppSharp
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser11ClangParser12ParseLibraryEPNS0_16CppParserOptionsE")] EntryPoint="_ZN8CppSharp9CppParser11ClangParser12ParseLibraryEPNS0_16CppParserOptionsE")]
internal static extern global::System.IntPtr ParseLibrary(global::System.IntPtr Opts); internal static extern global::System.IntPtr ParseLibrary(global::System.IntPtr Opts);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser11ClangParser13GetTargetInfoEPNS0_16CppParserOptionsE")]
internal static extern global::System.IntPtr GetTargetInfo(global::System.IntPtr Opts);
} }
public global::System.IntPtr __Instance { get; protected set; } public global::System.IntPtr __Instance { get; protected set; }
@ -19054,18 +19070,6 @@ namespace CppSharp
else __result0 = global::CppSharp.Parser.ParserResult.__CreateInstance(__ret); else __result0 = global::CppSharp.Parser.ParserResult.__CreateInstance(__ret);
return __result0; return __result0;
} }
public static global::CppSharp.Parser.ParserTargetInfo GetTargetInfo(global::CppSharp.Parser.CppParserOptions Opts)
{
var __arg0 = ReferenceEquals(Opts, null) ? global::System.IntPtr.Zero : Opts.__Instance;
var __ret = __Internal.GetTargetInfo(__arg0);
global::CppSharp.Parser.ParserTargetInfo __result0;
if (__ret == IntPtr.Zero) __result0 = null;
else if (global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap.ContainsKey(__ret))
__result0 = (global::CppSharp.Parser.ParserTargetInfo) global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap[__ret];
else __result0 = global::CppSharp.Parser.ParserTargetInfo.__CreateInstance(__ret);
return __result0;
}
} }
} }
} }

40
src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs

@ -18750,7 +18750,7 @@ namespace CppSharp
public unsafe partial class ParserResult : IDisposable public unsafe partial class ParserResult : IDisposable
{ {
[StructLayout(LayoutKind.Explicit, Size = 40)] [StructLayout(LayoutKind.Explicit, Size = 48)]
public partial struct __Internal public partial struct __Internal
{ {
[FieldOffset(0)] [FieldOffset(0)]
@ -18762,6 +18762,9 @@ namespace CppSharp
[FieldOffset(32)] [FieldOffset(32)]
internal global::System.IntPtr library; internal global::System.IntPtr library;
[FieldOffset(40)]
internal global::System.IntPtr targetInfo;
[SuppressUnmanagedCodeSecurity] [SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser12ParserResultC2Ev")] EntryPoint="_ZN8CppSharp9CppParser12ParserResultC2Ev")]
@ -18925,6 +18928,24 @@ namespace CppSharp
} }
} }
public global::CppSharp.Parser.ParserTargetInfo TargetInfo
{
get
{
global::CppSharp.Parser.ParserTargetInfo __result0;
if (((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo == IntPtr.Zero) __result0 = null;
else if (global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap.ContainsKey(((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo))
__result0 = (global::CppSharp.Parser.ParserTargetInfo) global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap[((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo];
else __result0 = global::CppSharp.Parser.ParserTargetInfo.__CreateInstance(((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo);
return __result0;
}
set
{
((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo = ReferenceEquals(value, null) ? global::System.IntPtr.Zero : value.__Instance;
}
}
public uint DiagnosticsCount public uint DiagnosticsCount
{ {
get get
@ -18954,11 +18975,6 @@ namespace CppSharp
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser11ClangParser12ParseLibraryEPNS0_16CppParserOptionsE")] EntryPoint="_ZN8CppSharp9CppParser11ClangParser12ParseLibraryEPNS0_16CppParserOptionsE")]
internal static extern global::System.IntPtr ParseLibrary(global::System.IntPtr Opts); internal static extern global::System.IntPtr ParseLibrary(global::System.IntPtr Opts);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser11ClangParser13GetTargetInfoEPNS0_16CppParserOptionsE")]
internal static extern global::System.IntPtr GetTargetInfo(global::System.IntPtr Opts);
} }
public global::System.IntPtr __Instance { get; protected set; } public global::System.IntPtr __Instance { get; protected set; }
@ -19054,18 +19070,6 @@ namespace CppSharp
else __result0 = global::CppSharp.Parser.ParserResult.__CreateInstance(__ret); else __result0 = global::CppSharp.Parser.ParserResult.__CreateInstance(__ret);
return __result0; return __result0;
} }
public static global::CppSharp.Parser.ParserTargetInfo GetTargetInfo(global::CppSharp.Parser.CppParserOptions Opts)
{
var __arg0 = ReferenceEquals(Opts, null) ? global::System.IntPtr.Zero : Opts.__Instance;
var __ret = __Internal.GetTargetInfo(__arg0);
global::CppSharp.Parser.ParserTargetInfo __result0;
if (__ret == IntPtr.Zero) __result0 = null;
else if (global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap.ContainsKey(__ret))
__result0 = (global::CppSharp.Parser.ParserTargetInfo) global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap[__ret];
else __result0 = global::CppSharp.Parser.ParserTargetInfo.__CreateInstance(__ret);
return __result0;
}
} }
} }
} }

40
src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs

@ -18750,7 +18750,7 @@ namespace CppSharp
public unsafe partial class ParserResult : IDisposable public unsafe partial class ParserResult : IDisposable
{ {
[StructLayout(LayoutKind.Explicit, Size = 40)] [StructLayout(LayoutKind.Explicit, Size = 48)]
public partial struct __Internal public partial struct __Internal
{ {
[FieldOffset(0)] [FieldOffset(0)]
@ -18762,6 +18762,9 @@ namespace CppSharp
[FieldOffset(32)] [FieldOffset(32)]
internal global::System.IntPtr library; internal global::System.IntPtr library;
[FieldOffset(40)]
internal global::System.IntPtr targetInfo;
[SuppressUnmanagedCodeSecurity] [SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser12ParserResultC2Ev")] EntryPoint="_ZN8CppSharp9CppParser12ParserResultC2Ev")]
@ -18925,6 +18928,24 @@ namespace CppSharp
} }
} }
public global::CppSharp.Parser.ParserTargetInfo TargetInfo
{
get
{
global::CppSharp.Parser.ParserTargetInfo __result0;
if (((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo == IntPtr.Zero) __result0 = null;
else if (global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap.ContainsKey(((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo))
__result0 = (global::CppSharp.Parser.ParserTargetInfo) global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap[((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo];
else __result0 = global::CppSharp.Parser.ParserTargetInfo.__CreateInstance(((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo);
return __result0;
}
set
{
((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo = ReferenceEquals(value, null) ? global::System.IntPtr.Zero : value.__Instance;
}
}
public uint DiagnosticsCount public uint DiagnosticsCount
{ {
get get
@ -18954,11 +18975,6 @@ namespace CppSharp
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser11ClangParser12ParseLibraryEPNS0_16CppParserOptionsE")] EntryPoint="_ZN8CppSharp9CppParser11ClangParser12ParseLibraryEPNS0_16CppParserOptionsE")]
internal static extern global::System.IntPtr ParseLibrary(global::System.IntPtr Opts); internal static extern global::System.IntPtr ParseLibrary(global::System.IntPtr Opts);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser11ClangParser13GetTargetInfoEPNS0_16CppParserOptionsE")]
internal static extern global::System.IntPtr GetTargetInfo(global::System.IntPtr Opts);
} }
public global::System.IntPtr __Instance { get; protected set; } public global::System.IntPtr __Instance { get; protected set; }
@ -19054,18 +19070,6 @@ namespace CppSharp
else __result0 = global::CppSharp.Parser.ParserResult.__CreateInstance(__ret); else __result0 = global::CppSharp.Parser.ParserResult.__CreateInstance(__ret);
return __result0; return __result0;
} }
public static global::CppSharp.Parser.ParserTargetInfo GetTargetInfo(global::CppSharp.Parser.CppParserOptions Opts)
{
var __arg0 = ReferenceEquals(Opts, null) ? global::System.IntPtr.Zero : Opts.__Instance;
var __ret = __Internal.GetTargetInfo(__arg0);
global::CppSharp.Parser.ParserTargetInfo __result0;
if (__ret == IntPtr.Zero) __result0 = null;
else if (global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap.ContainsKey(__ret))
__result0 = (global::CppSharp.Parser.ParserTargetInfo) global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap[__ret];
else __result0 = global::CppSharp.Parser.ParserTargetInfo.__CreateInstance(__ret);
return __result0;
}
} }
} }
} }

40
src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs

@ -18751,7 +18751,7 @@ namespace CppSharp
public unsafe partial class ParserResult : IDisposable public unsafe partial class ParserResult : IDisposable
{ {
[StructLayout(LayoutKind.Explicit, Size = 40)] [StructLayout(LayoutKind.Explicit, Size = 48)]
public partial struct __Internal public partial struct __Internal
{ {
[FieldOffset(0)] [FieldOffset(0)]
@ -18763,6 +18763,9 @@ namespace CppSharp
[FieldOffset(32)] [FieldOffset(32)]
internal global::System.IntPtr library; internal global::System.IntPtr library;
[FieldOffset(40)]
internal global::System.IntPtr targetInfo;
[SuppressUnmanagedCodeSecurity] [SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="??0ParserResult@CppParser@CppSharp@@QEAA@XZ")] EntryPoint="??0ParserResult@CppParser@CppSharp@@QEAA@XZ")]
@ -18926,6 +18929,24 @@ namespace CppSharp
} }
} }
public global::CppSharp.Parser.ParserTargetInfo TargetInfo
{
get
{
global::CppSharp.Parser.ParserTargetInfo __result0;
if (((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo == IntPtr.Zero) __result0 = null;
else if (global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap.ContainsKey(((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo))
__result0 = (global::CppSharp.Parser.ParserTargetInfo) global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap[((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo];
else __result0 = global::CppSharp.Parser.ParserTargetInfo.__CreateInstance(((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo);
return __result0;
}
set
{
((global::CppSharp.Parser.ParserResult.__Internal*) __Instance)->targetInfo = ReferenceEquals(value, null) ? global::System.IntPtr.Zero : value.__Instance;
}
}
public uint DiagnosticsCount public uint DiagnosticsCount
{ {
get get
@ -18955,11 +18976,6 @@ namespace CppSharp
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="?ParseLibrary@ClangParser@CppParser@CppSharp@@SAPEAUParserResult@23@PEAUCppParserOptions@23@@Z")] EntryPoint="?ParseLibrary@ClangParser@CppParser@CppSharp@@SAPEAUParserResult@23@PEAUCppParserOptions@23@@Z")]
internal static extern global::System.IntPtr ParseLibrary(global::System.IntPtr Opts); internal static extern global::System.IntPtr ParseLibrary(global::System.IntPtr Opts);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="?GetTargetInfo@ClangParser@CppParser@CppSharp@@SAPEAUParserTargetInfo@23@PEAUCppParserOptions@23@@Z")]
internal static extern global::System.IntPtr GetTargetInfo(global::System.IntPtr Opts);
} }
public global::System.IntPtr __Instance { get; protected set; } public global::System.IntPtr __Instance { get; protected set; }
@ -19055,18 +19071,6 @@ namespace CppSharp
else __result0 = global::CppSharp.Parser.ParserResult.__CreateInstance(__ret); else __result0 = global::CppSharp.Parser.ParserResult.__CreateInstance(__ret);
return __result0; return __result0;
} }
public static global::CppSharp.Parser.ParserTargetInfo GetTargetInfo(global::CppSharp.Parser.CppParserOptions Opts)
{
var __arg0 = ReferenceEquals(Opts, null) ? global::System.IntPtr.Zero : Opts.__Instance;
var __ret = __Internal.GetTargetInfo(__arg0);
global::CppSharp.Parser.ParserTargetInfo __result0;
if (__ret == IntPtr.Zero) __result0 = null;
else if (global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap.ContainsKey(__ret))
__result0 = (global::CppSharp.Parser.ParserTargetInfo) global::CppSharp.Parser.ParserTargetInfo.NativeToManagedMap[__ret];
else __result0 = global::CppSharp.Parser.ParserTargetInfo.__CreateInstance(__ret);
return __result0;
}
} }
} }
} }

4
src/CppParser/CppParser.cpp

@ -34,6 +34,7 @@ DEF_VECTOR_STRING(CppParserOptions, SupportedStdTypes)
ParserResult::ParserResult() ParserResult::ParserResult()
: library(0) : library(0)
, targetInfo(0)
{ {
} }
@ -41,10 +42,13 @@ ParserResult::ParserResult(const ParserResult& rhs)
: kind(rhs.kind) : kind(rhs.kind)
, Diagnostics(rhs.Diagnostics) , Diagnostics(rhs.Diagnostics)
, library(rhs.library) , library(rhs.library)
, targetInfo(rhs.targetInfo)
{} {}
ParserResult::~ParserResult() ParserResult::~ParserResult()
{ {
if (library)
delete library;
} }
ParserDiagnostic::ParserDiagnostic() {} ParserDiagnostic::ParserDiagnostic() {}

2
src/CppParser/CppParser.h

@ -83,6 +83,7 @@ struct CS_API ParserResult
VECTOR(ParserDiagnostic, Diagnostics) VECTOR(ParserDiagnostic, Diagnostics)
NativeLibrary* library; NativeLibrary* library;
ParserTargetInfo* targetInfo;
}; };
enum class SourceLocationKind enum class SourceLocationKind
@ -100,7 +101,6 @@ public:
static ParserResult* ParseHeader(CppParserOptions* Opts); static ParserResult* ParseHeader(CppParserOptions* Opts);
static ParserResult* ParseLibrary(CppParserOptions* Opts); static ParserResult* ParseLibrary(CppParserOptions* Opts);
static ParserTargetInfo* GetTargetInfo(CppParserOptions* Opts);
}; };
} } } }

23
src/CppParser/Parser.cpp

@ -4063,6 +4063,8 @@ ParserResult* Parser::ParseHeader(const std::vector<std::string>& SourceFiles)
WalkAST(); WalkAST();
res->targetInfo = GetTargetInfo();
res->kind = ParserResultKind::Success; res->kind = ParserResultKind::Success;
return res; return res;
} }
@ -4285,29 +4287,8 @@ ParserResult* ClangParser::ParseLibrary(CppParserOptions* Opts)
return Parser.ParseLibrary(Opts->libraryFile); return Parser.ParseLibrary(Opts->libraryFile);
} }
ParserTargetInfo* ClangParser::GetTargetInfo(CppParserOptions* Opts)
{
if (!Opts)
return nullptr;
Parser parser(Opts);
return parser.GetTargetInfo();
}
ParserTargetInfo* Parser::GetTargetInfo() ParserTargetInfo* Parser::GetTargetInfo()
{ {
assert(opts->ASTContext && "Expected a valid ASTContext");
Setup();
std::unique_ptr<clang::SemaConsumer> SC(new clang::SemaConsumer());
c->setASTConsumer(std::move(SC));
c->createSema(clang::TU_Complete, 0);
auto DiagClient = new DiagnosticConsumer();
c->getDiagnostics().setClient(DiagClient);
auto parserTargetInfo = new ParserTargetInfo(); auto parserTargetInfo = new ParserTargetInfo();
auto& TI = c->getASTContext().getTargetInfo(); auto& TI = c->getASTContext().getTargetInfo();

12
src/CppParser/Parser.h

@ -51,13 +51,6 @@ public:
void Setup(); void Setup();
ParserResult* ParseHeader(const std::vector<std::string>& SourceFiles); ParserResult* ParseHeader(const std::vector<std::string>& SourceFiles);
ParserResult* ParseLibrary(const std::string& File); ParserResult* ParseLibrary(const std::string& File);
ParserResultKind ParseArchive(llvm::StringRef File,
llvm::object::Archive* Archive,
CppSharp::CppParser::NativeLibrary*& NativeLib);
ParserResultKind ParseSharedLib(llvm::StringRef File,
llvm::object::ObjectFile* ObjectFile,
CppSharp::CppParser::NativeLibrary*& NativeLib);
ParserTargetInfo* GetTargetInfo();
private: private:
bool IsSupported(const clang::NamedDecl* ND); bool IsSupported(const clang::NamedDecl* ND);
@ -151,6 +144,11 @@ private:
llvm::object::basic_symbol_iterator End, llvm::object::basic_symbol_iterator End,
CppSharp::CppParser::NativeLibrary*& NativeLib); CppSharp::CppParser::NativeLibrary*& NativeLib);
Declaration* GetDeclarationFromFriend(clang::NamedDecl* FriendDecl); Declaration* GetDeclarationFromFriend(clang::NamedDecl* FriendDecl);
ParserResultKind ParseArchive(llvm::StringRef File,
llvm::object::Archive* Archive, CppSharp::CppParser::NativeLibrary*& NativeLib);
ParserResultKind ParseSharedLib(llvm::StringRef File,
llvm::object::ObjectFile* ObjectFile, CppSharp::CppParser::NativeLibrary*& NativeLib);
ParserTargetInfo* GetTargetInfo();
int index; int index;
CppParserOptions* opts; CppParserOptions* opts;

22
src/Generator/Driver.cs

@ -127,25 +127,27 @@ namespace CppSharp
if (Options.UnityBuild) if (Options.UnityBuild)
{ {
var parserOptions = ParserOptions.BuildForSourceFile(Options.Modules); var parserOptions = ParserOptions.BuildForSourceFile(Options.Modules);
var result = parser.ParseSourceFiles(sourceFiles, parserOptions); using (var result = parser.ParseSourceFiles(sourceFiles, parserOptions))
result.Dispose(); Context.TargetInfo = result.TargetInfo;
if (string.IsNullOrEmpty(ParserOptions.TargetTriple))
ParserOptions.TargetTriple = parserOptions.TargetTriple;
} }
else else
{ {
var results = new List<ParserResult>();
foreach (var sourceFile in sourceFiles) foreach (var sourceFile in sourceFiles)
{ {
var parserOptions = ParserOptions.BuildForSourceFile( var parserOptions = ParserOptions.BuildForSourceFile(
Options.Modules, sourceFile); Options.Modules, sourceFile);
results.Add(parser.ParseSourceFile(sourceFile, parserOptions)); using (ParserResult result = parser.ParseSourceFile(sourceFile, parserOptions))
if (Context.TargetInfo == null)
Context.TargetInfo = result.TargetInfo;
else
result.TargetInfo.Dispose();
if (string.IsNullOrEmpty(ParserOptions.TargetTriple))
ParserOptions.TargetTriple = parserOptions.TargetTriple;
} }
foreach (var result in results)
result.Dispose();
} }
Context.TargetInfo = parser.GetTargetInfo(ParserOptions);
Context.ASTContext = ClangParser.ConvertASTContext(astContext); Context.ASTContext = ClangParser.ConvertASTContext(astContext);
return !hasParsingErrors; return !hasParsingErrors;
@ -190,8 +192,6 @@ namespace CppSharp
continue; continue;
Context.Symbols.Libraries.Add(ClangParser.ConvertLibrary(res.Library)); Context.Symbols.Libraries.Add(ClangParser.ConvertLibrary(res.Library));
res.Library.Dispose();
} }
} }
} }

1
src/Generator/Passes/GenerateSymbolsPass.cs

@ -184,7 +184,6 @@ namespace CppSharp.Passes
Context.Symbols.Libraries.Add(nativeLibrary); Context.Symbols.Libraries.Add(nativeLibrary);
Context.Symbols.IndexSymbols(); Context.Symbols.IndexSymbols();
} }
parserResult.Library.Dispose();
} }
else else
Diagnostics.Error($"Parsing of {Path.Combine(outputDir, output)} failed."); Diagnostics.Error($"Parsing of {Path.Combine(outputDir, output)} failed.");

10
src/Parser/Parser.cs

@ -35,16 +35,6 @@ namespace CppSharp
ASTContext = context; ASTContext = context;
} }
/// <summary>
/// Gets target information for a specific target triple.
/// </summary>
public ParserTargetInfo GetTargetInfo(ParserOptions options)
{
options.ASTContext = ASTContext;
return Parser.ClangParser.GetTargetInfo(options);
}
/// <summary> /// <summary>
/// Parses a C++ source file as a translation unit. /// Parses a C++ source file as a translation unit.
/// </summary> /// </summary>

Loading…
Cancel
Save