Browse Source

Fixes to the native AST declarations.

pull/159/head
triton 12 years ago
parent
commit
5b3d01af73
  1. 22
      src/CppParser/AST.cpp
  2. 41
      src/CppParser/AST.h

22
src/CppParser/AST.cpp

@ -266,6 +266,28 @@ TypedefDecl* DeclarationContext::FindTypedef(const std::string& Name, bool Creat
return tdef; return tdef;
} }
ClassTemplateSpecialization* ClassTemplate::FindSpecialization(void* ptr)
{
return 0;
}
ClassTemplateSpecialization*
ClassTemplate::FindSpecialization(TemplateSpecializationType type)
{
return 0;
}
ClassTemplatePartialSpecialization* ClassTemplate::FindPartialSpecialization(void* ptr)
{
return 0;
}
ClassTemplatePartialSpecialization*
ClassTemplate::FindPartialSpecialization(TemplateSpecializationType type)
{
return 0;
}
TranslationUnit* ASTContext::FindOrCreateModule(const std::string& File) TranslationUnit* ASTContext::FindOrCreateModule(const std::string& File)
{ {
auto existingUnit = std::find_if(TranslationUnits.begin(), auto existingUnit = std::find_if(TranslationUnits.begin(),

41
src/CppParser/AST.h

@ -76,6 +76,7 @@ struct CS_API TypeQualifiers
struct CS_API QualifiedType struct CS_API QualifiedType
{ {
QualifiedType() : Type(0) {}
CppSharp::CppParser::AST::Type* Type; CppSharp::CppParser::AST::Type* Type;
TypeQualifiers Qualifiers; TypeQualifiers Qualifiers;
}; };
@ -149,7 +150,7 @@ struct TypedefDecl;
struct CS_API TypedefType : public Type struct CS_API TypedefType : public Type
{ {
DECLARE_TYPE_KIND(Typedef) TypedefType() : Type(TypeKind::Typedef), Declaration(0) {}
TypedefDecl* Declaration; TypedefDecl* Declaration;
}; };
@ -170,6 +171,8 @@ struct CS_API DecayedType : public Type
struct CS_API TemplateArgument struct CS_API TemplateArgument
{ {
TemplateArgument() : Declaration(0) {}
enum struct ArgumentKind enum struct ArgumentKind
{ {
Type, Type,
@ -192,7 +195,8 @@ struct Template;
struct CS_API TemplateSpecializationType : public Type struct CS_API TemplateSpecializationType : public Type
{ {
DECLARE_TYPE_KIND(TemplateSpecialization) TemplateSpecializationType() : Type(TypeKind::TemplateSpecialization),
Template(0), Desugared(0) {}
VECTOR(TemplateArgument, Arguments) VECTOR(TemplateArgument, Arguments)
CppSharp::CppParser::AST::Template* Template; CppSharp::CppParser::AST::Template* Template;
Type* Desugared; Type* Desugared;
@ -224,7 +228,8 @@ struct Class;
struct CS_API InjectedClassNameType : public Type struct CS_API InjectedClassNameType : public Type
{ {
DECLARE_TYPE_KIND(InjectedClassName) InjectedClassNameType() : Type(TypeKind::InjectedClassName),
Class(0) {}
TemplateSpecializationType TemplateSpecialization; TemplateSpecializationType TemplateSpecialization;
CppSharp::CppParser::AST::Class* Class; CppSharp::CppParser::AST::Class* Class;
}; };
@ -302,6 +307,7 @@ enum struct VTableComponentKind
struct CS_API VTableComponent struct CS_API VTableComponent
{ {
VTableComponent() : Offset(0), Declaration(0) {}
VTableComponentKind Kind; VTableComponentKind Kind;
unsigned Offset; unsigned Offset;
CppSharp::CppParser::AST::Declaration* Declaration; CppSharp::CppParser::AST::Declaration* Declaration;
@ -329,6 +335,7 @@ enum struct CppAbi
struct CS_API ClassLayout struct CS_API ClassLayout
{ {
ClassLayout() : ABI(CppAbi::Itanium) {}
CppAbi ABI; CppAbi ABI;
VECTOR(VFTableInfo, VFTables) VECTOR(VFTableInfo, VFTables)
VTableLayout Layout; VTableLayout Layout;
@ -548,7 +555,8 @@ struct AccessSpecifierDecl;
struct CS_API Method : public Function struct CS_API Method : public Function
{ {
Method() { Kind = DeclarationKind::Method; } Method() : IsDefaultConstructor(false), IsCopyConstructor(false),
IsMoveConstructor(false) { Kind = DeclarationKind::Method; }
AccessSpecifierDecl* AccessDecl; AccessSpecifierDecl* AccessDecl;
@ -617,7 +625,6 @@ struct CS_API Field : public Declaration
CppSharp::CppParser::AST::Class* Class; CppSharp::CppParser::AST::Class* Class;
}; };
struct CS_API AccessSpecifierDecl : public Declaration struct CS_API AccessSpecifierDecl : public Declaration
{ {
DECLARE_DECL_KIND(AccessSpecifierDecl, AccessSpecifier) DECLARE_DECL_KIND(AccessSpecifierDecl, AccessSpecifier)
@ -651,15 +658,35 @@ struct CS_API Template : public Declaration
VECTOR(TemplateParameter, Parameters) VECTOR(TemplateParameter, Parameters)
}; };
struct ClassTemplateSpecialization;
struct ClassTemplatePartialSpecialization;
struct CS_API ClassTemplate : public Template struct CS_API ClassTemplate : public Template
{ {
ClassTemplate() { Kind = DeclarationKind::ClassTemplate; } ClassTemplate() { Kind = DeclarationKind::ClassTemplate; }
VECTOR(ClassTemplateSpecialization*, Specializations)
ClassTemplateSpecialization* FindSpecialization(void* ptr);
ClassTemplateSpecialization* FindSpecialization(TemplateSpecializationType type);
ClassTemplatePartialSpecialization* FindPartialSpecialization(void* ptr);
ClassTemplatePartialSpecialization* FindPartialSpecialization(TemplateSpecializationType type);
};
enum struct TemplateSpecializationKind
{
Undeclared,
ImplicitInstantiation,
ExplicitSpecialization,
ExplicitInstantiationDeclaration,
ExplicitInstantiationDefinition
}; };
struct CS_API ClassTemplateSpecialization : public Class struct CS_API ClassTemplateSpecialization : public Class
{ {
ClassTemplateSpecialization() { Kind = ClassTemplateSpecialization() {
DeclarationKind::ClassTemplateSpecialization; } Kind = DeclarationKind::ClassTemplateSpecialization; }
ClassTemplate* TemplatedDecl;
VECTOR(TemplateArgument, Arguments)
TemplateSpecializationKind SpecializationKind;
}; };
struct CS_API ClassTemplatePartialSpecialization : public ClassTemplateSpecialization struct CS_API ClassTemplatePartialSpecialization : public ClassTemplateSpecialization

Loading…
Cancel
Save