Browse Source

Completed the support for dependent type names.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/825/head 0.8.10
Dimitar Dobrev 8 years ago
parent
commit
9dbcc3cc2c
  1. 2
      src/AST/Type.cs
  2. 4
      src/CppParser/AST.cpp
  3. 2
      src/CppParser/AST.h
  4. 20
      src/CppParser/Bindings/CLI/AST.cpp
  5. 6
      src/CppParser/Bindings/CLI/AST.h
  6. 50
      src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs
  7. 44
      src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs
  8. 50
      src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs
  9. 50
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs
  10. 50
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs
  11. 44
      src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs
  12. 1
      src/CppParser/Parser.cpp
  13. 17
      src/Generator.Tests/AST/TestAST.cs
  14. 3
      src/Generator.Tests/ASTTestFixture.cs
  15. 4
      src/Generator/Generators/CSharp/CSharpTypePrinter.cs
  16. 1
      src/Parser/ASTConverter.cs
  17. 1
      tests/Native/AST.h

2
src/AST/Type.cs

@ -943,6 +943,8 @@ namespace CppSharp.AST
public QualifiedType Qualifier { get; set; } public QualifiedType Qualifier { get; set; }
public string Identifier { get; set; }
public override T Visit<T>(ITypeVisitor<T> visitor, public override T Visit<T>(ITypeVisitor<T> visitor,
TypeQualifiers quals = new TypeQualifiers()) TypeQualifiers quals = new TypeQualifiers())
{ {

4
src/CppParser/AST.cpp

@ -185,6 +185,10 @@ InjectedClassNameType::InjectedClassNameType()
DependentNameType::DependentNameType() : Type(TypeKind::DependentName) {} DependentNameType::DependentNameType() : Type(TypeKind::DependentName) {}
DependentNameType::~DependentNameType() {}
DEF_STRING(DependentNameType, Identifier)
PackExpansionType::PackExpansionType() : Type(TypeKind::PackExpansion) {} PackExpansionType::PackExpansionType() : Type(TypeKind::PackExpansion) {}
UnaryTransformType::UnaryTransformType() : Type(TypeKind::UnaryTransform) {} UnaryTransformType::UnaryTransformType() : Type(TypeKind::UnaryTransform) {}

2
src/CppParser/AST.h

@ -258,7 +258,9 @@ class CS_API DependentNameType : public Type
{ {
public: public:
DECLARE_TYPE_KIND(DependentName) DECLARE_TYPE_KIND(DependentName)
~DependentNameType();
QualifiedType qualifier; QualifiedType qualifier;
STRING(Identifier)
}; };
class CS_API PackExpansionType : public Type class CS_API PackExpansionType : public Type

20
src/CppParser/Bindings/CLI/AST.cpp

@ -1089,6 +1089,12 @@ CppSharp::Parser::AST::DependentNameType^ CppSharp::Parser::AST::DependentNameTy
CppSharp::Parser::AST::DependentNameType::~DependentNameType() CppSharp::Parser::AST::DependentNameType::~DependentNameType()
{ {
if (NativePtr)
{
auto __nativePtr = NativePtr;
NativePtr = 0;
delete (::CppSharp::CppParser::AST::DependentNameType*) __nativePtr;
}
} }
CppSharp::Parser::AST::DependentNameType::DependentNameType() CppSharp::Parser::AST::DependentNameType::DependentNameType()
@ -1118,6 +1124,20 @@ void CppSharp::Parser::AST::DependentNameType::Qualifier::set(CppSharp::Parser::
((::CppSharp::CppParser::AST::DependentNameType*)NativePtr)->qualifier = *(::CppSharp::CppParser::AST::QualifiedType*)value->NativePtr; ((::CppSharp::CppParser::AST::DependentNameType*)NativePtr)->qualifier = *(::CppSharp::CppParser::AST::QualifiedType*)value->NativePtr;
} }
System::String^ CppSharp::Parser::AST::DependentNameType::Identifier::get()
{
auto __ret = ((::CppSharp::CppParser::AST::DependentNameType*)NativePtr)->getIdentifier();
if (__ret == nullptr) return nullptr;
return (__ret == 0 ? nullptr : clix::marshalString<clix::E_UTF8>(__ret));
}
void CppSharp::Parser::AST::DependentNameType::Identifier::set(System::String^ s)
{
auto ___arg0 = clix::marshalString<clix::E_UTF8>(s);
auto __arg0 = ___arg0.c_str();
((::CppSharp::CppParser::AST::DependentNameType*)NativePtr)->setIdentifier(__arg0);
}
CppSharp::Parser::AST::PackExpansionType::PackExpansionType(::CppSharp::CppParser::AST::PackExpansionType* native) CppSharp::Parser::AST::PackExpansionType::PackExpansionType(::CppSharp::CppParser::AST::PackExpansionType* native)
: CppSharp::Parser::AST::Type((::CppSharp::CppParser::AST::Type*)native) : CppSharp::Parser::AST::Type((::CppSharp::CppParser::AST::Type*)native)
{ {

6
src/CppParser/Bindings/CLI/AST.h

@ -983,6 +983,12 @@ namespace CppSharp
CppSharp::Parser::AST::QualifiedType^ get(); CppSharp::Parser::AST::QualifiedType^ get();
void set(CppSharp::Parser::AST::QualifiedType^); void set(CppSharp::Parser::AST::QualifiedType^);
} }
property System::String^ Identifier
{
System::String^ get();
void set(System::String^);
}
}; };
public ref class PackExpansionType : CppSharp::Parser::AST::Type public ref class PackExpansionType : CppSharp::Parser::AST::Type

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

