Skip to content

Commit db8af55

Browse files
committed
Add UsingDecl AST node.
Closes #1758.
1 parent 1710202 commit db8af55

22 files changed

+3733
-1117
lines changed

src/AST/Class.cs

+13
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,17 @@ public override T Visit<T>(IDeclVisitor<T> visitor)
3232
}
3333
}
3434

35+
// A C++ using declaration.
36+
public class Using: Declaration
37+
{
38+
public DeclarationName DeclarationName { get; set; }
39+
40+
public override T Visit<T>(IDeclVisitor<T> visitor)
41+
{
42+
throw new NotImplementedException();
43+
}
44+
}
45+
3546
// Represents a base class of a C++ class.
3647
public class BaseClassSpecifier : DeclarationBase
3748
{
@@ -79,6 +90,7 @@ public class Class : DeclarationContext
7990
public List<Property> Properties;
8091
public List<Method> Methods;
8192
public List<AccessSpecifierDecl> Specifiers;
93+
public List<Using> Usings;
8294

8395
// True if the record is a POD (Plain Old Data) type.
8496
public bool IsPOD;
@@ -136,6 +148,7 @@ public Class()
136148
Properties = new List<Property>();
137149
Methods = new List<Method>();
138150
Specifiers = new List<AccessSpecifierDecl>();
151+
Usings = new List<Using>();
139152
IsAbstract = false;
140153
IsUnion = false;
141154
IsFinal = false;

src/CppParser/AST.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -756,6 +756,7 @@ DEF_VECTOR(Class, BaseClassSpecifier*, Bases)
756756
DEF_VECTOR(Class, Field*, Fields)
757757
DEF_VECTOR(Class, Method*, Methods)
758758
DEF_VECTOR(Class, AccessSpecifierDecl*, Specifiers)
759+
DEF_VECTOR(Class, Using*, Usings)
759760

760761
Template::Template() : Declaration(DeclarationKind::Template),
761762
TemplatedDecl(0) {}
@@ -872,6 +873,10 @@ UnresolvedUsingTypename::UnresolvedUsingTypename() : Declaration(DeclarationKind
872873

873874
UnresolvedUsingTypename::~UnresolvedUsingTypename() {}
874875

876+
Using::Using() : Declaration(DeclarationKind::Using) {}
877+
878+
Using::~Using() {}
879+
875880
Namespace::Namespace()
876881
: DeclarationContext(DeclarationKind::Namespace)
877882
, isInline(false)

src/CppParser/Bindings/CLI/Decl.cpp

+180
Original file line numberDiff line numberDiff line change
@@ -2647,6 +2647,137 @@ CppSharp::Parser::AST::AccessSpecifierDecl::AccessSpecifierDecl(CppSharp::Parser
26472647
NativePtr = new class ::CppSharp::CppParser::AST::AccessSpecifierDecl(__arg0);
26482648
}
26492649

2650+
CppSharp::Parser::AST::DeclarationName::DeclarationName(class ::CppSharp::CppParser::AST::DeclarationName* native)
2651+
: __ownsNativeInstance(false)
2652+
{
2653+
NativePtr = native;
2654+
}
2655+
2656+
CppSharp::Parser::AST::DeclarationName^ CppSharp::Parser::AST::DeclarationName::__CreateInstance(::System::IntPtr native)
2657+
{
2658+
return gcnew ::CppSharp::Parser::AST::DeclarationName((class ::CppSharp::CppParser::AST::DeclarationName*) native.ToPointer());
2659+
}
2660+
2661+
CppSharp::Parser::AST::DeclarationName::DeclarationName(class ::CppSharp::CppParser::AST::DeclarationName* native, bool ownNativeInstance)
2662+
: __ownsNativeInstance(ownNativeInstance)
2663+
{
2664+
NativePtr = native;
2665+
}
2666+
2667+
CppSharp::Parser::AST::DeclarationName^ CppSharp::Parser::AST::DeclarationName::__CreateInstance(::System::IntPtr native, bool __ownsNativeInstance)
2668+
{
2669+
return gcnew ::CppSharp::Parser::AST::DeclarationName((class ::CppSharp::CppParser::AST::DeclarationName*) native.ToPointer(), __ownsNativeInstance);
2670+
}
2671+
2672+
CppSharp::Parser::AST::DeclarationName::~DeclarationName()
2673+
{
2674+
delete NativePtr;
2675+
}
2676+
2677+
CppSharp::Parser::AST::DeclarationName::DeclarationName(CppSharp::Parser::AST::DeclarationName^ _0)
2678+
{
2679+
__ownsNativeInstance = true;
2680+
if (ReferenceEquals(_0, nullptr))
2681+
throw gcnew ::System::ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
2682+
auto &__arg0 = *(class ::CppSharp::CppParser::AST::DeclarationName*)_0->NativePtr;
2683+
NativePtr = new class ::CppSharp::CppParser::AST::DeclarationName(__arg0);
2684+
}
2685+
2686+
CppSharp::Parser::AST::DeclarationName::DeclarationName()
2687+
{
2688+
__ownsNativeInstance = true;
2689+
NativePtr = new class ::CppSharp::CppParser::AST::DeclarationName();
2690+
}
2691+
2692+
::System::IntPtr CppSharp::Parser::AST::DeclarationName::__Instance::get()
2693+
{
2694+
return ::System::IntPtr(NativePtr);
2695+
}
2696+
2697+
void CppSharp::Parser::AST::DeclarationName::__Instance::set(::System::IntPtr object)
2698+
{
2699+
NativePtr = (class ::CppSharp::CppParser::AST::DeclarationName*)object.ToPointer();
2700+
}
2701+
2702+
CppSharp::Parser::AST::DeclarationNameKind CppSharp::Parser::AST::DeclarationName::Kind::get()
2703+
{
2704+
return (CppSharp::Parser::AST::DeclarationNameKind)NativePtr->kind;
2705+
}
2706+
2707+
void CppSharp::Parser::AST::DeclarationName::Kind::set(CppSharp::Parser::AST::DeclarationNameKind value)
2708+
{
2709+
((class ::CppSharp::CppParser::AST::DeclarationName*)NativePtr)->kind = (enum ::CppSharp::CppParser::AST::DeclarationNameKind)value;
2710+
}
2711+
2712+
::System::String^ CppSharp::Parser::AST::DeclarationName::Identifier::get()
2713+
{
2714+
return clix::marshalString<clix::E_UTF8>(NativePtr->identifier);
2715+
}
2716+
2717+
void CppSharp::Parser::AST::DeclarationName::Identifier::set(::System::String^ value)
2718+
{
2719+
((class ::CppSharp::CppParser::AST::DeclarationName*)NativePtr)->identifier = clix::marshalString<clix::E_UTF8>(value);
2720+
}
2721+
2722+
CppSharp::Parser::AST::Using::Using(class ::CppSharp::CppParser::AST::Using* native)
2723+
: CppSharp::Parser::AST::Declaration((::CppSharp::CppParser::AST::Declaration*)native)
2724+
{
2725+
}
2726+
2727+
CppSharp::Parser::AST::Using^ CppSharp::Parser::AST::Using::__CreateInstance(::System::IntPtr native)
2728+
{
2729+
return gcnew ::CppSharp::Parser::AST::Using((class ::CppSharp::CppParser::AST::Using*) native.ToPointer());
2730+
}
2731+
2732+
CppSharp::Parser::AST::Using::Using(class ::CppSharp::CppParser::AST::Using* native, bool ownNativeInstance)
2733+
: CppSharp::Parser::AST::Declaration((::CppSharp::CppParser::AST::Declaration*)native, ownNativeInstance)
2734+
{
2735+
}
2736+
2737+
CppSharp::Parser::AST::Using^ CppSharp::Parser::AST::Using::__CreateInstance(::System::IntPtr native, bool __ownsNativeInstance)
2738+
{
2739+
return gcnew ::CppSharp::Parser::AST::Using((class ::CppSharp::CppParser::AST::Using*) native.ToPointer(), __ownsNativeInstance);
2740+
}
2741+
2742+
CppSharp::Parser::AST::Using::~Using()
2743+
{
2744+
if (NativePtr)
2745+
{
2746+
auto __nativePtr = NativePtr;
2747+
NativePtr = 0;
2748+
delete (class ::CppSharp::CppParser::AST::Using*) __nativePtr;
2749+
}
2750+
}
2751+
2752+
CppSharp::Parser::AST::Using::Using()
2753+
: CppSharp::Parser::AST::Declaration((::CppSharp::CppParser::AST::Declaration*)nullptr)
2754+
{
2755+
__ownsNativeInstance = true;
2756+
NativePtr = new class ::CppSharp::CppParser::AST::Using();
2757+
}
2758+
2759+
CppSharp::Parser::AST::Using::Using(CppSharp::Parser::AST::Using^ _0)
2760+
: CppSharp::Parser::AST::Declaration((::CppSharp::CppParser::AST::Declaration*)nullptr)
2761+
{
2762+
__ownsNativeInstance = true;
2763+
if (ReferenceEquals(_0, nullptr))
2764+
throw gcnew ::System::ArgumentNullException("_0", "Cannot be null because it is a C++ reference (&).");
2765+
auto &__arg0 = *(class ::CppSharp::CppParser::AST::Using*)_0->NativePtr;
2766+
NativePtr = new class ::CppSharp::CppParser::AST::Using(__arg0);
2767+
}
2768+
2769+
CppSharp::Parser::AST::DeclarationName^ CppSharp::Parser::AST::Using::Name::get()
2770+
{
2771+
return (&((class ::CppSharp::CppParser::AST::Using*)NativePtr)->name == nullptr) ? nullptr : gcnew ::CppSharp::Parser::AST::DeclarationName((class ::CppSharp::CppParser::AST::DeclarationName*)&((class ::CppSharp::CppParser::AST::Using*)NativePtr)->name);
2772+
}
2773+
2774+
void CppSharp::Parser::AST::Using::Name::set(CppSharp::Parser::AST::DeclarationName^ value)
2775+
{
2776+
if (ReferenceEquals(value, nullptr))
2777+
throw gcnew ::System::ArgumentNullException("value", "Cannot be null because it is passed by value.");
2778+
((class ::CppSharp::CppParser::AST::Using*)NativePtr)->name = *(class ::CppSharp::CppParser::AST::DeclarationName*)value->NativePtr;
2779+
}
2780+
26502781
CppSharp::Parser::AST::VTableComponent::VTableComponent(struct ::CppSharp::CppParser::AST::VTableComponent* native)
26512782
: __ownsNativeInstance(false)
26522783
{
@@ -3500,6 +3631,26 @@ void CppSharp::Parser::AST::Class::ClearSpecifiers()
35003631
((class ::CppSharp::CppParser::AST::Class*)NativePtr)->clearSpecifiers();
35013632
}
35023633

3634+
CppSharp::Parser::AST::Using^ CppSharp::Parser::AST::Class::GetUsings(unsigned int i)
3635+
{
3636+
auto ___ret = ((class ::CppSharp::CppParser::AST::Class*)NativePtr)->getUsings(i);
3637+
if (___ret == nullptr) return nullptr;
3638+
return (___ret == nullptr) ? nullptr : gcnew ::CppSharp::Parser::AST::Using((class ::CppSharp::CppParser::AST::Using*)___ret);
3639+
}
3640+
3641+
void CppSharp::Parser::AST::Class::AddUsings(CppSharp::Parser::AST::Using^ s)
3642+
{
3643+
if (ReferenceEquals(s, nullptr))
3644+
throw gcnew ::System::ArgumentNullException("s", "Cannot be null because it is a C++ reference (&).");
3645+
auto __arg0 = (class ::CppSharp::CppParser::AST::Using*)s->NativePtr;
3646+
((class ::CppSharp::CppParser::AST::Class*)NativePtr)->addUsings(__arg0);
3647+
}
3648+
3649+
void CppSharp::Parser::AST::Class::ClearUsings()
3650+
{
3651+
((class ::CppSharp::CppParser::AST::Class*)NativePtr)->clearUsings();
3652+
}
3653+
35033654
CppSharp::Parser::AST::Class::Class(CppSharp::Parser::AST::Class^ _0)
35043655
: CppSharp::Parser::AST::DeclarationContext((::CppSharp::CppParser::AST::DeclarationContext*)nullptr)
35053656
{
@@ -3602,6 +3753,29 @@ void CppSharp::Parser::AST::Class::Specifiers::set(::System::Collections::Generi
36023753
((class ::CppSharp::CppParser::AST::Class*)NativePtr)->Specifiers = _tmpvalue;
36033754
}
36043755

3756+
::System::Collections::Generic::List<CppSharp::Parser::AST::Using^>^ CppSharp::Parser::AST::Class::Usings::get()
3757+
{
3758+
auto _tmp__Usings = gcnew ::System::Collections::Generic::List<CppSharp::Parser::AST::Using^>();
3759+
auto __list0 = ((class ::CppSharp::CppParser::AST::Class*)NativePtr)->Usings;
3760+
for(auto _element : __list0)
3761+
{
3762+
auto _marshalElement = (_element == nullptr) ? nullptr : gcnew ::CppSharp::Parser::AST::Using((class ::CppSharp::CppParser::AST::Using*)_element);
3763+
_tmp__Usings->Add(_marshalElement);
3764+
}
3765+
return _tmp__Usings;
3766+
}
3767+
3768+
void CppSharp::Parser::AST::Class::Usings::set(::System::Collections::Generic::List<CppSharp::Parser::AST::Using^>^ value)
3769+
{
3770+
auto _tmpvalue = std::vector<::CppSharp::CppParser::AST::Using*>();
3771+
for each(CppSharp::Parser::AST::Using^ _element in value)
3772+
{
3773+
auto _marshalElement = (class ::CppSharp::CppParser::AST::Using*)_element->NativePtr;
3774+
_tmpvalue.push_back(_marshalElement);
3775+
}
3776+
((class ::CppSharp::CppParser::AST::Class*)NativePtr)->Usings = _tmpvalue;
3777+
}
3778+
36053779
bool CppSharp::Parser::AST::Class::IsPOD::get()
36063780
{
36073781
return ((class ::CppSharp::CppParser::AST::Class*)NativePtr)->isPOD;
@@ -3746,6 +3920,12 @@ unsigned int CppSharp::Parser::AST::Class::SpecifiersCount::get()
37463920
return ___ret;
37473921
}
37483922

3923+
unsigned int CppSharp::Parser::AST::Class::UsingsCount::get()
3924+
{
3925+
auto ___ret = ((class ::CppSharp::CppParser::AST::Class*)NativePtr)->getUsingsCount();
3926+
return ___ret;
3927+
}
3928+
37493929
CppSharp::Parser::AST::Template::Template(class ::CppSharp::CppParser::AST::Template* native)
37503930
: CppSharp::Parser::AST::Declaration((::CppSharp::CppParser::AST::Declaration*)native)
37513931
{

0 commit comments

Comments
 (0)