Browse Source

Implement ClassTemplatePartialSpecialization::Parameters (#1809)

* Implement ClassTemplatePartialSpecialization::Parameters

* Template.cs: Implement ClassTemplatePartialSpecialization.Parameters

* GeneratorKind: fix bug introduced while migrating from enum to class

* Implement native ClassTemplatePartialSpecialization.Parameters + ASTConverter

* regenerated bindings (#1813)

* regenerated bindings

* regenerated bindings after rebase

* Directory.Build.props: support C# 10.0

* Implement native ClassTemplatePartialSpecialization.Parameters + ASTConverter

* Regenerated bindings

* TestAST.cs: add TestASTClassTemplatePartialSpecialization
pull/1823/head
deadlocklogic 2 years ago committed by GitHub
parent
commit
9071cd2a59
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      src/AST/Template.cs
  2. 2
      src/CppParser/AST.cpp
  3. 49
      src/CppParser/Bindings/CLI/Decl.cpp
  4. 17
      src/CppParser/Bindings/CLI/Decl.h
  5. 45
      src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs
  6. 45
      src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs
  7. 45
      src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs
  8. 45
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs
  9. 45
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs
  10. 45
      src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs
  11. 1
      src/CppParser/Decl.h
  12. 2
      src/CppParser/Parser.cpp
  13. 22
      src/Generator.Tests/AST/TestAST.cs
  14. 6
      src/Parser/ASTConverter.cs
  15. 11
      tests/dotnet/Native/AST.h

6
src/AST/Template.cs

@ -304,6 +304,12 @@ namespace CppSharp.AST @@ -304,6 +304,12 @@ namespace CppSharp.AST
/// </summary>
public class ClassTemplatePartialSpecialization : ClassTemplateSpecialization
{
public readonly List<Declaration> Parameters;
public ClassTemplatePartialSpecialization()
{
Parameters = new List<Declaration>();
}
}
/// <summary>

2
src/CppParser/AST.cpp

@ -793,6 +793,8 @@ ClassTemplatePartialSpecialization::ClassTemplatePartialSpecialization() @@ -793,6 +793,8 @@ ClassTemplatePartialSpecialization::ClassTemplatePartialSpecialization()
ClassTemplatePartialSpecialization::~ClassTemplatePartialSpecialization() {}
DEF_VECTOR(ClassTemplatePartialSpecialization, Declaration*, Parameters)
FunctionTemplate::FunctionTemplate() : Template(DeclarationKind::FunctionTemplate) {}
FunctionTemplate::~FunctionTemplate() {}

49
src/CppParser/Bindings/CLI/Decl.cpp

@ -4514,6 +4514,26 @@ CppSharp::Parser::AST::ClassTemplatePartialSpecialization::ClassTemplatePartialS @@ -4514,6 +4514,26 @@ CppSharp::Parser::AST::ClassTemplatePartialSpecialization::ClassTemplatePartialS
NativePtr = new class ::CppSharp::CppParser::AST::ClassTemplatePartialSpecialization();
}
CppSharp::Parser::AST::Declaration^ CppSharp::Parser::AST::ClassTemplatePartialSpecialization::GetParameters(unsigned int i)
{
auto ___ret = ((class ::CppSharp::CppParser::AST::ClassTemplatePartialSpecialization*)NativePtr)->getParameters(i);
if (___ret == nullptr) return nullptr;
return (___ret == nullptr) ? nullptr : gcnew ::CppSharp::Parser::AST::Declaration((class ::CppSharp::CppParser::AST::Declaration*)___ret);
}
void CppSharp::Parser::AST::ClassTemplatePartialSpecialization::AddParameters(CppSharp::Parser::AST::Declaration^ s)
{
if (ReferenceEquals(s, nullptr))
throw gcnew ::System::ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
auto __arg0 = (class ::CppSharp::CppParser::AST::Declaration*)s->NativePtr;
((class ::CppSharp::CppParser::AST::ClassTemplatePartialSpecialization*)NativePtr)->addParameters(__arg0);
}
void CppSharp::Parser::AST::ClassTemplatePartialSpecialization::ClearParameters()
{
((class ::CppSharp::CppParser::AST::ClassTemplatePartialSpecialization*)NativePtr)->clearParameters();
}
CppSharp::Parser::AST::ClassTemplatePartialSpecialization::ClassTemplatePartialSpecialization(CppSharp::Parser::AST::ClassTemplatePartialSpecialization^ _0)
: CppSharp::Parser::AST::ClassTemplateSpecialization((::CppSharp::CppParser::AST::ClassTemplateSpecialization*)nullptr)
{
@ -4524,6 +4544,35 @@ CppSharp::Parser::AST::ClassTemplatePartialSpecialization::ClassTemplatePartialS @@ -4524,6 +4544,35 @@ CppSharp::Parser::AST::ClassTemplatePartialSpecialization::ClassTemplatePartialS
NativePtr = new class ::CppSharp::CppParser::AST::ClassTemplatePartialSpecialization(__arg0);
}
::System::Collections::Generic::List<CppSharp::Parser::AST::Declaration^>^ CppSharp::Parser::AST::ClassTemplatePartialSpecialization::Parameters::get()
{
auto _tmp__Parameters = gcnew ::System::Collections::Generic::List<CppSharp::Parser::AST::Declaration^>();
auto __list0 = ((class ::CppSharp::CppParser::AST::ClassTemplatePartialSpecialization*)NativePtr)->Parameters;
for(auto _element : __list0)
{
auto _marshalElement = (_element == nullptr) ? nullptr : gcnew ::CppSharp::Parser::AST::Declaration((class ::CppSharp::CppParser::AST::Declaration*)_element);
_tmp__Parameters->Add(_marshalElement);
}
return _tmp__Parameters;
}
void CppSharp::Parser::AST::ClassTemplatePartialSpecialization::Parameters::set(::System::Collections::Generic::List<CppSharp::Parser::AST::Declaration^>^ value)
{
auto _tmpvalue = std::vector<::CppSharp::CppParser::AST::Declaration*>();
for each(CppSharp::Parser::AST::Declaration^ _element in value)
{
auto _marshalElement = (class ::CppSharp::CppParser::AST::Declaration*)_element->NativePtr;
_tmpvalue.push_back(_marshalElement);
}
((class ::CppSharp::CppParser::AST::ClassTemplatePartialSpecialization*)NativePtr)->Parameters = _tmpvalue;
}
unsigned int CppSharp::Parser::AST::ClassTemplatePartialSpecialization::ParametersCount::get()
{
auto ___ret = ((class ::CppSharp::CppParser::AST::ClassTemplatePartialSpecialization*)NativePtr)->getParametersCount();
return ___ret;
}
CppSharp::Parser::AST::FunctionTemplate::FunctionTemplate(class ::CppSharp::CppParser::AST::FunctionTemplate* native)
: CppSharp::Parser::AST::Template((::CppSharp::CppParser::AST::Template*)native)
{

17
src/CppParser/Bindings/CLI/Decl.h

@ -2205,6 +2205,23 @@ namespace CppSharp @@ -2205,6 +2205,23 @@ namespace CppSharp
ClassTemplatePartialSpecialization(CppSharp::Parser::AST::ClassTemplatePartialSpecialization^ _0);
~ClassTemplatePartialSpecialization();
property ::System::Collections::Generic::List<CppSharp::Parser::AST::Declaration^>^ Parameters
{
::System::Collections::Generic::List<CppSharp::Parser::AST::Declaration^>^ get();
void set(::System::Collections::Generic::List<CppSharp::Parser::AST::Declaration^>^);
}
property unsigned int ParametersCount
{
unsigned int get();
}
CppSharp::Parser::AST::Declaration^ GetParameters(unsigned int i);
void AddParameters(CppSharp::Parser::AST::Declaration^ s);
void ClearParameters();
};
public ref class FunctionTemplate : CppSharp::Parser::AST::Template

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

@ -13779,7 +13779,7 @@ namespace CppSharp @@ -13779,7 +13779,7 @@ namespace CppSharp
public unsafe partial class ClassTemplatePartialSpecialization : global::CppSharp.Parser.AST.ClassTemplateSpecialization, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 328)]
[StructLayout(LayoutKind.Sequential, Size = 340)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.DeclarationKind kind;
@ -13834,6 +13834,7 @@ namespace CppSharp @@ -13834,6 +13834,7 @@ namespace CppSharp
internal __IntPtr templatedDecl;
internal global::Std.Vector.__Internalc__N_std_N___1_S_vector____N_CppSharp_N_CppParser_N_AST_S_TemplateArgument___N_std_N___1_S_allocator__S0_ Arguments;
internal global::CppSharp.Parser.AST.TemplateSpecializationKind specializationKind;
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;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecializationC2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ctor(__IntPtr __instance);
@ -13843,6 +13844,18 @@ namespace CppSharp @@ -13843,6 +13844,18 @@ namespace CppSharp
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecializationD2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void dtor(__IntPtr __instance);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecialization13getParametersEj", CallingConvention = __CallingConvention.Cdecl)]
internal static extern __IntPtr GetParameters(__IntPtr __instance, uint i);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecialization13addParametersERPNS1_11DeclarationE", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void AddParameters(__IntPtr __instance, __IntPtr s);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecialization15clearParametersEv", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ClearParameters(__IntPtr __instance);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecialization18getParametersCountEv", CallingConvention = __CallingConvention.Cdecl)]
internal static extern uint GetParametersCount(__IntPtr __instance);
}
internal static new ClassTemplatePartialSpecialization __CreateInstance(__IntPtr native, bool skipVTables = false)
@ -13923,6 +13936,36 @@ namespace CppSharp @@ -13923,6 +13936,36 @@ namespace CppSharp
Marshal.FreeHGlobal(__Instance);
__Instance = IntPtr.Zero;
}
public global::CppSharp.Parser.AST.Declaration GetParameters(uint i)
{
var ___ret = __Internal.GetParameters(__Instance, i);
var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(___ret, false);
return __result0;
}
public void AddParameters(global::CppSharp.Parser.AST.Declaration s)
{
if (ReferenceEquals(s, null))
throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
var ____arg0 = s.__Instance;
var __arg0 = new __IntPtr(&____arg0);
__Internal.AddParameters(__Instance, __arg0);
}
public void ClearParameters()
{
__Internal.ClearParameters(__Instance);
}
public uint ParametersCount
{
get
{
var ___ret = __Internal.GetParametersCount(__Instance);
return ___ret;
}
}
}
public unsafe partial class FunctionTemplate : global::CppSharp.Parser.AST.Template, IDisposable

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