@ -2552,7 +2552,7 @@ namespace CppSharp
public unsafe partial class DependentNameType : global::CppSharp.Parser.AST.Type, IDisposable public unsafe partial class DependentNameType : global::CppSharp.Parser.AST.Type, IDisposable
{ {
[StructLayout(LayoutKind.Explicit, Size = 16)] [StructLayout(LayoutKind.Explicit, Size = 28)]
public new partial struct __Internal public new partial struct __Internal
{ {
[FieldOffset(0)] [FieldOffset(0)]
@ -2564,6 +2564,9 @@ namespace CppSharp
[FieldOffset(8)] [FieldOffset(8)]
public global::CppSharp.Parser.AST.QualifiedType.__Internal qualifier; public global::CppSharp.Parser.AST.QualifiedType.__Internal qualifier;
[FieldOffset(16)]
public global::Std.__1.BasicString.__Internal Identifier;
[SuppressUnmanagedCodeSecurity] [SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameTypeC2Ev")] EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameTypeC2Ev")]
@ -2572,7 +2575,22 @@ namespace CppSharp
[SuppressUnmanagedCodeSecurity] [SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameTypeC2ERKS2_")] EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameTypeC2ERKS2_")]
internal static extern void cctor_2(global::System.IntPtr instance, global::System.IntPtr _0); internal static extern void cctor_1(global::System.IntPtr instance, global::System.IntPtr _0);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameTypeD2Ev")]
internal static extern void dtor_0(global::System.IntPtr instance);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameType13getIdentifierEv")]
internal static extern global::System.IntPtr Identifier_0(global::System.IntPtr instance);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameType13setIdentifierEPKc")]
internal static extern void SetIdentifier_0(global::System.IntPtr instance, [MarshalAs(UnmanagedType.LPStr)] string s);
} }
internal static new global::CppSharp.Parser.AST.DependentNameType __CreateInstance(global::System.IntPtr native, bool skipVTables = false) internal static new global::CppSharp.Parser.AST.DependentNameType __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
@ -2588,7 +2606,7 @@ namespace CppSharp
private static void* __CopyValue(global::CppSharp.Parser.AST.DependentNameType.__Internal native) private static void* __CopyValue(global::CppSharp.Parser.AST.DependentNameType.__Internal native)
{ {
var ret = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DependentNameType.__Internal)); var ret = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DependentNameType.__Internal));
global::CppSharp.Parser.AST.DependentNameType.__Internal.cctor_2(ret, new global::System.IntPtr(&native)); global::CppSharp.Parser.AST.DependentNameType.__Internal.cctor_1(ret, new global::System.IntPtr(&native));
return ret.ToPointer(); return ret.ToPointer();
} }
@ -2626,7 +2644,17 @@ namespace CppSharp
if (ReferenceEquals(_0, null)) if (ReferenceEquals(_0, null))
throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&)."); throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
var __arg0 = _0.__Instance; var __arg0 = _0.__Instance;
__Internal.cctor_2((__Instance + __PointerAdjustment), __arg0); __Internal.cctor_1((__Instance + __PointerAdjustment), __arg0);
}
public override void Dispose(bool disposing)
{
global::CppSharp.Parser.AST.Type __dummy;
NativeToManagedMap.TryRemove(__Instance, out __dummy);
if (disposing)
__Internal.dtor_0((__Instance + __PointerAdjustment));
if (__ownsNativeInstance)
Marshal.FreeHGlobal(__Instance);
} }
public global::CppSharp.Parser.AST.QualifiedType Qualifier public global::CppSharp.Parser.AST.QualifiedType Qualifier
@ -2641,6 +2669,20 @@ namespace CppSharp
((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->qualifier = ReferenceEquals(value, null) ? new global::CppSharp.Parser.AST.QualifiedType.__Internal() : *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance; ((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->qualifier = ReferenceEquals(value, null) ? new global::CppSharp.Parser.AST.QualifiedType.__Internal() : *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
} }
} }
public string Identifier
{
get
{
var __ret = __Internal.Identifier_0((__Instance + __PointerAdjustment));
return Marshal.PtrToStringAnsi(__ret);
}
set
{
__Internal.SetIdentifier_0((__Instance + __PointerAdjustment), value);
}
}
} }
public unsafe partial class PackExpansionType : global::CppSharp.Parser.AST.Type, IDisposable public unsafe partial class PackExpansionType : global::CppSharp.Parser.AST.Type, IDisposable

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

