diff --git a/src/AST/Template.cs b/src/AST/Template.cs index 57cd5c7dc..9ce611870 100644 --- a/src/AST/Template.cs +++ b/src/AST/Template.cs @@ -180,6 +180,8 @@ public override T Visit(IDeclVisitor visitor) { return visitor.VisitTypeAliasTemplateDecl(this); } + + public Declaration CanonicalDecl; } /// diff --git a/src/CLI/Generator.cs b/src/CLI/Generator.cs index ab90cf9b6..7dfce75c5 100644 --- a/src/CLI/Generator.cs +++ b/src/CLI/Generator.cs @@ -40,6 +40,8 @@ void SetupTargetTriple() case TargetArchitecture.WASM64: tripleBuilder.Append("wasm64-"); break; + default: + throw new ArgumentOutOfRangeException(nameof(options.Architecture), "Unsupported target architecture."); } switch (options.Platform) @@ -71,6 +73,8 @@ void SetupTargetTriple() abi = CppAbi.Itanium; break; } + default: + throw new ArgumentOutOfRangeException(nameof(options.Platform), "Unsupported target platform."); } triple = tripleBuilder.ToString(); diff --git a/src/CppParser/AST.h b/src/CppParser/AST.h index c8a3be1cb..7bb740ec9 100644 --- a/src/CppParser/AST.h +++ b/src/CppParser/AST.h @@ -23,7 +23,10 @@ enum class ArchType { UnknownArch, x86, - x86_64 + x86_64, + aarch64, + aarch64_be, + aarch64_32 }; class CS_API NativeLibrary diff --git a/src/CppParser/Bindings/CLI/Decl.cpp b/src/CppParser/Bindings/CLI/Decl.cpp index 58553e540..7e6513ba5 100644 --- a/src/CppParser/Bindings/CLI/Decl.cpp +++ b/src/CppParser/Bindings/CLI/Decl.cpp @@ -3915,6 +3915,16 @@ CppSharp::Parser::AST::TypeAliasTemplate::TypeAliasTemplate(CppSharp::Parser::AS NativePtr = new class ::CppSharp::CppParser::AST::TypeAliasTemplate(__arg0); } +CppSharp::Parser::AST::Declaration^ CppSharp::Parser::AST::TypeAliasTemplate::CanonicalDecl::get() +{ + return (((class ::CppSharp::CppParser::AST::TypeAliasTemplate*)NativePtr)->CanonicalDecl == nullptr) ? nullptr : gcnew ::CppSharp::Parser::AST::Declaration((class ::CppSharp::CppParser::AST::Declaration*)((class ::CppSharp::CppParser::AST::TypeAliasTemplate*)NativePtr)->CanonicalDecl); +} + +void CppSharp::Parser::AST::TypeAliasTemplate::CanonicalDecl::set(CppSharp::Parser::AST::Declaration^ value) +{ + ((class ::CppSharp::CppParser::AST::TypeAliasTemplate*)NativePtr)->CanonicalDecl = (class ::CppSharp::CppParser::AST::Declaration*)value->NativePtr; +} + CppSharp::Parser::AST::TemplateParameter::TemplateParameter(class ::CppSharp::CppParser::AST::TemplateParameter* native) : CppSharp::Parser::AST::Declaration((::CppSharp::CppParser::AST::Declaration*)native) { diff --git a/src/CppParser/Bindings/CLI/Decl.h b/src/CppParser/Bindings/CLI/Decl.h index ef71e36c1..05940503e 100644 --- a/src/CppParser/Bindings/CLI/Decl.h +++ b/src/CppParser/Bindings/CLI/Decl.h @@ -1971,6 +1971,12 @@ namespace CppSharp TypeAliasTemplate(CppSharp::Parser::AST::TypeAliasTemplate^ _0); ~TypeAliasTemplate(); + + property CppSharp::Parser::AST::Declaration^ CanonicalDecl + { + CppSharp::Parser::AST::Declaration^ get(); + void set(CppSharp::Parser::AST::Declaration^); + } }; public ref class TemplateParameter : CppSharp::Parser::AST::Declaration 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 c12579c6c..6e57cd5da 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 @@ -57,7 +57,10 @@ public enum ArchType { UnknownArch = 0, X86 = 1, - X86_64 = 2 + X86_64 = 2, + Aarch64 = 3, + Aarch64Be = 4, + Aarch64_32 = 5 } public unsafe partial class NativeLibrary : IDisposable @@ -12580,7 +12583,7 @@ public uint ParametersCount public unsafe partial class TypeAliasTemplate : global::CppSharp.Parser.AST.Template, IDisposable { - [StructLayout(LayoutKind.Sequential, Size = 132)] + [StructLayout(LayoutKind.Sequential, Size = 136)] public new partial struct __Internal { internal global::CppSharp.Parser.AST.DeclarationKind kind; @@ -12607,6 +12610,7 @@ public unsafe partial class TypeAliasTemplate : global::CppSharp.Parser.AST.Temp internal __IntPtr comment; internal __IntPtr TemplatedDecl; internal global::Std.Vector.__Internalc__N_std_N___1_S_vector_____N_CppSharp_N_CppParser_N_AST_S_Declaration___N_std_N___1_S_allocator__S0_ Parameters; + internal __IntPtr CanonicalDecl; [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17TypeAliasTemplateC2Ev", CallingConvention = __CallingConvention.Cdecl)] internal static extern void ctor(__IntPtr __instance); @@ -12696,6 +12700,20 @@ internal protected override void Dispose(bool disposing, bool callNativeDtor) Marshal.FreeHGlobal(__Instance); __Instance = IntPtr.Zero; } + + public global::CppSharp.Parser.AST.Declaration CanonicalDecl + { + get + { + var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(((__Internal*)__Instance)->CanonicalDecl, false); + return __result0; + } + + set + { + ((__Internal*)__Instance)->CanonicalDecl = value is null ? __IntPtr.Zero : value.__Instance; + } + } } public unsafe partial class TemplateParameter : global::CppSharp.Parser.AST.Declaration, IDisposable @@ -15793,7 +15811,7 @@ public partial struct __Internal [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContextD2Ev", CallingConvention = __CallingConvention.Cdecl)] internal static extern void dtor(__IntPtr __instance); - [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContext18FindOrCreateModuleENSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE", CallingConvention = __CallingConvention.Cdecl)] + [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContext18FindOrCreateModuleERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE", CallingConvention = __CallingConvention.Cdecl)] internal static extern __IntPtr FindOrCreateModule(__IntPtr __instance, __IntPtr File); [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContext19getTranslationUnitsEj", CallingConvention = __CallingConvention.Cdecl)] @@ -15917,7 +15935,7 @@ internal protected virtual void Dispose(bool disposing, bool callNativeDtor) global::Std.BasicStringExtensions.Assign(__basicString0, File); var __arg0 = __basicString0.__Instance; var ___ret = __Internal.FindOrCreateModule(__Instance, __arg0); - __basicString0.Dispose(disposing: true, callNativeDtor:false); + __basicString0.Dispose(); var __result0 = global::CppSharp.Parser.AST.TranslationUnit.__GetOrCreateInstance(___ret, false); return __result0; } diff --git a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc-d/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc-d/CppSharp.CppParser.cs index 331cdb476..7fbe64b0f 100644 --- a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc-d/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc-d/CppSharp.CppParser.cs @@ -57,7 +57,10 @@ public enum ArchType { UnknownArch = 0, X86 = 1, - X86_64 = 2 + X86_64 = 2, + Aarch64 = 3, + Aarch64Be = 4, + Aarch64_32 = 5 } public unsafe partial class NativeLibrary : IDisposable @@ -12580,7 +12583,7 @@ public uint ParametersCount public unsafe partial class TypeAliasTemplate : global::CppSharp.Parser.AST.Template, IDisposable { - [StructLayout(LayoutKind.Sequential, Size = 192)] + [StructLayout(LayoutKind.Sequential, Size = 196)] public new partial struct __Internal { internal global::CppSharp.Parser.AST.DeclarationKind kind; @@ -12607,6 +12610,7 @@ public unsafe partial class TypeAliasTemplate : global::CppSharp.Parser.AST.Temp internal __IntPtr comment; internal __IntPtr TemplatedDecl; internal global::Std.Vector.__Internalc__N_std_S_vector_____N_CppSharp_N_CppParser_N_AST_S_Declaration___N_std_S_allocator__S0_ Parameters; + internal __IntPtr CanonicalDecl; [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "??0TypeAliasTemplate@AST@CppParser@CppSharp@@QAE@XZ", CallingConvention = __CallingConvention.ThisCall)] internal static extern __IntPtr ctor(__IntPtr __instance); @@ -12696,6 +12700,20 @@ internal protected override void Dispose(bool disposing, bool callNativeDtor) Marshal.FreeHGlobal(__Instance); __Instance = IntPtr.Zero; } + + public global::CppSharp.Parser.AST.Declaration CanonicalDecl + { + get + { + var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(((__Internal*)__Instance)->CanonicalDecl, false); + return __result0; + } + + set + { + ((__Internal*)__Instance)->CanonicalDecl = value is null ? __IntPtr.Zero : value.__Instance; + } + } } public unsafe partial class TemplateParameter : global::CppSharp.Parser.AST.Declaration, IDisposable 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 18f4dc9c1..e76e466fa 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 @@ -57,7 +57,10 @@ public enum ArchType { UnknownArch = 0, X86 = 1, - X86_64 = 2 + X86_64 = 2, + Aarch64 = 3, + Aarch64Be = 4, + Aarch64_32 = 5 } public unsafe partial class NativeLibrary : IDisposable @@ -12580,7 +12583,7 @@ public uint ParametersCount public unsafe partial class TypeAliasTemplate : global::CppSharp.Parser.AST.Template, IDisposable { - [StructLayout(LayoutKind.Sequential, Size = 168)] + [StructLayout(LayoutKind.Sequential, Size = 172)] public new partial struct __Internal { internal global::CppSharp.Parser.AST.DeclarationKind kind; @@ -12607,6 +12610,7 @@ public unsafe partial class TypeAliasTemplate : global::CppSharp.Parser.AST.Temp internal __IntPtr comment; internal __IntPtr TemplatedDecl; internal global::Std.Vector.__Internalc__N_std_S_vector_____N_CppSharp_N_CppParser_N_AST_S_Declaration___N_std_S_allocator__S0_ Parameters; + internal __IntPtr CanonicalDecl; [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "??0TypeAliasTemplate@AST@CppParser@CppSharp@@QAE@XZ", CallingConvention = __CallingConvention.ThisCall)] internal static extern __IntPtr ctor(__IntPtr __instance); @@ -12696,6 +12700,20 @@ internal protected override void Dispose(bool disposing, bool callNativeDtor) Marshal.FreeHGlobal(__Instance); __Instance = IntPtr.Zero; } + + public global::CppSharp.Parser.AST.Declaration CanonicalDecl + { + get + { + var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(((__Internal*)__Instance)->CanonicalDecl, false); + return __result0; + } + + set + { + ((__Internal*)__Instance)->CanonicalDecl = value is null ? __IntPtr.Zero : value.__Instance; + } + } } public unsafe partial class TemplateParameter : global::CppSharp.Parser.AST.Declaration, IDisposable 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 2c6915daa..dd03b4d19 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 @@ -57,7 +57,10 @@ public enum ArchType { UnknownArch = 0, X86 = 1, - X86_64 = 2 + X86_64 = 2, + Aarch64 = 3, + Aarch64Be = 4, + Aarch64_32 = 5 } public unsafe partial class NativeLibrary : IDisposable @@ -12579,7 +12582,7 @@ public uint ParametersCount public unsafe partial class TypeAliasTemplate : global::CppSharp.Parser.AST.Template, IDisposable { - [StructLayout(LayoutKind.Sequential, Size = 232)] + [StructLayout(LayoutKind.Sequential, Size = 240)] public new partial struct __Internal { internal global::CppSharp.Parser.AST.DeclarationKind kind; @@ -12606,6 +12609,7 @@ public unsafe partial class TypeAliasTemplate : global::CppSharp.Parser.AST.Temp internal __IntPtr comment; internal __IntPtr TemplatedDecl; internal global::Std.Vector.__Internalc__N_std_N___1_S_vector_____N_CppSharp_N_CppParser_N_AST_S_Declaration___N_std_N___1_S_allocator__S0_ Parameters; + internal __IntPtr CanonicalDecl; [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17TypeAliasTemplateC2Ev", CallingConvention = __CallingConvention.Cdecl)] internal static extern void ctor(__IntPtr __instance); @@ -12695,6 +12699,20 @@ internal protected override void Dispose(bool disposing, bool callNativeDtor) Marshal.FreeHGlobal(__Instance); __Instance = IntPtr.Zero; } + + public global::CppSharp.Parser.AST.Declaration CanonicalDecl + { + get + { + var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(((__Internal*)__Instance)->CanonicalDecl, false); + return __result0; + } + + set + { + ((__Internal*)__Instance)->CanonicalDecl = value is null ? __IntPtr.Zero : value.__Instance; + } + } } public unsafe partial class TemplateParameter : global::CppSharp.Parser.AST.Declaration, IDisposable @@ -15792,7 +15810,7 @@ public partial struct __Internal [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContextD2Ev", CallingConvention = __CallingConvention.Cdecl)] internal static extern void dtor(__IntPtr __instance); - [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContext18FindOrCreateModuleENSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE", CallingConvention = __CallingConvention.Cdecl)] + [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContext18FindOrCreateModuleERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE", CallingConvention = __CallingConvention.Cdecl)] internal static extern __IntPtr FindOrCreateModule(__IntPtr __instance, __IntPtr File); [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContext19getTranslationUnitsEj", CallingConvention = __CallingConvention.Cdecl)] @@ -15916,7 +15934,7 @@ internal protected virtual void Dispose(bool disposing, bool callNativeDtor) global::Std.BasicStringExtensions.Assign(__basicString0, File); var __arg0 = __basicString0.__Instance; var ___ret = __Internal.FindOrCreateModule(__Instance, __arg0); - __basicString0.Dispose(disposing: true, callNativeDtor:false); + __basicString0.Dispose(); var __result0 = global::CppSharp.Parser.AST.TranslationUnit.__GetOrCreateInstance(___ret, false); return __result0; } 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 93855910f..e360d8bdb 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 @@ -57,7 +57,10 @@ public enum ArchType { UnknownArch = 0, X86 = 1, - X86_64 = 2 + X86_64 = 2, + Aarch64 = 3, + Aarch64Be = 4, + Aarch64_32 = 5 } public unsafe partial class NativeLibrary : IDisposable @@ -12579,7 +12582,7 @@ public uint ParametersCount public unsafe partial class TypeAliasTemplate : global::CppSharp.Parser.AST.Template, IDisposable { - [StructLayout(LayoutKind.Sequential, Size = 256)] + [StructLayout(LayoutKind.Sequential, Size = 264)] public new partial struct __Internal { internal global::CppSharp.Parser.AST.DeclarationKind kind; @@ -12606,6 +12609,7 @@ public unsafe partial class TypeAliasTemplate : global::CppSharp.Parser.AST.Temp internal __IntPtr comment; internal __IntPtr TemplatedDecl; internal global::Std.Vector.__Internal Parameters; + internal __IntPtr CanonicalDecl; [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17TypeAliasTemplateC2Ev", CallingConvention = __CallingConvention.Cdecl)] internal static extern void ctor(__IntPtr __instance); @@ -12695,6 +12699,20 @@ internal protected override void Dispose(bool disposing, bool callNativeDtor) Marshal.FreeHGlobal(__Instance); __Instance = IntPtr.Zero; } + + public global::CppSharp.Parser.AST.Declaration CanonicalDecl + { + get + { + var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(((__Internal*)__Instance)->CanonicalDecl, false); + return __result0; + } + + set + { + ((__Internal*)__Instance)->CanonicalDecl = value is null ? __IntPtr.Zero : value.__Instance; + } + } } public unsafe partial class TemplateParameter : global::CppSharp.Parser.AST.Declaration, IDisposable @@ -15792,7 +15810,7 @@ public partial struct __Internal [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContextD2Ev", CallingConvention = __CallingConvention.Cdecl)] internal static extern void dtor(__IntPtr __instance); - [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContext18FindOrCreateModuleENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", CallingConvention = __CallingConvention.Cdecl)] + [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContext18FindOrCreateModuleERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", CallingConvention = __CallingConvention.Cdecl)] internal static extern __IntPtr FindOrCreateModule(__IntPtr __instance, __IntPtr File); [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContext19getTranslationUnitsEj", CallingConvention = __CallingConvention.Cdecl)] @@ -15916,7 +15934,7 @@ internal protected virtual void Dispose(bool disposing, bool callNativeDtor) global::Std.BasicStringExtensions.Assign(__basicString0, File); var __arg0 = __basicString0.__Instance; var ___ret = __Internal.FindOrCreateModule(__Instance, __arg0); - __basicString0.Dispose(disposing: true, callNativeDtor:false); + __basicString0.Dispose(); var __result0 = global::CppSharp.Parser.AST.TranslationUnit.__GetOrCreateInstance(___ret, false); return __result0; } 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 f9e378173..1e7e142ef 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 @@ -57,7 +57,10 @@ public enum ArchType { UnknownArch = 0, X86 = 1, - X86_64 = 2 + X86_64 = 2, + Aarch64 = 3, + Aarch64Be = 4, + Aarch64_32 = 5 } public unsafe partial class NativeLibrary : IDisposable @@ -12579,7 +12582,7 @@ public uint ParametersCount public unsafe partial class TypeAliasTemplate : global::CppSharp.Parser.AST.Template, IDisposable { - [StructLayout(LayoutKind.Sequential, Size = 184)] + [StructLayout(LayoutKind.Sequential, Size = 192)] public new partial struct __Internal { internal global::CppSharp.Parser.AST.DeclarationKind kind; @@ -12606,6 +12609,7 @@ public unsafe partial class TypeAliasTemplate : global::CppSharp.Parser.AST.Temp internal __IntPtr comment; internal __IntPtr TemplatedDecl; internal global::Std.Vector.__Internal Parameters; + internal __IntPtr CanonicalDecl; [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST17TypeAliasTemplateC2Ev", CallingConvention = __CallingConvention.Cdecl)] internal static extern void ctor(__IntPtr __instance); @@ -12695,6 +12699,20 @@ internal protected override void Dispose(bool disposing, bool callNativeDtor) Marshal.FreeHGlobal(__Instance); __Instance = IntPtr.Zero; } + + public global::CppSharp.Parser.AST.Declaration CanonicalDecl + { + get + { + var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(((__Internal*)__Instance)->CanonicalDecl, false); + return __result0; + } + + set + { + ((__Internal*)__Instance)->CanonicalDecl = value is null ? __IntPtr.Zero : value.__Instance; + } + } } public unsafe partial class TemplateParameter : global::CppSharp.Parser.AST.Declaration, IDisposable @@ -15792,7 +15810,7 @@ public partial struct __Internal [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContextD2Ev", CallingConvention = __CallingConvention.Cdecl)] internal static extern void dtor(__IntPtr __instance); - [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContext18FindOrCreateModuleESs", CallingConvention = __CallingConvention.Cdecl)] + [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContext18FindOrCreateModuleERKSs", CallingConvention = __CallingConvention.Cdecl)] internal static extern __IntPtr FindOrCreateModule(__IntPtr __instance, __IntPtr File); [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST10ASTContext19getTranslationUnitsEj", CallingConvention = __CallingConvention.Cdecl)] @@ -15916,7 +15934,7 @@ internal protected virtual void Dispose(bool disposing, bool callNativeDtor) global::Std.BasicStringExtensions.Assign(__basicString0, File); var __arg0 = __basicString0.__Instance; var ___ret = __Internal.FindOrCreateModule(__Instance, __arg0); - __basicString0.Dispose(disposing: true, callNativeDtor:false); + __basicString0.Dispose(); var __result0 = global::CppSharp.Parser.AST.TranslationUnit.__GetOrCreateInstance(___ret, false); return __result0; } diff --git a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc-d/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc-d/CppSharp.CppParser.cs index 4679af98d..efa095b70 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc-d/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc-d/CppSharp.CppParser.cs @@ -57,7 +57,10 @@ public enum ArchType { UnknownArch = 0, X86 = 1, - X86_64 = 2 + X86_64 = 2, + Aarch64 = 3, + Aarch64Be = 4, + Aarch64_32 = 5 } public unsafe partial class NativeLibrary : IDisposable @@ -12581,7 +12584,7 @@ public uint ParametersCount public unsafe partial class TypeAliasTemplate : global::CppSharp.Parser.AST.Template, IDisposable { - [StructLayout(LayoutKind.Sequential, Size = 304)] + [StructLayout(LayoutKind.Sequential, Size = 312)] public new partial struct __Internal { internal global::CppSharp.Parser.AST.DeclarationKind kind; @@ -12608,6 +12611,7 @@ public unsafe partial class TypeAliasTemplate : global::CppSharp.Parser.AST.Temp internal __IntPtr comment; internal __IntPtr TemplatedDecl; internal global::Std.Vector.__Internalc__N_std_S_vector_____N_CppSharp_N_CppParser_N_AST_S_Declaration___N_std_S_allocator__S0_ Parameters; + internal __IntPtr CanonicalDecl; [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "??0TypeAliasTemplate@AST@CppParser@CppSharp@@QEAA@XZ", CallingConvention = __CallingConvention.Cdecl)] internal static extern __IntPtr ctor(__IntPtr __instance); @@ -12697,6 +12701,20 @@ internal protected override void Dispose(bool disposing, bool callNativeDtor) Marshal.FreeHGlobal(__Instance); __Instance = IntPtr.Zero; } + + public global::CppSharp.Parser.AST.Declaration CanonicalDecl + { + get + { + var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(((__Internal*)__Instance)->CanonicalDecl, false); + return __result0; + } + + set + { + ((__Internal*)__Instance)->CanonicalDecl = value is null ? __IntPtr.Zero : value.__Instance; + } + } } public unsafe partial class TemplateParameter : global::CppSharp.Parser.AST.Declaration, IDisposable 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 99aa82fc0..19e7529ef 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 @@ -57,7 +57,10 @@ public enum ArchType { UnknownArch = 0, X86 = 1, - X86_64 = 2 + X86_64 = 2, + Aarch64 = 3, + Aarch64Be = 4, + Aarch64_32 = 5 } public unsafe partial class NativeLibrary : IDisposable @@ -12581,7 +12584,7 @@ public uint ParametersCount public unsafe partial class TypeAliasTemplate : global::CppSharp.Parser.AST.Template, IDisposable { - [StructLayout(LayoutKind.Sequential, Size = 256)] + [StructLayout(LayoutKind.Sequential, Size = 264)] public new partial struct __Internal { internal global::CppSharp.Parser.AST.DeclarationKind kind; @@ -12608,6 +12611,7 @@ public unsafe partial class TypeAliasTemplate : global::CppSharp.Parser.AST.Temp internal __IntPtr comment; internal __IntPtr TemplatedDecl; internal global::Std.Vector.__Internalc__N_std_S_vector_____N_CppSharp_N_CppParser_N_AST_S_Declaration___N_std_S_allocator__S0_ Parameters; + internal __IntPtr CanonicalDecl; [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "??0TypeAliasTemplate@AST@CppParser@CppSharp@@QEAA@XZ", CallingConvention = __CallingConvention.Cdecl)] internal static extern __IntPtr ctor(__IntPtr __instance); @@ -12697,6 +12701,20 @@ internal protected override void Dispose(bool disposing, bool callNativeDtor) Marshal.FreeHGlobal(__Instance); __Instance = IntPtr.Zero; } + + public global::CppSharp.Parser.AST.Declaration CanonicalDecl + { + get + { + var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(((__Internal*)__Instance)->CanonicalDecl, false); + return __result0; + } + + set + { + ((__Internal*)__Instance)->CanonicalDecl = value is null ? __IntPtr.Zero : value.__Instance; + } + } } public unsafe partial class TemplateParameter : global::CppSharp.Parser.AST.Declaration, IDisposable diff --git a/src/CppParser/Decl.h b/src/CppParser/Decl.h index 09fa9b687..ff78797c9 100644 --- a/src/CppParser/Decl.h +++ b/src/CppParser/Decl.h @@ -632,6 +632,8 @@ namespace CppSharp public: TypeAliasTemplate(); ~TypeAliasTemplate(); + + Declaration* CanonicalDecl = nullptr; }; class CS_API TemplateParameter : public Declaration diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index 9564728d3..b7d1d8956 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -1474,12 +1474,17 @@ TemplateTemplateParameter* Parser::WalkTemplateTemplateParameter(const clang::Te if (TP) return TP; + auto NS = GetNamespace(TTP); + assertm(NS, "Expected a valid namespace!\n"); + TP = new TemplateTemplateParameter(); HandleDeclaration(TTP, TP); + TP->_namespace = NS; TP->Parameters = WalkTemplateParameterList(TTP->getTemplateParameters()); TP->isParameterPack = TTP->isParameterPack(); TP->isPackExpansion = TTP->isPackExpansion(); TP->isExpandedParameterPack = TTP->isExpandedParameterPack(); + if (TTP->getTemplatedDecl()) { auto TD = WalkDeclaration(TTP->getTemplatedDecl()); @@ -1499,6 +1504,10 @@ TypeTemplateParameter* Parser::WalkTypeTemplateParameter(const clang::TemplateTy TP = new TypeTemplateParameter(); TP->name = GetDeclName(TTPD); + auto NS = GetNamespace(TTPD); + assertm(NS, "Expected a valid namespace!\n"); + TP->_namespace = NS; + HandleDeclaration(TTPD, TP); if (TTPD->hasDefaultArgument()) TP->defaultArgument = GetQualifiedType(TTPD->getDefaultArgument()); @@ -1519,6 +1528,10 @@ NonTypeTemplateParameter* Parser::WalkNonTypeTemplateParameter(const clang::NonT NTP = new NonTypeTemplateParameter(); NTP->name = GetDeclName(NTTPD); + auto NS = GetNamespace(NTTPD); + assertm(NS, "Expected a valid namespace!\n"); + NTP->_namespace = NS; + HandleDeclaration(NTTPD, NTP); if (NTTPD->hasDefaultArgument()) NTP->defaultArgument = WalkExpressionObsolete(NTTPD->getDefaultArgument()); @@ -1677,8 +1690,9 @@ TypeAliasTemplate* Parser::WalkTypeAliasTemplate( HandleDeclaration(TD, TA); TA->name = GetDeclName(TD); + TA->_namespace = NS; NS->Templates.push_back(TA); - + TA->CanonicalDecl = WalkDeclaration(TD->getCanonicalDecl()); TA->TemplatedDecl = WalkDeclaration(TD->getTemplatedDecl()); TA->Parameters = WalkTemplateParameterList(TD->getTemplateParameters()); @@ -2119,6 +2133,10 @@ DeclarationContext* Parser::GetNamespace(const clang::Decl* D, if (Context->isTranslationUnit()) return GetTranslationUnit(D); + auto NS = walkedNamespaces[Context]; + if (NS) + return NS; + TranslationUnit* Unit = GetTranslationUnit(cast(Context)); // Else we need to do a more expensive check to get all the namespaces, @@ -2138,19 +2156,27 @@ DeclarationContext* Parser::GetNamespace(const clang::Decl* D, { const auto* Ctx = *I; + auto CtxNS = walkedNamespaces[Ctx]; + if (CtxNS) + { + DC = CtxNS; + continue; + } + switch(Ctx->getDeclKind()) { case Decl::Namespace: { auto ND = cast(Ctx); if (ND->isAnonymousNamespace()) - continue; + break; + auto Name = ND->getName(); DC = DC->FindCreateNamespace(Name.str()); ((Namespace*)DC)->isAnonymous = ND->isAnonymousNamespace(); ((Namespace*)DC)->isInline = ND->isInline(); HandleDeclaration(ND, DC); - continue; + break; } case Decl::LinkageSpec: { @@ -2161,7 +2187,7 @@ DeclarationContext* Parser::GetNamespace(const clang::Decl* D, { auto RD = cast(Ctx); DC = WalkRecordCXX(RD); - continue; + break; } case Decl::CXXDeductionGuide: { @@ -2172,9 +2198,13 @@ DeclarationContext* Parser::GetNamespace(const clang::Decl* D, auto D = cast(Ctx); auto Decl = WalkDeclaration(D); DC = static_cast(Decl); + break; } } + + walkedNamespaces[Ctx] = DC; } + walkedNamespaces[Context] = DC; return DC; } @@ -4637,8 +4667,16 @@ static ArchType ConvertArchType(unsigned int archType) return ArchType::x86; case llvm::Triple::ArchType::x86_64: return ArchType::x86_64; + case llvm::Triple::ArchType::aarch64: + return ArchType::aarch64; + case llvm::Triple::ArchType::aarch64_be: + return ArchType::aarch64_be; + case llvm::Triple::ArchType::aarch64_32: + return ArchType::aarch64_32; + default: + assertm(0, "Unsupported architecture type!\n"); + return ArchType::UnknownArch; } - return ArchType::UnknownArch; } template diff --git a/src/CppParser/Parser.h b/src/CppParser/Parser.h index fd71dd40a..8fb9338b6 100644 --- a/src/CppParser/Parser.h +++ b/src/CppParser/Parser.h @@ -187,6 +187,7 @@ class Parser std::unique_ptr LLVMModule; std::unique_ptr CGM; std::unique_ptr codeGenTypes; + std::unordered_map walkedNamespaces; std::unordered_map walkedTypeTemplateParameters; std::unordered_map walkedTemplateTemplateParameters; std::unordered_map walkedNonTypeTemplateParameters; diff --git a/src/Generator/Driver.cs b/src/Generator/Driver.cs index 0edbcf1cd..856398e94 100644 --- a/src/Generator/Driver.cs +++ b/src/Generator/Driver.cs @@ -28,16 +28,14 @@ public Driver(DriverOptions options) void ValidateOptions() { - if (!Options.Compilation.Platform.HasValue) - Options.Compilation.Platform = Platform.Host; + Options.Compilation.Platform ??= Platform.Host; foreach (var module in Options.Modules) { if (string.IsNullOrWhiteSpace(module.LibraryName)) throw new InvalidOptionException("One of your modules has no library name."); - if (module.OutputNamespace == null) - module.OutputNamespace = module.LibraryName; + module.OutputNamespace ??= module.LibraryName; for (int i = 0; i < module.IncludeDirs.Count; i++) { diff --git a/src/Parser/ASTConverter.cs b/src/Parser/ASTConverter.cs index 81332f027..73a6e1698 100644 --- a/src/Parser/ASTConverter.cs +++ b/src/Parser/ASTConverter.cs @@ -1818,6 +1818,7 @@ public override AST.Declaration VisitTypeAliasTemplate(TypeAliasTemplate decl) { var _decl = new AST.TypeAliasTemplate(); VisitTemplate(decl, _decl); + _decl.CanonicalDecl = Visit(decl.CanonicalDecl); return _decl; }