diff --git a/src/AST/Template.cs b/src/AST/Template.cs index 062254ee..e71ee5b8 100644 --- a/src/AST/Template.cs +++ b/src/AST/Template.cs @@ -124,6 +124,8 @@ namespace CppSharp.AST /// public bool IsExpandedParameterPack { get; set; } + public QualifiedType Type { get; set; } + public override T Visit(IDeclVisitor visitor) { return visitor.VisitNonTypeTemplateParameterDecl(this); diff --git a/src/CppParser/AST.cpp b/src/CppParser/AST.cpp index d0442df0..ae9e1763 100644 --- a/src/CppParser/AST.cpp +++ b/src/CppParser/AST.cpp @@ -164,6 +164,7 @@ NonTypeTemplateParameter::NonTypeTemplateParameter(const NonTypeTemplateParamete , position(rhs.position) , isPackExpansion(rhs.isPackExpansion) , isExpandedParameterPack(rhs.isExpandedParameterPack) + , type(rhs.type) { } diff --git a/src/CppParser/Bindings/CLI/Decl.cpp b/src/CppParser/Bindings/CLI/Decl.cpp index 2465c7ef..3de0e48d 100644 --- a/src/CppParser/Bindings/CLI/Decl.cpp +++ b/src/CppParser/Bindings/CLI/Decl.cpp @@ -4224,6 +4224,18 @@ void CppSharp::Parser::AST::NonTypeTemplateParameter::IsExpandedParameterPack::s ((class ::CppSharp::CppParser::AST::NonTypeTemplateParameter*)NativePtr)->isExpandedParameterPack = value; } +CppSharp::Parser::AST::QualifiedType^ CppSharp::Parser::AST::NonTypeTemplateParameter::Type::get() +{ + return (&((class ::CppSharp::CppParser::AST::NonTypeTemplateParameter*)NativePtr)->type == nullptr) ? nullptr : gcnew ::CppSharp::Parser::AST::QualifiedType((struct ::CppSharp::CppParser::AST::QualifiedType*)&((class ::CppSharp::CppParser::AST::NonTypeTemplateParameter*)NativePtr)->type); +} + +void CppSharp::Parser::AST::NonTypeTemplateParameter::Type::set(CppSharp::Parser::AST::QualifiedType^ value) +{ + if (ReferenceEquals(value, nullptr)) + throw gcnew ::System::ArgumentNullException("value", "Cannot be null because it is passed by value."); + ((class ::CppSharp::CppParser::AST::NonTypeTemplateParameter*)NativePtr)->type = *(struct ::CppSharp::CppParser::AST::QualifiedType*)value->NativePtr; +} + CppSharp::Parser::AST::ClassTemplate::ClassTemplate(class ::CppSharp::CppParser::AST::ClassTemplate* native) : CppSharp::Parser::AST::Template((::CppSharp::CppParser::AST::Template*)native) { diff --git a/src/CppParser/Bindings/CLI/Decl.h b/src/CppParser/Bindings/CLI/Decl.h index 78a14680..8c9044c7 100644 --- a/src/CppParser/Bindings/CLI/Decl.h +++ b/src/CppParser/Bindings/CLI/Decl.h @@ -2098,6 +2098,12 @@ namespace CppSharp bool get(); void set(bool); } + + property CppSharp::Parser::AST::QualifiedType^ Type + { + CppSharp::Parser::AST::QualifiedType^ get(); + void set(CppSharp::Parser::AST::QualifiedType^); + } }; public ref class ClassTemplate : CppSharp::Parser::AST::Template 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 9eb4d95f..5fcdfc4e 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 @@ -13017,6 +13017,7 @@ namespace CppSharp internal uint position; internal byte isPackExpansion; internal byte isExpandedParameterPack; + internal global::CppSharp.Parser.AST.QualifiedType.__Internal type; [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24NonTypeTemplateParameterC2Ev", CallingConvention = __CallingConvention.Cdecl)] internal static extern void ctor(__IntPtr __instance); @@ -13171,6 +13172,21 @@ namespace CppSharp ((__Internal*)__Instance)->isExpandedParameterPack = (byte) (value ? 1 : 0); } } + + public global::CppSharp.Parser.AST.QualifiedType Type + { + get + { + return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->type)); + } + + set + { + if (ReferenceEquals(value, null)) + throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value."); + ((__Internal*)__Instance)->type = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance; + } + } } public unsafe partial class ClassTemplate : global::CppSharp.Parser.AST.Template, IDisposable diff --git a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs index edf6a044..de89c3f7 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 @@ -13017,6 +13017,7 @@ namespace CppSharp internal uint position; internal byte isPackExpansion; internal byte isExpandedParameterPack; + internal global::CppSharp.Parser.AST.QualifiedType.__Internal type; [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "??0NonTypeTemplateParameter@AST@CppParser@CppSharp@@QAE@XZ", CallingConvention = __CallingConvention.ThisCall)] internal static extern __IntPtr ctor(__IntPtr __instance); @@ -13171,6 +13172,21 @@ namespace CppSharp ((__Internal*)__Instance)->isExpandedParameterPack = (byte) (value ? 1 : 0); } } + + public global::CppSharp.Parser.AST.QualifiedType Type + { + get + { + return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->type)); + } + + set + { + if (ReferenceEquals(value, null)) + throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value."); + ((__Internal*)__Instance)->type = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance; + } + } } public unsafe partial class ClassTemplate : global::CppSharp.Parser.AST.Template, IDisposable diff --git a/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs index 9c0a02d4..576edd3c 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 @@ -13016,6 +13016,7 @@ namespace CppSharp internal uint position; internal byte isPackExpansion; internal byte isExpandedParameterPack; + internal global::CppSharp.Parser.AST.QualifiedType.__Internal type; [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24NonTypeTemplateParameterC2Ev", CallingConvention = __CallingConvention.Cdecl)] internal static extern void ctor(__IntPtr __instance); @@ -13170,6 +13171,21 @@ namespace CppSharp ((__Internal*)__Instance)->isExpandedParameterPack = (byte) (value ? 1 : 0); } } + + public global::CppSharp.Parser.AST.QualifiedType Type + { + get + { + return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->type)); + } + + set + { + if (ReferenceEquals(value, null)) + throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value."); + ((__Internal*)__Instance)->type = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance; + } + } } public unsafe partial class ClassTemplate : global::CppSharp.Parser.AST.Template, IDisposable 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 eded5f9d..4c620197 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 @@ -13016,6 +13016,7 @@ namespace CppSharp internal uint position; internal byte isPackExpansion; internal byte isExpandedParameterPack; + internal global::CppSharp.Parser.AST.QualifiedType.__Internal type; [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24NonTypeTemplateParameterC2Ev", CallingConvention = __CallingConvention.Cdecl)] internal static extern void ctor(__IntPtr __instance); @@ -13170,6 +13171,21 @@ namespace CppSharp ((__Internal*)__Instance)->isExpandedParameterPack = (byte) (value ? 1 : 0); } } + + public global::CppSharp.Parser.AST.QualifiedType Type + { + get + { + return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->type)); + } + + set + { + if (ReferenceEquals(value, null)) + throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value."); + ((__Internal*)__Instance)->type = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance; + } + } } public unsafe partial class ClassTemplate : global::CppSharp.Parser.AST.Template, IDisposable 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 1ce37527..2b7e1e83 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 @@ -13016,6 +13016,7 @@ namespace CppSharp internal uint position; internal byte isPackExpansion; internal byte isExpandedParameterPack; + internal global::CppSharp.Parser.AST.QualifiedType.__Internal type; [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser", EntryPoint = "_ZN8CppSharp9CppParser3AST24NonTypeTemplateParameterC2Ev", CallingConvention = __CallingConvention.Cdecl)] internal static extern void ctor(__IntPtr __instance); @@ -13170,6 +13171,21 @@ namespace CppSharp ((__Internal*)__Instance)->isExpandedParameterPack = (byte) (value ? 1 : 0); } } + + public global::CppSharp.Parser.AST.QualifiedType Type + { + get + { + return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->type)); + } + + set + { + if (ReferenceEquals(value, null)) + throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value."); + ((__Internal*)__Instance)->type = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance; + } + } } public unsafe partial class ClassTemplate : global::CppSharp.Parser.AST.Template, IDisposable diff --git a/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs b/src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs index eda694a5..5c6dadc5 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 @@ -13018,6 +13018,7 @@ namespace CppSharp internal uint position; internal byte isPackExpansion; internal byte isExpandedParameterPack; + internal global::CppSharp.Parser.AST.QualifiedType.__Internal type; [SuppressUnmanagedCodeSecurity, DllImport("CppSharp.CppParser.dll", EntryPoint = "??0NonTypeTemplateParameter@AST@CppParser@CppSharp@@QEAA@XZ", CallingConvention = __CallingConvention.Cdecl)] internal static extern __IntPtr ctor(__IntPtr __instance); @@ -13172,6 +13173,21 @@ namespace CppSharp ((__Internal*)__Instance)->isExpandedParameterPack = (byte) (value ? 1 : 0); } } + + public global::CppSharp.Parser.AST.QualifiedType Type + { + get + { + return global::CppSharp.Parser.AST.QualifiedType.__CreateInstance(new __IntPtr(&((__Internal*)__Instance)->type)); + } + + set + { + if (ReferenceEquals(value, null)) + throw new global::System.ArgumentNullException("value", "Cannot be null because it is passed by value."); + ((__Internal*)__Instance)->type = *(global::CppSharp.Parser.AST.QualifiedType.__Internal*) value.__Instance; + } + } } public unsafe partial class ClassTemplate : global::CppSharp.Parser.AST.Template, IDisposable diff --git a/src/CppParser/Decl.h b/src/CppParser/Decl.h index fdce7e88..b51929c4 100644 --- a/src/CppParser/Decl.h +++ b/src/CppParser/Decl.h @@ -674,6 +674,7 @@ namespace CppSharp unsigned int position; bool isPackExpansion; bool isExpandedParameterPack; + QualifiedType type; }; class ClassTemplateSpecialization; diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index 2cc42dad..3d8d8796 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -1430,6 +1430,7 @@ NonTypeTemplateParameter* Parser::WalkNonTypeTemplateParameter(const clang::NonT HandleDeclaration(NTTPD, NTP); if (NTTPD->hasDefaultArgument()) NTP->defaultArgument = WalkExpressionObsolete(NTTPD->getDefaultArgument()); + NTP->type = GetQualifiedType(NTTPD->getType()); NTP->depth = NTTPD->getDepth(); NTP->index = NTTPD->getIndex(); NTP->isParameterPack = NTTPD->isParameterPack(); diff --git a/src/Parser/ASTConverter.cs b/src/Parser/ASTConverter.cs index aeda9e00..f32f63c7 100644 --- a/src/Parser/ASTConverter.cs +++ b/src/Parser/ASTConverter.cs @@ -2083,6 +2083,7 @@ namespace CppSharp nonTypeTemplateParameter.IsParameterPack = decl.IsParameterPack; nonTypeTemplateParameter.IsPackExpansion = decl.IsPackExpansion; nonTypeTemplateParameter.IsExpandedParameterPack = decl.IsExpandedParameterPack; + nonTypeTemplateParameter.Type = typeConverter.VisitQualified(decl.Type); return nonTypeTemplateParameter; }