@ -2552,7 +2552,7 @@ namespace CppSharp
public unsafe partial class DependentNameType : global::CppSharp.Parser.AST.Type, IDisposable public unsafe partial class DependentNameType : global::CppSharp.Parser.AST.Type, IDisposable
{ {
[StructLayout(LayoutKind.Explicit, Size = 16)] [StructLayout(LayoutKind.Explicit, Size = 40)]
public new partial struct __Internal public new partial struct __Internal
{ {
[FieldOffset(0)] [FieldOffset(0)]
@ -2564,6 +2564,9 @@ namespace CppSharp
[FieldOffset(8)] [FieldOffset(8)]
public global::CppSharp.Parser.AST.QualifiedType.__Internal qualifier; public global::CppSharp.Parser.AST.QualifiedType.__Internal qualifier;
[FieldOffset(16)]
public global::Std.BasicString.__Internal Identifier;
[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="??0DependentNameType@AST@CppParser@CppSharp@@QAE@XZ")] EntryPoint="??0DependentNameType@AST@CppParser@CppSharp@@QAE@XZ")]
@ -2573,6 +2576,21 @@ namespace CppSharp
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall,
EntryPoint="??0DependentNameType@AST@CppParser@CppSharp@@QAE@ABV0123@@Z")] EntryPoint="??0DependentNameType@AST@CppParser@CppSharp@@QAE@ABV0123@@Z")]
internal static extern global::System.IntPtr cctor_1(global::System.IntPtr instance, global::System.IntPtr _0); internal static extern global::System.IntPtr cctor_1(global::System.IntPtr instance, global::System.IntPtr _0);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall,
EntryPoint="??1DependentNameType@AST@CppParser@CppSharp@@QAE@XZ")]
internal static extern void dtor_0(global::System.IntPtr instance, int delete);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall,
EntryPoint="?getIdentifier@DependentNameType@AST@CppParser@CppSharp@@QAEPBDXZ")]
internal static extern global::System.IntPtr Identifier_0(global::System.IntPtr instance);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall,
EntryPoint="?setIdentifier@DependentNameType@AST@CppParser@CppSharp@@QAEXPBD@Z")]
internal static extern void SetIdentifier_0(global::System.IntPtr instance, [MarshalAs(UnmanagedType.LPStr)] string s);
} }
internal static new global::CppSharp.Parser.AST.DependentNameType __CreateInstance(global::System.IntPtr native, bool skipVTables = false) internal static new global::CppSharp.Parser.AST.DependentNameType __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
@ -2629,6 +2647,16 @@ namespace CppSharp
__Internal.cctor_1((__Instance + __PointerAdjustment), __arg0); __Internal.cctor_1((__Instance + __PointerAdjustment), __arg0);
} }
public override void Dispose(bool disposing)
{
global::CppSharp.Parser.AST.Type __dummy;
NativeToManagedMap.TryRemove(__Instance, out __dummy);
if (disposing)
__Internal.dtor_0((__Instance + __PointerAdjustment), 0);
if (__ownsNativeInstance)
Marshal.FreeHGlobal(__Instance);
}
public global::CppSharp.Parser.AST.QualifiedType Qualifier public global::CppSharp.Parser.AST.QualifiedType Qualifier
{ {
get get
@ -2641,6 +2669,20 @@ namespace CppSharp
((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->qualifier = ReferenceEquals(value, null) ? new global::CppSharp.Parser.AST.QualifiedType.__Internal() : *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance; ((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->qualifier = ReferenceEquals(value, null) ? new global::CppSharp.Parser.AST.QualifiedType.__Internal() : *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
} }
} }
public string Identifier
{
get
{
var __ret = __Internal.Identifier_0((__Instance + __PointerAdjustment));
return Marshal.PtrToStringAnsi(__ret);
}
set
{
__Internal.SetIdentifier_0((__Instance + __PointerAdjustment), value);
}
}
} }
public unsafe partial class PackExpansionType : global::CppSharp.Parser.AST.Type, IDisposable public unsafe partial class PackExpansionType : global::CppSharp.Parser.AST.Type, IDisposable

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