@ -13779,7 +13779,7 @@ namespace CppSharp @@ -13779,7 +13779,7 @@ namespace CppSharp
public unsafe partial class ClassTemplatePartialSpecialization : global::CppSharp.Parser.AST.ClassTemplateSpecialization, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 360)]
[StructLayout(LayoutKind.Sequential, Size = 372)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.DeclarationKind kind;
@ -13834,6 +13834,7 @@ namespace CppSharp @@ -13834,6 +13834,7 @@ namespace CppSharp
internal __IntPtr templatedDecl;
internal global::Std.Vector.__Internalc__N_std_S_vector____N_CppSharp_N_CppParser_N_AST_S_TemplateArgument___N_std_S_allocator__S0_ Arguments;
internal global::CppSharp.Parser.AST.TemplateSpecializationKind specializationKind;
internal global::Std.Vector.__Internalc__N_std_S_vector_____N_CppSharp_N_CppParser_N_AST_S_Declaration___N_std_S_allocator__S0_ Parameters;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "??0ClassTemplatePartialSpecialization@AST@CppParser@CppSharp@@QAE@XZ", CallingConvention = __CallingConvention.ThisCall)]
internal static extern __IntPtr ctor(__IntPtr __instance);
@ -13843,6 +13844,18 @@ namespace CppSharp @@ -13843,6 +13844,18 @@ namespace CppSharp
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "??1ClassTemplatePartialSpecialization@AST@CppParser@CppSharp@@QAE@XZ", CallingConvention = __CallingConvention.ThisCall)]
internal static extern void dtor(__IntPtr __instance);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "?getParameters@ClassTemplatePartialSpecialization@AST@CppParser@CppSharp@@QAEPAVDeclaration@234@I@Z", CallingConvention = __CallingConvention.ThisCall)]
internal static extern __IntPtr GetParameters(__IntPtr __instance, uint i);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "?addParameters@ClassTemplatePartialSpecialization@AST@CppParser@CppSharp@@QAEXAAPAVDeclaration@234@@Z", CallingConvention = __CallingConvention.ThisCall)]
internal static extern void AddParameters(__IntPtr __instance, __IntPtr s);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "?clearParameters@ClassTemplatePartialSpecialization@AST@CppParser@CppSharp@@QAEXXZ", CallingConvention = __CallingConvention.ThisCall)]
internal static extern void ClearParameters(__IntPtr __instance);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "?getParametersCount@ClassTemplatePartialSpecialization@AST@CppParser@CppSharp@@QAEIXZ", CallingConvention = __CallingConvention.ThisCall)]
internal static extern uint GetParametersCount(__IntPtr __instance);
}
internal static new ClassTemplatePartialSpecialization __CreateInstance(__IntPtr native, bool skipVTables = false)
@ -13923,6 +13936,36 @@ namespace CppSharp @@ -13923,6 +13936,36 @@ namespace CppSharp
Marshal.FreeHGlobal(__Instance);
__Instance = IntPtr.Zero;
}
public global::CppSharp.Parser.AST.Declaration GetParameters(uint i)
{
var ___ret = __Internal.GetParameters(__Instance, i);
var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(___ret, false);
return __result0;
}
public void AddParameters(global::CppSharp.Parser.AST.Declaration s)
{
if (ReferenceEquals(s, null))
throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
var ____arg0 = s.__Instance;
var __arg0 = new __IntPtr(&____arg0);
__Internal.AddParameters(__Instance, __arg0);
}
public void ClearParameters()
{
__Internal.ClearParameters(__Instance);
}
public uint ParametersCount
{
get
{
var ___ret = __Internal.GetParametersCount(__Instance);
return ___ret;
}
}
}
public unsafe partial class FunctionTemplate : global::CppSharp.Parser.AST.Template, IDisposable

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

