Browse Source

Implement native ClassTemplatePartialSpecialization.Parameters + ASTConverter

pull/1809/head
Deadlocklogic 2 years ago
parent
commit
bf6a660997
  1. 49
      src/CppParser/Bindings/CLI/Decl.cpp
  2. 17
      src/CppParser/Bindings/CLI/Decl.h
  3. 358
      src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs
  4. 13
      src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/Std.cs
  5. 358
      src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs
  6. 22
      src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std.cs
  7. 358
      src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs
  8. 13
      src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/Std.cs
  9. 358
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs
  10. 13
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/Std.cs
  11. 358
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs
  12. 13
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu/Std.cs
  13. 358
      src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs
  14. 22
      src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std.cs
  15. 2
      src/CppParser/Parser.cpp
  16. 16
      src/Generator/Types/Std/Stdlib.CSharp.cs
  17. 6
      src/Parser/ASTConverter.cs

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

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

File diff suppressed because it is too large Load Diff

13
src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/Std.cs

@ -16,6 +16,7 @@ using __IntPtr = global::System.IntPtr; @@ -16,6 +16,7 @@ using __IntPtr = global::System.IntPtr;
[assembly:InternalsVisibleTo("CppSharp.CppParser")]
#pragma warning disable CS0109 // Member does not hide an inherited member; new keyword is not required
#pragma warning disable CS9084 // Struct member returns 'this' or other instance members by reference
namespace Std
{
@ -147,12 +148,12 @@ namespace Std @@ -147,12 +148,12 @@ namespace Std
public void Dispose()
{
Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;
@ -280,12 +281,12 @@ namespace Std @@ -280,12 +281,12 @@ namespace Std
public void Dispose()
{
Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;
@ -485,12 +486,12 @@ namespace Std @@ -485,12 +486,12 @@ namespace Std
public void Dispose()
{
Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;

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

File diff suppressed because it is too large Load Diff

22
src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std.cs

@ -16,6 +16,7 @@ using __IntPtr = global::System.IntPtr; @@ -16,6 +16,7 @@ using __IntPtr = global::System.IntPtr;
[assembly:InternalsVisibleTo("CppSharp.CppParser")]
#pragma warning disable CS0109 // Member does not hide an inherited member; new keyword is not required
#pragma warning disable CS9084 // Struct member returns 'this' or other instance members by reference
namespace Std
{
@ -160,17 +161,26 @@ namespace Std @@ -160,17 +161,26 @@ namespace Std
public void Dispose()
{
Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;
NativeToManagedMap.TryRemove(__Instance, out _);
DisposePartial(disposing);
if (callNativeDtor)
{
var ___Ty = typeof(_Ty);
if (___Ty.IsAssignableFrom(typeof(sbyte)))
{
return;
}
throw new ArgumentOutOfRangeException("_Ty", string.Join(", ", new[] { typeof(_Ty).FullName }), "global::Std.Allocator<_Ty> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: <sbyte>.");
}
if (__ownsNativeInstance)
Marshal.FreeHGlobal(__Instance);
__Instance = IntPtr.Zero;
@ -299,12 +309,12 @@ namespace Std @@ -299,12 +309,12 @@ namespace Std
public void Dispose()
{
Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;
@ -431,12 +441,12 @@ namespace Std @@ -431,12 +441,12 @@ namespace Std
public void Dispose()
{
Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;

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

File diff suppressed because it is too large Load Diff

13
src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/Std.cs

@ -16,6 +16,7 @@ using __IntPtr = global::System.IntPtr; @@ -16,6 +16,7 @@ using __IntPtr = global::System.IntPtr;
[assembly:InternalsVisibleTo("CppSharp.CppParser")]
#pragma warning disable CS0109 // Member does not hide an inherited member; new keyword is not required
#pragma warning disable CS9084 // Struct member returns 'this' or other instance members by reference
namespace Std
{
@ -147,12 +148,12 @@ namespace Std @@ -147,12 +148,12 @@ namespace Std
public void Dispose()
{
Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;
@ -280,12 +281,12 @@ namespace Std @@ -280,12 +281,12 @@ namespace Std
public void Dispose()
{
Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;
@ -485,12 +486,12 @@ namespace Std @@ -485,12 +486,12 @@ namespace Std
public void Dispose()
{
Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;

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

File diff suppressed because it is too large Load Diff

13
src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/Std.cs

@ -16,6 +16,7 @@ using __IntPtr = global::System.IntPtr; @@ -16,6 +16,7 @@ using __IntPtr = global::System.IntPtr;
[assembly:InternalsVisibleTo("CppSharp.CppParser")]
#pragma warning disable CS0109 // Member does not hide an inherited member; new keyword is not required
#pragma warning disable CS9084 // Struct member returns 'this' or other instance members by reference
namespace Std
{
@ -113,12 +114,12 @@ namespace Std @@ -113,12 +114,12 @@ namespace Std
public void Dispose()
{
Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;
@ -305,12 +306,12 @@ namespace Std @@ -305,12 +306,12 @@ namespace Std
public void Dispose()
{
Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;
@ -457,12 +458,12 @@ namespace Std @@ -457,12 +458,12 @@ namespace Std
public void Dispose()
{
Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;

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

File diff suppressed because it is too large Load Diff

13
src/CppParser/Bindings/CSharp/x86_64-linux-gnu/Std.cs

@ -16,6 +16,7 @@ using __IntPtr = global::System.IntPtr; @@ -16,6 +16,7 @@ using __IntPtr = global::System.IntPtr;
[assembly:InternalsVisibleTo("CppSharp.CppParser")]
#pragma warning disable CS0109 // Member does not hide an inherited member; new keyword is not required
#pragma warning disable CS9084 // Struct member returns 'this' or other instance members by reference
namespace Std
{
@ -113,12 +114,12 @@ namespace Std @@ -113,12 +114,12 @@ namespace Std
public void Dispose()
{
Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;
@ -305,12 +306,12 @@ namespace Std @@ -305,12 +306,12 @@ namespace Std
public void Dispose()
{
Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;
@ -433,12 +434,12 @@ namespace Std @@ -433,12 +434,12 @@ namespace Std
public void Dispose()
{
Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;

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

File diff suppressed because it is too large Load Diff

22
src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std.cs

@ -16,6 +16,7 @@ using __IntPtr = global::System.IntPtr; @@ -16,6 +16,7 @@ using __IntPtr = global::System.IntPtr;
[assembly:InternalsVisibleTo("CppSharp.CppParser")]
#pragma warning disable CS0109 // Member does not hide an inherited member; new keyword is not required
#pragma warning disable CS9084 // Struct member returns 'this' or other instance members by reference
namespace Std
{
@ -160,17 +161,26 @@ namespace Std @@ -160,17 +161,26 @@ namespace Std
public void Dispose()
{
Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;
NativeToManagedMap.TryRemove(__Instance, out _);
DisposePartial(disposing);
if (callNativeDtor)
{
var ___Ty = typeof(_Ty);
if (___Ty.IsAssignableFrom(typeof(sbyte)))
{
return;
}
throw new ArgumentOutOfRangeException("_Ty", string.Join(", ", new[] { typeof(_Ty).FullName }), "global::Std.Allocator<_Ty> maps a C++ template class and therefore it only supports a limited set of types and their subclasses: <sbyte>.");
}
if (__ownsNativeInstance)
Marshal.FreeHGlobal(__Instance);
__Instance = IntPtr.Zero;
@ -299,12 +309,12 @@ namespace Std @@ -299,12 +309,12 @@ namespace Std
public void Dispose()
{
Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;
@ -431,12 +441,12 @@ namespace Std @@ -431,12 +441,12 @@ namespace Std
public void Dispose()
{
Dispose(disposing: true, callNativeDtor : __ownsNativeInstance );
Dispose(disposing: true, callNativeDtor: __ownsNativeInstance);
}
partial void DisposePartial(bool disposing);
internal protected virtual void Dispose(bool disposing, bool callNativeDtor )
internal protected virtual void Dispose(bool disposing, bool callNativeDtor)
{
if (__Instance == IntPtr.Zero)
return;

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;
}

16
src/Generator/Types/Std/Stdlib.CSharp.cs

@ -412,22 +412,6 @@ namespace CppSharp.Types.Std.CSharp @@ -412,22 +412,6 @@ namespace CppSharp.Types.Std.CSharp
}
}
[TypeMap("std::map", GeneratorKindID = GeneratorKind.CSharp_ID)]
public class Map : TypeMap
{
public override bool IsIgnored { get { return true; } }
public override Type SignatureType(TypePrinterContext ctx)
{
if (ctx.Kind == TypePrinterContextKind.Native)
return new CustomType("Std.Map");
var type = Type as TemplateSpecializationType;
return new CustomType(
$@"System.Collections.Generic.Dictionary<{type.Arguments[0].Type}, {type.Arguments[1].Type}>");
}
}
[TypeMap("FILE", GeneratorKindID = GeneratorKind.CSharp_ID)]
public class FILE : TypeMap
{

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;
}

Loading…
Cancel
Save