@ -2552,7 +2552,7 @@ namespace CppSharp
public unsafe partial class DependentNameType : global::CppSharp.Parser.AST.Type, IDisposable public unsafe partial class DependentNameType : global::CppSharp.Parser.AST.Type, IDisposable
{ {
[StructLayout(LayoutKind.Explicit, Size = 24)] [StructLayout(LayoutKind.Explicit, Size = 48)]
public new partial struct __Internal public new partial struct __Internal
{ {
[FieldOffset(0)] [FieldOffset(0)]
@ -2564,6 +2564,9 @@ namespace CppSharp
[FieldOffset(8)] [FieldOffset(8)]
public global::CppSharp.Parser.AST.QualifiedType.__Internal qualifier; public global::CppSharp.Parser.AST.QualifiedType.__Internal qualifier;
[FieldOffset(24)]
public global::Std.__1.BasicString.__Internal Identifier;
[SuppressUnmanagedCodeSecurity] [SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameTypeC2Ev")] EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameTypeC2Ev")]
@ -2572,7 +2575,22 @@ namespace CppSharp
[SuppressUnmanagedCodeSecurity] [SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameTypeC2ERKS2_")] EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameTypeC2ERKS2_")]
internal static extern void cctor_2(global::System.IntPtr instance, global::System.IntPtr _0); internal static extern void cctor_1(global::System.IntPtr instance, global::System.IntPtr _0);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameTypeD2Ev")]
internal static extern void dtor_0(global::System.IntPtr instance);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameType13getIdentifierEv")]
internal static extern global::System.IntPtr Identifier_0(global::System.IntPtr instance);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameType13setIdentifierEPKc")]
internal static extern void SetIdentifier_0(global::System.IntPtr instance, [MarshalAs(UnmanagedType.LPStr)] string s);
} }
internal static new global::CppSharp.Parser.AST.DependentNameType __CreateInstance(global::System.IntPtr native, bool skipVTables = false) internal static new global::CppSharp.Parser.AST.DependentNameType __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
@ -2588,7 +2606,7 @@ namespace CppSharp
private static void* __CopyValue(global::CppSharp.Parser.AST.DependentNameType.__Internal native) private static void* __CopyValue(global::CppSharp.Parser.AST.DependentNameType.__Internal native)
{ {
var ret = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DependentNameType.__Internal)); var ret = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DependentNameType.__Internal));
global::CppSharp.Parser.AST.DependentNameType.__Internal.cctor_2(ret, new global::System.IntPtr(&native)); global::CppSharp.Parser.AST.DependentNameType.__Internal.cctor_1(ret, new global::System.IntPtr(&native));
return ret.ToPointer(); return ret.ToPointer();
} }
@ -2626,7 +2644,17 @@ namespace CppSharp
if (ReferenceEquals(_0, null)) if (ReferenceEquals(_0, null))
throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&)."); throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
var __arg0 = _0.__Instance; var __arg0 = _0.__Instance;
__Internal.cctor_2((__Instance + __PointerAdjustment), __arg0); __Internal.cctor_1((__Instance + __PointerAdjustment), __arg0);
}
public override void Dispose(bool disposing)
{
global::CppSharp.Parser.AST.Type __dummy;
NativeToManagedMap.TryRemove(__Instance, out __dummy);
if (disposing)
__Internal.dtor_0((__Instance + __PointerAdjustment));
if (__ownsNativeInstance)
Marshal.FreeHGlobal(__Instance);
} }
public global::CppSharp.Parser.AST.QualifiedType Qualifier public global::CppSharp.Parser.AST.QualifiedType Qualifier
@ -2641,6 +2669,20 @@ namespace CppSharp
((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->qualifier = ReferenceEquals(value, null) ? new global::CppSharp.Parser.AST.QualifiedType.__Internal() : *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance; ((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->qualifier = ReferenceEquals(value, null) ? new global::CppSharp.Parser.AST.QualifiedType.__Internal() : *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
} }
} }
public string Identifier
{
get
{
var __ret = __Internal.Identifier_0((__Instance + __PointerAdjustment));
return Marshal.PtrToStringAnsi(__ret);
}
set
{
__Internal.SetIdentifier_0((__Instance + __PointerAdjustment), value);
}
}
} }
public unsafe partial class PackExpansionType : global::CppSharp.Parser.AST.Type, IDisposable public unsafe partial class PackExpansionType : global::CppSharp.Parser.AST.Type, IDisposable

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