@ -13778,7 +13778,7 @@ namespace CppSharp @@ -13778,7 +13778,7 @@ namespace CppSharp
public unsafe partial class ClassTemplatePartialSpecialization : global::CppSharp.Parser.AST.ClassTemplateSpecialization, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 608)]
[StructLayout(LayoutKind.Sequential, Size = 632)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.DeclarationKind kind;
@ -13833,6 +13833,7 @@ namespace CppSharp @@ -13833,6 +13833,7 @@ namespace CppSharp
internal __IntPtr templatedDecl;
internal global::Std.Vector.__Internalc__N_std_N___1_S_vector____N_CppSharp_N_CppParser_N_AST_S_TemplateArgument___N_std_N___1_S_allocator__S0_ Arguments;
internal global::CppSharp.Parser.AST.TemplateSpecializationKind specializationKind;
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;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecializationC2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ctor(__IntPtr __instance);
@ -13842,6 +13843,18 @@ namespace CppSharp @@ -13842,6 +13843,18 @@ namespace CppSharp
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecializationD2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void dtor(__IntPtr __instance);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecialization13getParametersEj", CallingConvention = __CallingConvention.Cdecl)]
internal static extern __IntPtr GetParameters(__IntPtr __instance, uint i);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecialization13addParametersERPNS1_11DeclarationE", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void AddParameters(__IntPtr __instance, __IntPtr s);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecialization15clearParametersEv", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ClearParameters(__IntPtr __instance);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecialization18getParametersCountEv", CallingConvention = __CallingConvention.Cdecl)]
internal static extern uint GetParametersCount(__IntPtr __instance);
}
internal static new ClassTemplatePartialSpecialization __CreateInstance(__IntPtr native, bool skipVTables = false)
@ -13922,6 +13935,36 @@ namespace CppSharp @@ -13922,6 +13935,36 @@ namespace CppSharp
Marshal.FreeHGlobal(__Instance);
__Instance = IntPtr.Zero;
}
public global::CppSharp.Parser.AST.Declaration GetParameters(uint i)
{
var ___ret = __Internal.GetParameters(__Instance, i);
var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(___ret, false);
return __result0;
}
public void AddParameters(global::CppSharp.Parser.AST.Declaration s)
{
if (ReferenceEquals(s, null))
throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
var ____arg0 = s.__Instance;
var __arg0 = new __IntPtr(&____arg0);
__Internal.AddParameters(__Instance, __arg0);
}
public void ClearParameters()
{
__Internal.ClearParameters(__Instance);
}
public uint ParametersCount
{
get
{
var ___ret = __Internal.GetParametersCount(__Instance);
return ___ret;
}
}
}
public unsafe partial class FunctionTemplate : global::CppSharp.Parser.AST.Template, IDisposable

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

