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 @@ -266,6 +266,28 @@ TypedefDecl* DeclarationContext::FindTypedef(const std::string& Name, bool Creat
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)
{
auto existingUnit = std::find_if(TranslationUnits.begin(),

41
src/CppParser/AST.h

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

Loading…
Cancel
Save