@ -2552,7 +2552,7 @@ namespace CppSharp
public unsafe partial class DependentNameType : global::CppSharp.Parser.AST.Type, IDisposable public unsafe partial class DependentNameType : global::CppSharp.Parser.AST.Type, IDisposable
{ {
[StructLayout(LayoutKind.Explicit, Size = 24)] [StructLayout(LayoutKind.Explicit, Size = 56)]
public new partial struct __Internal public new partial struct __Internal
{ {
[FieldOffset(0)] [FieldOffset(0)]
@ -2564,6 +2564,9 @@ namespace CppSharp
[FieldOffset(8)] [FieldOffset(8)]
public global::CppSharp.Parser.AST.QualifiedType.__Internal qualifier; public global::CppSharp.Parser.AST.QualifiedType.__Internal qualifier;
[FieldOffset(24)]
public global::Std.Cxx11.BasicString.__Internal Identifier;
[SuppressUnmanagedCodeSecurity] [SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameTypeC2Ev")] EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameTypeC2Ev")]
@ -2572,7 +2575,22 @@ namespace CppSharp
[SuppressUnmanagedCodeSecurity] [SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameTypeC2ERKS2_")] EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameTypeC2ERKS2_")]
internal static extern void cctor_2(global::System.IntPtr instance, global::System.IntPtr _0); internal static extern void cctor_1(global::System.IntPtr instance, global::System.IntPtr _0);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameTypeD2Ev")]
internal static extern void dtor_0(global::System.IntPtr instance);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameType13getIdentifierEv")]
internal static extern global::System.IntPtr Identifier_0(global::System.IntPtr instance);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameType13setIdentifierEPKc")]
internal static extern void SetIdentifier_0(global::System.IntPtr instance, [MarshalAs(UnmanagedType.LPStr)] string s);
} }
internal static new global::CppSharp.Parser.AST.DependentNameType __CreateInstance(global::System.IntPtr native, bool skipVTables = false) internal static new global::CppSharp.Parser.AST.DependentNameType __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
@ -2588,7 +2606,7 @@ namespace CppSharp
private static void* __CopyValue(global::CppSharp.Parser.AST.DependentNameType.__Internal native) private static void* __CopyValue(global::CppSharp.Parser.AST.DependentNameType.__Internal native)
{ {
var ret = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DependentNameType.__Internal)); var ret = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DependentNameType.__Internal));
global::CppSharp.Parser.AST.DependentNameType.__Internal.cctor_2(ret, new global::System.IntPtr(&native)); global::CppSharp.Parser.AST.DependentNameType.__Internal.cctor_1(ret, new global::System.IntPtr(&native));
return ret.ToPointer(); return ret.ToPointer();
} }
@ -2626,7 +2644,17 @@ namespace CppSharp
if (ReferenceEquals(_0, null)) if (ReferenceEquals(_0, null))
throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&)."); throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
var __arg0 = _0.__Instance; var __arg0 = _0.__Instance;
__Internal.cctor_2((__Instance + __PointerAdjustment), __arg0); __Internal.cctor_1((__Instance + __PointerAdjustment), __arg0);
}
public override void Dispose(bool disposing)
{
global::CppSharp.Parser.AST.Type __dummy;
NativeToManagedMap.TryRemove(__Instance, out __dummy);
if (disposing)
__Internal.dtor_0((__Instance + __PointerAdjustment));
if (__ownsNativeInstance)
Marshal.FreeHGlobal(__Instance);
} }
public global::CppSharp.Parser.AST.QualifiedType Qualifier public global::CppSharp.Parser.AST.QualifiedType Qualifier
@ -2641,6 +2669,20 @@ namespace CppSharp
((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->qualifier = ReferenceEquals(value, null) ? new global::CppSharp.Parser.AST.QualifiedType.__Internal() : *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance; ((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->qualifier = ReferenceEquals(value, null) ? new global::CppSharp.Parser.AST.QualifiedType.__Internal() : *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
} }
} }
public string Identifier
{
get
{
var __ret = __Internal.Identifier_0((__Instance + __PointerAdjustment));
return Marshal.PtrToStringAnsi(__ret);
}
set
{
__Internal.SetIdentifier_0((__Instance + __PointerAdjustment), value);
}
}
} }
public unsafe partial class PackExpansionType : global::CppSharp.Parser.AST.Type, IDisposable public unsafe partial class PackExpansionType : global::CppSharp.Parser.AST.Type, IDisposable

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