@ -13778,7 +13778,7 @@ namespace CppSharp @@ -13778,7 +13778,7 @@ namespace CppSharp
public unsafe partial class ClassTemplatePartialSpecialization : global::CppSharp.Parser.AST.ClassTemplateSpecialization, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 656)]
[StructLayout(LayoutKind.Sequential, Size = 680)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.DeclarationKind kind;
@ -13833,6 +13833,7 @@ namespace CppSharp @@ -13833,6 +13833,7 @@ namespace CppSharp
internal __IntPtr templatedDecl;
internal global::Std.Vector.__Internal Arguments;
internal global::CppSharp.Parser.AST.TemplateSpecializationKind specializationKind;
internal global::Std.Vector.__Internal Parameters;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecializationC2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ctor(__IntPtr __instance);
@ -13842,6 +13843,18 @@ namespace CppSharp @@ -13842,6 +13843,18 @@ namespace CppSharp
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecializationD2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void dtor(__IntPtr __instance);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecialization13getParametersEj", CallingConvention = __CallingConvention.Cdecl)]
internal static extern __IntPtr GetParameters(__IntPtr __instance, uint i);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecialization13addParametersERPNS1_11DeclarationE", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void AddParameters(__IntPtr __instance, __IntPtr s);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecialization15clearParametersEv", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ClearParameters(__IntPtr __instance);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecialization18getParametersCountEv", CallingConvention = __CallingConvention.Cdecl)]
internal static extern uint GetParametersCount(__IntPtr __instance);
}
internal static new ClassTemplatePartialSpecialization __CreateInstance(__IntPtr native, bool skipVTables = false)
@ -13922,6 +13935,36 @@ namespace CppSharp @@ -13922,6 +13935,36 @@ namespace CppSharp
Marshal.FreeHGlobal(__Instance);
__Instance = IntPtr.Zero;
}
public global::CppSharp.Parser.AST.Declaration GetParameters(uint i)
{
var ___ret = __Internal.GetParameters(__Instance, i);
var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(___ret, false);
return __result0;
}
public void AddParameters(global::CppSharp.Parser.AST.Declaration s)
{
if (ReferenceEquals(s, null))
throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
var ____arg0 = s.__Instance;
var __arg0 = new __IntPtr(&____arg0);
__Internal.AddParameters(__Instance, __arg0);
}
public void ClearParameters()
{
__Internal.ClearParameters(__Instance);
}
public uint ParametersCount
{
get
{
var ___ret = __Internal.GetParametersCount(__Instance);
return ___ret;
}
}
}
public unsafe partial class FunctionTemplate : global::CppSharp.Parser.AST.Template, IDisposable

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

