diff --git a/src/AST/CppTypePrinter.cs b/src/AST/CppTypePrinter.cs index 1c59b111..57e84eb7 100644 --- a/src/AST/CppTypePrinter.cs +++ b/src/AST/CppTypePrinter.cs @@ -197,7 +197,7 @@ namespace CppSharp.AST public virtual string VisitTemplateParameterType(TemplateParameterType param, TypeQualifiers quals) { - if (param.Parameter.Name == null) + if (param.Parameter == null || param.Parameter.Name == null) return string.Empty; return param.Parameter.Name; @@ -216,7 +216,7 @@ namespace CppSharp.AST public virtual string VisitDependentNameType(DependentNameType dependent, TypeQualifiers quals) { - return dependent.Desugared.Type != null ? dependent.Desugared.Visit(this) : string.Empty; + return dependent.Qualifier.Type != null ? dependent.Qualifier.Visit(this) : string.Empty; } public virtual string VisitPackExpansionType(PackExpansionType packExpansionType, TypeQualifiers quals) diff --git a/src/AST/Type.cs b/src/AST/Type.cs index f2106450..1896c46b 100644 --- a/src/AST/Type.cs +++ b/src/AST/Type.cs @@ -941,7 +941,7 @@ namespace CppSharp.AST { } - public QualifiedType Desugared { get; set; } + public QualifiedType Qualifier { get; set; } public override T Visit(ITypeVisitor visitor, TypeQualifiers quals = new TypeQualifiers()) diff --git a/src/CppParser/AST.h b/src/CppParser/AST.h index bfb8d547..32770825 100644 --- a/src/CppParser/AST.h +++ b/src/CppParser/AST.h @@ -258,7 +258,7 @@ class CS_API DependentNameType : public Type { public: DECLARE_TYPE_KIND(DependentName) - QualifiedType desugared; + QualifiedType qualifier; }; class CS_API PackExpansionType : public Type diff --git a/src/CppParser/Bindings/CLI/AST.cpp b/src/CppParser/Bindings/CLI/AST.cpp index 655de2ed..61800bb4 100644 --- a/src/CppParser/Bindings/CLI/AST.cpp +++ b/src/CppParser/Bindings/CLI/AST.cpp @@ -1108,14 +1108,14 @@ CppSharp::Parser::AST::DependentNameType::DependentNameType(CppSharp::Parser::AS NativePtr = new ::CppSharp::CppParser::AST::DependentNameType(__arg0); } -CppSharp::Parser::AST::QualifiedType^ CppSharp::Parser::AST::DependentNameType::Desugared::get() +CppSharp::Parser::AST::QualifiedType^ CppSharp::Parser::AST::DependentNameType::Qualifier::get() { - return (&((::CppSharp::CppParser::AST::DependentNameType*)NativePtr)->desugared == nullptr) ? nullptr : gcnew CppSharp::Parser::AST::QualifiedType((::CppSharp::CppParser::AST::QualifiedType*)&((::CppSharp::CppParser::AST::DependentNameType*)NativePtr)->desugared); + return (&((::CppSharp::CppParser::AST::DependentNameType*)NativePtr)->qualifier == nullptr) ? nullptr : gcnew CppSharp::Parser::AST::QualifiedType((::CppSharp::CppParser::AST::QualifiedType*)&((::CppSharp::CppParser::AST::DependentNameType*)NativePtr)->qualifier); } -void CppSharp::Parser::AST::DependentNameType::Desugared::set(CppSharp::Parser::AST::QualifiedType^ value) +void CppSharp::Parser::AST::DependentNameType::Qualifier::set(CppSharp::Parser::AST::QualifiedType^ value) { - ((::CppSharp::CppParser::AST::DependentNameType*)NativePtr)->desugared = *(::CppSharp::CppParser::AST::QualifiedType*)value->NativePtr; + ((::CppSharp::CppParser::AST::DependentNameType*)NativePtr)->qualifier = *(::CppSharp::CppParser::AST::QualifiedType*)value->NativePtr; } CppSharp::Parser::AST::PackExpansionType::PackExpansionType(::CppSharp::CppParser::AST::PackExpansionType* native) diff --git a/src/CppParser/Bindings/CLI/AST.h b/src/CppParser/Bindings/CLI/AST.h index 0e54c15e..a59da4db 100644 --- a/src/CppParser/Bindings/CLI/AST.h +++ b/src/CppParser/Bindings/CLI/AST.h @@ -978,7 +978,7 @@ namespace CppSharp ~DependentNameType(); - property CppSharp::Parser::AST::QualifiedType^ Desugared + property CppSharp::Parser::AST::QualifiedType^ Qualifier { CppSharp::Parser::AST::QualifiedType^ get(); void set(CppSharp::Parser::AST::QualifiedType^); diff --git a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs index 585e97a0..98a930fb 100644 --- a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs @@ -2562,7 +2562,7 @@ namespace CppSharp public byte isDependent; [FieldOffset(8)] - public global::CppSharp.Parser.AST.QualifiedType.__Internal desugared; + public global::CppSharp.Parser.AST.QualifiedType.__Internal qualifier; [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, @@ -2629,16 +2629,16 @@ namespace CppSharp __Internal.cctor_2((__Instance + __PointerAdjustment), __arg0); } - public global::CppSharp.Parser.AST.QualifiedType Desugared + public global::CppSharp.Parser.AST.QualifiedType Qualifier { get { - return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->desugared); + return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->qualifier); } set { - ((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->desugared = 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; } } } diff --git a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs index 849a13bd..740b4708 100644 --- a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs @@ -2562,7 +2562,7 @@ namespace CppSharp public byte isDependent; [FieldOffset(8)] - public global::CppSharp.Parser.AST.QualifiedType.__Internal desugared; + public global::CppSharp.Parser.AST.QualifiedType.__Internal qualifier; [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, @@ -2629,16 +2629,16 @@ namespace CppSharp __Internal.cctor_1((__Instance + __PointerAdjustment), __arg0); } - public global::CppSharp.Parser.AST.QualifiedType Desugared + public global::CppSharp.Parser.AST.QualifiedType Qualifier { get { - return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->desugared); + return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->qualifier); } set { - ((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->desugared = 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; } } } diff --git a/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs index 0386a92d..65078066 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs @@ -2562,7 +2562,7 @@ namespace CppSharp public byte isDependent; [FieldOffset(8)] - public global::CppSharp.Parser.AST.QualifiedType.__Internal desugared; + public global::CppSharp.Parser.AST.QualifiedType.__Internal qualifier; [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, @@ -2629,16 +2629,16 @@ namespace CppSharp __Internal.cctor_2((__Instance + __PointerAdjustment), __arg0); } - public global::CppSharp.Parser.AST.QualifiedType Desugared + public global::CppSharp.Parser.AST.QualifiedType Qualifier { get { - return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->desugared); + return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->qualifier); } set { - ((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->desugared = 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; } } } diff --git a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs index 1c6f77f0..d0682fab 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs @@ -2562,7 +2562,7 @@ namespace CppSharp public byte isDependent; [FieldOffset(8)] - public global::CppSharp.Parser.AST.QualifiedType.__Internal desugared; + public global::CppSharp.Parser.AST.QualifiedType.__Internal qualifier; [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, @@ -2629,16 +2629,16 @@ namespace CppSharp __Internal.cctor_2((__Instance + __PointerAdjustment), __arg0); } - public global::CppSharp.Parser.AST.QualifiedType Desugared + public global::CppSharp.Parser.AST.QualifiedType Qualifier { get { - return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->desugared); + return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->qualifier); } set { - ((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->desugared = 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; } } } diff --git a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs index 32c190f9..1330e1fb 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs @@ -2562,7 +2562,7 @@ namespace CppSharp public byte isDependent; [FieldOffset(8)] - public global::CppSharp.Parser.AST.QualifiedType.__Internal desugared; + public global::CppSharp.Parser.AST.QualifiedType.__Internal qualifier; [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, @@ -2629,16 +2629,16 @@ namespace CppSharp __Internal.cctor_2((__Instance + __PointerAdjustment), __arg0); } - public global::CppSharp.Parser.AST.QualifiedType Desugared + public global::CppSharp.Parser.AST.QualifiedType Qualifier { get { - return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->desugared); + return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->qualifier); } set { - ((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->desugared = 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; } } } diff --git a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs index 506a34bd..5a7c203a 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs @@ -2562,7 +2562,7 @@ namespace CppSharp public byte isDependent; [FieldOffset(8)] - public global::CppSharp.Parser.AST.QualifiedType.__Internal desugared; + public global::CppSharp.Parser.AST.QualifiedType.__Internal qualifier; [SuppressUnmanagedCodeSecurity] [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, @@ -2629,16 +2629,16 @@ namespace CppSharp __Internal.cctor_1((__Instance + __PointerAdjustment), __arg0); } - public global::CppSharp.Parser.AST.QualifiedType Desugared + public global::CppSharp.Parser.AST.QualifiedType Qualifier { get { - return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->desugared); + return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->qualifier); } set { - ((global::CppSharp.Parser.AST.DependentNameType.__Internal*) __Instance)->desugared = 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; } } } diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index 19a52df6..d585fe0d 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -2543,6 +2543,8 @@ Type* Parser::WalkType(clang::QualType QualType, clang::TypeLoc* TL, TPT->parameter = WalkTypeTemplateParameter(TTTL.getDecl()); } + else if (TP->getDecl()) + TPT->parameter = WalkTypeTemplateParameter(TP->getDecl()); TPT->depth = TP->getDepth(); TPT->index = TP->getIndex(); TPT->isParameterPack = TP->isParameterPack(); @@ -2584,8 +2586,13 @@ Type* Parser::WalkType(clang::QualType QualType, clang::TypeLoc* TL, { auto DN = Type->getAs(); auto DNT = new DependentNameType(); - if (DN->isSugared()) - DNT->desugared = GetQualifiedType(DN->desugar(), TL); + switch (DN->getQualifier()->getKind()) + { + case clang::NestedNameSpecifier::SpecifierKind::TypeSpec: + case clang::NestedNameSpecifier::SpecifierKind::TypeSpecWithTemplate: + DNT->qualifier = GetQualifiedType(clang::QualType(DN->getQualifier()->getAsType(), 0)); + break; + } Ty = DNT; break; diff --git a/src/Generator/Generators/CLI/CLITypePrinter.cs b/src/Generator/Generators/CLI/CLITypePrinter.cs index 6f1f7609..33145507 100644 --- a/src/Generator/Generators/CLI/CLITypePrinter.cs +++ b/src/Generator/Generators/CLI/CLITypePrinter.cs @@ -321,8 +321,8 @@ namespace CppSharp.Generators.CLI public override TypePrinterResult VisitDependentNameType( DependentNameType dependent, TypeQualifiers quals) { - return dependent.Desugared.Type != null - ? dependent.Desugared.Visit(this) : string.Empty; + return dependent.Qualifier.Type != null ? + dependent.Qualifier.Visit(this) : string.Empty; } public override TypePrinterResult VisitPackExpansionType( diff --git a/src/Generator/Generators/CSharp/CSharpTypePrinter.cs b/src/Generator/Generators/CSharp/CSharpTypePrinter.cs index 99854d42..3a2e8121 100644 --- a/src/Generator/Generators/CSharp/CSharpTypePrinter.cs +++ b/src/Generator/Generators/CSharp/CSharpTypePrinter.cs @@ -442,7 +442,7 @@ namespace CppSharp.Generators.CSharp public override TypePrinterResult VisitDependentNameType(DependentNameType dependent, TypeQualifiers quals) { - return dependent.Desugared.Type != null ? dependent.Desugared.Visit(this) : string.Empty; + return dependent.Qualifier.Type != null ? dependent.Qualifier.Visit(this) : string.Empty; } public override TypePrinterResult VisitPackExpansionType(PackExpansionType type, diff --git a/src/Parser/ASTConverter.cs b/src/Parser/ASTConverter.cs index 880169f8..f9f0f76b 100644 --- a/src/Parser/ASTConverter.cs +++ b/src/Parser/ASTConverter.cs @@ -702,7 +702,7 @@ namespace CppSharp { var _type = new AST.DependentNameType(); VisitType(type, _type); - _type.Desugared = VisitQualified(type.Desugared); + _type.Qualifier = VisitQualified(type.Qualifier); return _type; }