@ -2552,7 +2552,7 @@ namespace CppSharp
public unsafe partial class DependentNameType : global::CppSharp.Parser.AST.Type, IDisposable public unsafe partial class DependentNameType : global::CppSharp.Parser.AST.Type, IDisposable
{ {
[StructLayout(LayoutKind.Explicit, Size = 24)] [StructLayout(LayoutKind.Explicit, Size = 32)]
public new partial struct __Internal public new partial struct __Internal
{ {
[FieldOffset(0)] [FieldOffset(0)]
@ -2564,6 +2564,9 @@ namespace CppSharp
[FieldOffset(8)] [FieldOffset(8)]
public global::CppSharp.Parser.AST.QualifiedType.__Internal qualifier; public global::CppSharp.Parser.AST.QualifiedType.__Internal qualifier;
[FieldOffset(24)]
public global::Std.BasicString.__Internal Identifier;
[SuppressUnmanagedCodeSecurity] [SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameTypeC2Ev")] EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameTypeC2Ev")]
@ -2572,7 +2575,22 @@ namespace CppSharp
[SuppressUnmanagedCodeSecurity] [SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameTypeC2ERKS2_")] EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameTypeC2ERKS2_")]
internal static extern void cctor_2(global::System.IntPtr instance, global::System.IntPtr _0); internal static extern void cctor_1(global::System.IntPtr instance, global::System.IntPtr _0);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameTypeD2Ev")]
internal static extern void dtor_0(global::System.IntPtr instance);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameType13getIdentifierEv")]
internal static extern global::System.IntPtr Identifier_0(global::System.IntPtr instance);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser3AST17DependentNameType13setIdentifierEPKc")]
internal static extern void SetIdentifier_0(global::System.IntPtr instance, [MarshalAs(UnmanagedType.LPStr)] string s);
} }
internal static new global::CppSharp.Parser.AST.DependentNameType __CreateInstance(global::System.IntPtr native, bool skipVTables = false) internal static new global::CppSharp.Parser.AST.DependentNameType __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
@ -2588,7 +2606,7 @@ namespace CppSharp
private static void* __CopyValue(global::CppSharp.Parser.AST.DependentNameType.__Internal native) private static void* __CopyValue(global::CppSharp.Parser.AST.DependentNameType.__Internal native)
{ {
var ret = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DependentNameType.__Internal)); var ret = Marshal.AllocHGlobal(sizeof(global::CppSharp.Parser.AST.DependentNameType.__Internal));
global::CppSharp.Parser.AST.DependentNameType.__Internal.cctor_2(ret, new global::System.IntPtr(&native)); global::CppSharp.Parser.AST.DependentNameType.__Internal.cctor_1(ret, new global::System.IntPtr(&native));
return ret.ToPointer(); return ret.ToPointer();
} }
@ -2626,7 +2644,17 @@ namespace CppSharp
if (ReferenceEquals(_0, null)) if (ReferenceEquals(_0, null))
throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&)."); throw new global::System.ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
var __arg0 = _0.__Instance; var __arg0 = _0.__Instance;
__Internal.cctor_2((__Instance + __PointerAdjustment), __arg0); __Internal.cctor_1((__Instance + __PointerAdjustment), __arg0);
}
public override void Dispose(bool disposing)
{
global::CppSharp.Parser.AST.Type __dummy;
NativeToManagedMap.TryRemove(__Instance, out __dummy);
if (disposing)
__Internal.dtor_0((__Instance + __PointerAdjustment));
if (__ownsNativeInstance)
Marshal.FreeHGlobal(__Instance);
} }
public global::CppSharp.Parser.AST.QualifiedType Qualifier public global::CppSharp.Parser.AST.QualifiedType Qualifier
@ -2641,6 +2669,20 @@ namespace CppSharp
((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->qualifier = ReferenceEquals(value, null) ? new global::CppSharp.Parser.AST.QualifiedType.__Internal() : *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance; ((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->qualifier = ReferenceEquals(value, null) ? new global::CppSharp.Parser.AST.QualifiedType.__Internal() : *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
} }
} }
public string Identifier
{
get
{
var __ret = __Internal.Identifier_0((__Instance + __PointerAdjustment));
return Marshal.PtrToStringAnsi(__ret);
}
set
{
__Internal.SetIdentifier_0((__Instance + __PointerAdjustment), value);
}
}
} }
public unsafe partial class PackExpansionType : global::CppSharp.Parser.AST.Type, IDisposable public unsafe partial class PackExpansionType : global::CppSharp.Parser.AST.Type, IDisposable

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