@ -13778,7 +13778,7 @@ namespace CppSharp @@ -13778,7 +13778,7 @@ namespace CppSharp
public unsafe partial class ClassTemplatePartialSpecialization : global::CppSharp.Parser.AST.ClassTemplateSpecialization, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 584)]
[StructLayout(LayoutKind.Sequential, Size = 608)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.DeclarationKind kind;
@ -13833,6 +13833,7 @@ namespace CppSharp @@ -13833,6 +13833,7 @@ namespace CppSharp
internal __IntPtr templatedDecl;
internal global::Std.Vector.__Internal Arguments;
internal global::CppSharp.Parser.AST.TemplateSpecializationKind specializationKind;
internal global::Std.Vector.__Internal Parameters;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecializationC2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ctor(__IntPtr __instance);
@ -13842,6 +13843,18 @@ namespace CppSharp @@ -13842,6 +13843,18 @@ namespace CppSharp
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecializationD2Ev", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void dtor(__IntPtr __instance);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecialization13getParametersEj", CallingConvention = __CallingConvention.Cdecl)]
internal static extern __IntPtr GetParameters(__IntPtr __instance, uint i);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecialization13addParametersERPNS1_11DeclarationE", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void AddParameters(__IntPtr __instance, __IntPtr s);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecialization15clearParametersEv", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ClearParameters(__IntPtr __instance);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST34ClassTemplatePartialSpecialization18getParametersCountEv", CallingConvention = __CallingConvention.Cdecl)]
internal static extern uint GetParametersCount(__IntPtr __instance);
}
internal static new ClassTemplatePartialSpecialization __CreateInstance(__IntPtr native, bool skipVTables = false)
@ -13922,6 +13935,36 @@ namespace CppSharp @@ -13922,6 +13935,36 @@ namespace CppSharp
Marshal.FreeHGlobal(__Instance);
__Instance = IntPtr.Zero;
}
public global::CppSharp.Parser.AST.Declaration GetParameters(uint i)
{
var ___ret = __Internal.GetParameters(__Instance, i);
var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(___ret, false);
return __result0;
}
public void AddParameters(global::CppSharp.Parser.AST.Declaration s)
{
if (ReferenceEquals(s, null))
throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
var ____arg0 = s.__Instance;
var __arg0 = new __IntPtr(&____arg0);
__Internal.AddParameters(__Instance, __arg0);
}
public void ClearParameters()
{
__Internal.ClearParameters(__Instance);
}
public uint ParametersCount
{
get
{
var ___ret = __Internal.GetParametersCount(__Instance);
return ___ret;
}
}
}
public unsafe partial class FunctionTemplate : global::CppSharp.Parser.AST.Template, IDisposable

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

@ -13780,7 +13780,7 @@ namespace CppSharp @@ -13780,7 +13780,7 @@ namespace CppSharp
public unsafe partial class ClassTemplatePartialSpecialization : global::CppSharp.Parser.AST.ClassTemplateSpecialization, IDisposable
{
[StructLayout(LayoutKind.Sequential, Size = 624)]
[StructLayout(LayoutKind.Sequential, Size = 648)]
public new partial struct __Internal
{
internal global::CppSharp.Parser.AST.DeclarationKind kind;
@ -13835,6 +13835,7 @@ namespace CppSharp @@ -13835,6 +13835,7 @@ namespace CppSharp
internal __IntPtr templatedDecl;
internal global::Std.Vector.__Internalc__N_std_S_vector____N_CppSharp_N_CppParser_N_AST_S_TemplateArgument___N_std_S_allocator__S0_ Arguments;
internal global::CppSharp.Parser.AST.TemplateSpecializationKind specializationKind;
internal global::Std.Vector.__Internalc__N_std_S_vector_____N_CppSharp_N_CppParser_N_AST_S_Declaration___N_std_S_allocator__S0_ Parameters;
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "??0ClassTemplatePartialSpecialization@AST@CppParser@CppSharp@@QEAA@XZ", CallingConvention = __CallingConvention.Cdecl)]
internal static extern __IntPtr ctor(__IntPtr __instance);
@ -13844,6 +13845,18 @@ namespace CppSharp @@ -13844,6 +13845,18 @@ namespace CppSharp
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "??1ClassTemplatePartialSpecialization@AST@CppParser@CppSharp@@QEAA@XZ", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void dtor(__IntPtr __instance);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "?getParameters@ClassTemplatePartialSpecialization@AST@CppParser@CppSharp@@QEAAPEAVDeclaration@234@I@Z", CallingConvention = __CallingConvention.Cdecl)]
internal static extern __IntPtr GetParameters(__IntPtr __instance, uint i);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "?addParameters@ClassTemplatePartialSpecialization@AST@CppParser@CppSharp@@QEAAXAEAPEAVDeclaration@234@@Z", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void AddParameters(__IntPtr __instance, __IntPtr s);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "?clearParameters@ClassTemplatePartialSpecialization@AST@CppParser@CppSharp@@QEAAXXZ", CallingConvention = __CallingConvention.Cdecl)]
internal static extern void ClearParameters(__IntPtr __instance);
[SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "?getParametersCount@ClassTemplatePartialSpecialization@AST@CppParser@CppSharp@@QEAAIXZ", CallingConvention = __CallingConvention.Cdecl)]
internal static extern uint GetParametersCount(__IntPtr __instance);
}
internal static new ClassTemplatePartialSpecialization __CreateInstance(__IntPtr native, bool skipVTables = false)
@ -13924,6 +13937,36 @@ namespace CppSharp @@ -13924,6 +13937,36 @@ namespace CppSharp
Marshal.FreeHGlobal(__Instance);
__Instance = IntPtr.Zero;
}
public global::CppSharp.Parser.AST.Declaration GetParameters(uint i)
{
var ___ret = __Internal.GetParameters(__Instance, i);
var __result0 = global::CppSharp.Parser.AST.Declaration.__GetOrCreateInstance(___ret, false);
return __result0;
}
public void AddParameters(global::CppSharp.Parser.AST.Declaration s)
{
if (ReferenceEquals(s, null))
throw new global::System.ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
var ____arg0 = s.__Instance;
var __arg0 = new __IntPtr(&____arg0);
__Internal.AddParameters(__Instance, __arg0);
}
public void ClearParameters()
{
__Internal.ClearParameters(__Instance);
}
public uint ParametersCount
{
get
{
var ___ret = __Internal.GetParametersCount(__Instance);
return ___ret;
}
}
}
public unsafe partial class FunctionTemplate : global::CppSharp.Parser.AST.Template, IDisposable