@ -2552,7 +2552,7 @@ namespace CppSharp
public unsafe partial class DependentNameType : global::CppSharp.Parser.AST.Type, IDisposable public unsafe partial class DependentNameType : global::CppSharp.Parser.AST.Type, IDisposable
{ {
[StructLayout(LayoutKind.Explicit, Size = 24)] [StructLayout(LayoutKind.Explicit, Size = 56)]
public new partial struct __Internal public new partial struct __Internal
{ {
[FieldOffset(0)] [FieldOffset(0)]
@ -2564,6 +2564,9 @@ namespace CppSharp
[FieldOffset(8)] [FieldOffset(8)]
public global::CppSharp.Parser.AST.QualifiedType.__Internal qualifier; public global::CppSharp.Parser.AST.QualifiedType.__Internal qualifier;
[FieldOffset(24)]
public global::Std.BasicString.__Internal Identifier;
[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="??0DependentNameType@AST@CppParser@CppSharp@@QEAA@XZ")] EntryPoint="??0DependentNameType@AST@CppParser@CppSharp@@QEAA@XZ")]
@ -2573,6 +2576,21 @@ 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="??0DependentNameType@AST@CppParser@CppSharp@@QEAA@AEBV0123@@Z")] EntryPoint="??0DependentNameType@AST@CppParser@CppSharp@@QEAA@AEBV0123@@Z")]
internal static extern global::System.IntPtr cctor_1(global::System.IntPtr instance, global::System.IntPtr _0); internal static extern global::System.IntPtr cctor_1(global::System.IntPtr instance, global::System.IntPtr _0);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="??1DependentNameType@AST@CppParser@CppSharp@@QEAA@XZ")]
internal static extern void dtor_0(global::System.IntPtr instance, int delete);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="?getIdentifier@DependentNameType@AST@CppParser@CppSharp@@QEAAPEBDXZ")]
internal static extern global::System.IntPtr Identifier_0(global::System.IntPtr instance);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="?setIdentifier@DependentNameType@AST@CppParser@CppSharp@@QEAAXPEBD@Z")]
internal static extern void SetIdentifier_0(global::System.IntPtr instance, [MarshalAs(UnmanagedType.LPStr)] string s);
} }
internal static new global::CppSharp.Parser.AST.DependentNameType __CreateInstance(global::System.IntPtr native, bool skipVTables = false) internal static new global::CppSharp.Parser.AST.DependentNameType __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
@ -2629,6 +2647,16 @@ namespace CppSharp
__Internal.cctor_1((__Instance + __PointerAdjustment), __arg0); __Internal.cctor_1((__Instance + __PointerAdjustment), __arg0);
} }
public override void Dispose(bool disposing)
{
global::CppSharp.Parser.AST.Type __dummy;
NativeToManagedMap.TryRemove(__Instance, out __dummy);
if (disposing)
__Internal.dtor_0((__Instance + __PointerAdjustment), 0);
if (__ownsNativeInstance)
Marshal.FreeHGlobal(__Instance);
}
public global::CppSharp.Parser.AST.QualifiedType Qualifier public global::CppSharp.Parser.AST.QualifiedType Qualifier
{ {
get get
@ -2641,6 +2669,20 @@ namespace CppSharp
((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->qualifier = ReferenceEquals(value, null) ? new global::CppSharp.Parser.AST.QualifiedType.__Internal() : *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance; ((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->qualifier = ReferenceEquals(value, null) ? new global::CppSharp.Parser.AST.QualifiedType.__Internal() : *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance;
} }
} }
public string Identifier
{
get
{
var __ret = __Internal.Identifier_0((__Instance + __PointerAdjustment));
return Marshal.PtrToStringAnsi(__ret);
}
set
{
__Internal.SetIdentifier_0((__Instance + __PointerAdjustment), value);
}
}
} }
public unsafe partial class PackExpansionType : global::CppSharp.Parser.AST.Type, IDisposable public unsafe partial class PackExpansionType : global::CppSharp.Parser.AST.Type, IDisposable

1
src/CppParser/Parser.cpp

@ -2593,6 +2593,7 @@ Type* Parser::WalkType(clang::QualType QualType, clang::TypeLoc* TL,
DNT->qualifier = GetQualifiedType(clang::QualType(DN->getQualifier()->getAsType(), 0)); DNT->qualifier = GetQualifiedType(clang::QualType(DN->getQualifier()->getAsType(), 0));
break; break;
} }
DNT->Identifier = DN->getIdentifier()->getName();
Ty = DNT; Ty = DNT;
break; break;

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

@ -279,10 +279,10 @@ namespace CppSharp.Generator.Tests.AST
var paramType = ctor.Parameters[0].Type as TemplateParameterType; var paramType = ctor.Parameters[0].Type as TemplateParameterType;
Assert.IsNotNull(paramType); Assert.IsNotNull(paramType);
Assert.AreEqual(templateTypeParameter, paramType.Parameter); Assert.AreEqual(templateTypeParameter, paramType.Parameter);
Assert.AreEqual(3, template.Specializations.Count); Assert.AreEqual(5, template.Specializations.Count);
Assert.AreEqual(TemplateSpecializationKind.ExplicitInstantiationDefinition, template.Specializations[0].SpecializationKind); Assert.AreEqual(TemplateSpecializationKind.ExplicitInstantiationDefinition, template.Specializations[0].SpecializationKind);
Assert.AreEqual(TemplateSpecializationKind.ExplicitInstantiationDefinition, template.Specializations[1].SpecializationKind); Assert.AreEqual(TemplateSpecializationKind.ExplicitInstantiationDefinition, template.Specializations[3].SpecializationKind);
Assert.AreEqual(TemplateSpecializationKind.Undeclared, template.Specializations[2].SpecializationKind); Assert.AreEqual(TemplateSpecializationKind.Undeclared, template.Specializations[4].SpecializationKind);
var typeDef = AstContext.FindTypedef("TestTemplateClassInt").FirstOrDefault(); var typeDef = AstContext.FindTypedef("TestTemplateClassInt").FirstOrDefault();
Assert.IsNotNull(typeDef, "Couldn't find TestTemplateClassInt typedef."); Assert.IsNotNull(typeDef, "Couldn't find TestTemplateClassInt typedef.");
var integerInst = typeDef.Type as TemplateSpecializationType; var integerInst = typeDef.Type as TemplateSpecializationType;
@ -335,7 +335,6 @@ namespace CppSharp.Generator.Tests.AST
[Test] [Test]
public void TestAmbiguity() public void TestAmbiguity()
{ {
new CleanUnitPass { Context = Driver.Context }.VisitASTContext(AstContext);
new CheckAmbiguousFunctions { Context = Driver.Context }.VisitASTContext(AstContext); new CheckAmbiguousFunctions { Context = Driver.Context }.VisitASTContext(AstContext);
Assert.IsTrue(AstContext.FindClass("HasAmbiguousFunctions").Single().FindMethod("ambiguous").IsAmbiguous); Assert.IsTrue(AstContext.FindClass("HasAmbiguousFunctions").Single().FindMethod("ambiguous").IsAmbiguous);
} }
@ -501,7 +500,7 @@ namespace CppSharp.Generator.Tests.AST
{ {
var template = AstContext.FindDecl<ClassTemplate>("TestTemplateClass").First(); var template = AstContext.FindDecl<ClassTemplate>("TestTemplateClass").First();
var cppTypePrinter = new CppTypePrinter { PrintScopeKind = TypePrintScopeKind.Qualified }; var cppTypePrinter = new CppTypePrinter { PrintScopeKind = TypePrintScopeKind.Qualified };
Assert.That(template.Specializations[1].Classes[0].Visit(cppTypePrinter), Assert.That(template.Specializations[3].Classes[0].Visit(cppTypePrinter),
Is.EqualTo("TestTemplateClass<Math::Complex>::NestedInTemplate")); Is.EqualTo("TestTemplateClass<Math::Complex>::NestedInTemplate"));
} }
@ -513,5 +512,13 @@ namespace CppSharp.Generator.Tests.AST
Assert.That(functionWithSpecializationArg.Parameters[0].Visit(cppTypePrinter), Assert.That(functionWithSpecializationArg.Parameters[0].Visit(cppTypePrinter),
Is.EqualTo("const TestTemplateClass<int>")); Is.EqualTo("const TestTemplateClass<int>"));
} }
[Test]
public void TestDependentNameType()
{
var template = AstContext.FindDecl<ClassTemplate>("TestSpecializationArguments").First();
Assert.That(template.TemplatedClass.Fields[0].Type.ToString(),
Is.EqualTo("global::Test.TestTemplateClass<T>.NestedInTemplate"));
}
} }
} }

3
src/Generator.Tests/ASTTestFixture.cs

@ -2,6 +2,7 @@ using System;
using CppSharp.AST; using CppSharp.AST;
using CppSharp.Utils; using CppSharp.Utils;
using CppSharp.Parser; using CppSharp.Parser;
using CppSharp.Passes;
namespace CppSharp.Generator.Tests namespace CppSharp.Generator.Tests
{ {
@ -34,6 +35,8 @@ namespace CppSharp.Generator.Tests
throw new Exception("Error parsing the code"); throw new Exception("Error parsing the code");
AstContext = Driver.Context.ASTContext; AstContext = Driver.Context.ASTContext;
new CleanUnitPass { Context = Driver.Context }.VisitASTContext(AstContext);
new ResolveIncompleteDeclsPass { Context = Driver.Context }.VisitASTContext(AstContext);
} }
} }
} }

4
src/Generator/Generators/CSharp/CSharpTypePrinter.cs

@ -442,7 +442,9 @@ namespace CppSharp.Generators.CSharp
public override TypePrinterResult VisitDependentNameType(DependentNameType dependent, public override TypePrinterResult VisitDependentNameType(DependentNameType dependent,
TypeQualifiers quals) TypeQualifiers quals)
{ {
return dependent.Qualifier.Type != null ? dependent.Qualifier.Visit(this) : string.Empty; if (dependent.Qualifier.Type == null)
return dependent.Identifier;
return $"{dependent.Qualifier.Visit(this)}.{dependent.Identifier}";
} }
public override TypePrinterResult VisitPackExpansionType(PackExpansionType type, public override TypePrinterResult VisitPackExpansionType(PackExpansionType type,

1
src/Parser/ASTConverter.cs

@ -703,6 +703,7 @@ namespace CppSharp
var _type = new AST.DependentNameType(); var _type = new AST.DependentNameType();
VisitType(type, _type); VisitType(type, _type);
_type.Qualifier = VisitQualified(type.Qualifier); _type.Qualifier = VisitQualified(type.Qualifier);
_type.Identifier = type.Identifier;
return _type; return _type;
} }

1
tests/Native/AST.h

@ -121,6 +121,7 @@ class TestSpecializationArguments
{ {
public: public:
TestSpecializationArguments() {} TestSpecializationArguments() {}
typename TestTemplateClass<T>::NestedInTemplate n;
}; };
void instantiatesTemplate(TestSpecializationArguments<int> i, TestSpecializationArguments<float> f) void instantiatesTemplate(TestSpecializationArguments<int> i, TestSpecializationArguments<float> f)

Loading…
Cancel
Save