1
src/CppParser/Decl.h

@ -715,6 +715,7 @@ namespace CppSharp @@ -715,6 +715,7 @@ namespace CppSharp
public:
ClassTemplatePartialSpecialization();
~ClassTemplatePartialSpecialization();
VECTOR(Declaration *, Parameters)
};
class CS_API FunctionTemplate : public Template

2
src/CppParser/Parser.cpp

@ -1339,6 +1339,8 @@ Parser::WalkClassTemplatePartialSpecialization(const clang::ClassTemplatePartial @@ -1339,6 +1339,8 @@ Parser::WalkClassTemplatePartialSpecialization(const clang::ClassTemplatePartial
}
}
TS->Parameters = WalkTemplateParameterList(CTS->getTemplateParameters());
return TS;
}

22
src/Generator.Tests/AST/TestAST.cs

@ -289,6 +289,28 @@ namespace CppSharp.Generator.Tests.AST @@ -289,6 +289,28 @@ namespace CppSharp.Generator.Tests.AST
Assert.AreSame(classTemplateSpecialization.TemplatedDecl.TemplatedClass, template.TemplatedClass);
}
[Test]
public void TestASTClassTemplatePartialSpecialization()
{
var classTemplate = AstContext.TranslationUnits
.SelectMany(u => u.Templates.OfType<ClassTemplate>())
.FirstOrDefault(t => t.Name == "TestClassTemplatePartialSpecialization");
var classTemplatePartialSpecializations = classTemplate.Specializations.Where(specialization => specialization is ClassTemplatePartialSpecialization).Cast<ClassTemplatePartialSpecialization>();
Assert.IsTrue(classTemplatePartialSpecializations.Count() == 1);
var classTemplatePartialSpecialization = classTemplatePartialSpecializations.First();
Assert.AreEqual(TemplateSpecializationKind.ExplicitSpecialization, classTemplatePartialSpecialization.SpecializationKind);
var classTemplatePartialSpecializationParameters = classTemplatePartialSpecialization.Parameters;
Assert.AreEqual(1, classTemplatePartialSpecializationParameters.Count);
Assert.AreEqual((classTemplatePartialSpecializationParameters[0] as TypeTemplateParameter).Name, "K");
var classTemplatePartialSpecializationArguments = classTemplatePartialSpecialization.Arguments;
Assert.AreEqual(2, classTemplatePartialSpecializationArguments.Count);
Assert.AreEqual((classTemplatePartialSpecializationArguments[0].Type.Type as BuiltinType).Type, PrimitiveType.Int);
Assert.AreEqual((classTemplatePartialSpecializationArguments[1].Type.Type as TemplateParameterType).Parameter, classTemplatePartialSpecializationParameters[0]);
}
[Test]
public void TestDeprecatedAttrs()
{

6
src/Parser/ASTConverter.cs

@ -1918,6 +1918,12 @@ namespace CppSharp @@ -1918,6 +1918,12 @@ namespace CppSharp
{
var _decl = new AST.ClassTemplatePartialSpecialization();
VisitClassTemplateSpecialization(decl, _decl);
for (uint i = 0; i < decl.ParametersCount; ++i)
{
var param = decl.GetParameters(i);
var _param = Visit(param);
_decl.Parameters.Add(_param);
}
return _decl;
}

11
tests/dotnet/Native/AST.h

@ -190,4 +190,13 @@ class HasMethods @@ -190,4 +190,13 @@ class HasMethods
{
public:
void isVolatileMethod() volatile {}
};
};
template <typename K, typename V>
class TestClassTemplatePartialSpecialization
{
};
template <typename K>
class TestClassTemplatePartialSpecialization<int, K>
{
};

Loading…
Cancel
Save