Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
RScanner Class Reference

Definition at line 50 of file Scanner.h.

Classes

class  AnnotatedNamespaceDecl
 
struct  DelayedAnnotatedRecordDeclInfo
 

Public Types

typedef std::vector< ROOT::TMetaUtils::AnnotatedRecordDeclClassColl_t
 
typedef void(* DeclCallback) (const clang::RecordDecl *)
 
typedef std::map< const clang::Decl *, const BaseSelectionRule * > DeclsSelRulesMap_t
 
typedef std::vector< const clang::EnumDecl * > EnumColl_t
 
enum class  EScanType : char { kNormal , kTwoPasses , kOnePCM }
 
typedef std::vector< const clang::FunctionDecl * > FunctionColl_t
 
typedef std::vector< AnnotatedNamespaceDeclNamespaceColl_t
 
typedef std::vector< const clang::TypedefNameDecl * > TypedefColl_t
 
typedef std::vector< const clang::VarDecl * > VariableColl_t
 

Public Member Functions

 RScanner (SelectionRules &rules, EScanType stype, const cling::Interpreter &interpret, ROOT::TMetaUtils::TNormalizedCtxt &normCtxt, unsigned int verbose=0)
 Regular constructor setting up the scanner to search for entities matching the 'rules'.
 
virtual ~RScanner ()
 
void AddDelayedAnnotatedRecordDecls ()
 
bool GetDeclName (clang::Decl *D, std::string &name) const
 
const DeclsSelRulesMap_tGetDeclsSelRulesMap () const
 
bool GetFunctionPrototype (clang::Decl *D, std::string &prototype) const
 
void Scan (const clang::ASTContext &C)
 
DeclCallback SetRecordDeclCallback (DeclCallback callback)
 Set the callback to the RecordDecl and return the previous one.
 
bool shouldVisitTemplateInstantiations () const
 
bool TraverseClassTemplatePartialSpecializationDecl (clang::ClassTemplatePartialSpecializationDecl *)
 
bool TraverseDeclContextHelper (clang::DeclContext *DC)
 
bool TraverseStmt (clang::Stmt *)
 
bool TreatRecordDeclOrTypedefNameDecl (clang::TypeDecl *typeDecl)
 
bool VisitEnumDecl (clang::EnumDecl *D)
 
bool VisitFieldDecl (clang::FieldDecl *D)
 Nothing to be done here.
 
bool VisitFunctionDecl (clang::FunctionDecl *D)
 
bool VisitNamespaceDecl (clang::NamespaceDecl *D)
 This method visits a namespace node.
 
bool VisitRecordDecl (clang::RecordDecl *D)
 
bool VisitTypedefNameDecl (clang::TypedefNameDecl *D)
 Visitor for every TypedefNameDecl, i.e.
 
bool VisitVarDecl (clang::VarDecl *D)
 

Static Public Member Functions

static bool GetDeclQualName (const clang::Decl *D, std::string &qual_name)
 

Public Attributes

std::vector< DelayedAnnotatedRecordDeclInfofDelayedAnnotatedRecordDecls
 
ClassColl_t fSelectedClasses
 
EnumColl_t fSelectedEnums
 
FunctionColl_t fSelectedFunctions
 
NamespaceColl_t fSelectedNamespaces
 
TypedefColl_t fSelectedTypedefs
 
VariableColl_t fSelectedVariables
 

Static Public Attributes

static const char * fgClangDeclKey = "ClangDecl"
 
static const char * fgClangFuncKey = "ClangFunc"
 

Private Member Functions

int AddAnnotatedRecordDecl (const ClassSelectionRule *, const clang::Type *, const clang::RecordDecl *, const std::string &, const clang::TypedefNameDecl *, unsigned int indexOffset=0)
 
std::string ConvTemplateArguments (const clang::TemplateArgumentList &list) const
 
std::string ConvTemplateName (clang::TemplateName &N) const
 
std::string ConvTemplateParameterList (clang::TemplateParameterList *list) const
 
std::string ConvTemplateParams (clang::TemplateDecl *D) const
 
void DeclInfo (clang::Decl *D) const
 
std::string ExprToStr (clang::Expr *expr) const
 
unsigned int FuncModifiers (clang::FunctionDecl *D) const
 
std::string FuncParameterList (clang::FunctionDecl *D) const
 
std::string FuncParameters (clang::FunctionDecl *D) const
 
std::string GetEnumName (clang::EnumDecl *D) const
 
std::string GetLocation (clang::Decl *D) const
 
std::string GetName (clang::Decl *D) const
 
std::string GetSrcLocation (clang::SourceLocation L) const
 
bool shouldVisitDecl (clang::NamedDecl *D)
 Whether we can actually visit this declaration, i.e.
 
void ShowError (const std::string &msg, const std::string &location="") const
 
void ShowInfo (const std::string &msg, const std::string &location="") const
 
void ShowTemplateInfo (const std::string &msg, const std::string &location="") const
 
void ShowWarning (const std::string &msg, const std::string &location="") const
 
void UnexpectedDecl (clang::Decl *D, const std::string &txt="") const
 unexpected - this kind of declaration is unexpected (in concrete place)
 
void UnimplementedDecl (clang::Decl *D, const std::string &txt="")
 information about item, that should be implemented
 
void UnimportantDecl (clang::Decl *D, const std::string &txt="") const
 unimportant - this kind of declaration is not stored into reflex
 
void UnknownDecl (clang::Decl *D, const std::string &txt="") const
 unknown - this kind of declaration was not known to programmer
 
void UnknownType (clang::QualType qual_type) const
 
void UnsupportedDecl (clang::Decl *D, const std::string &txt="") const
 unsupported - this kind of declaration is probably not used (in current version of C++)
 
void UnsupportedType (clang::QualType qual_type) const
 
unsigned int VarModifiers (clang::VarDecl *D) const
 
unsigned int Visibility (clang::Decl *D) const
 
unsigned int VisibilityModifiers (clang::AccessSpecifier access) const
 

Private Attributes

DeclsSelRulesMap_t fDeclSelRuleMap
 
bool fDeclTable [fgDeclLast+1]
 
bool fFirstPass
 
const cling::Interpreter & fInterpreter
 
clang::Decl * fLastDecl
 
ROOT::TMetaUtils::TNormalizedCtxtfNormCtxt
 
DeclCallback fRecordDeclCallback
 
EScanType fScanType
 
std::set< clang::RecordDecl * > fselectedRecordDecls
 
SelectionRulesfSelectionRules
 
const clang::SourceManager * fSourceManager
 
bool fTypeTable [fgTypeLast+1]
 
unsigned int fVerboseLevel
 

Static Private Attributes

static int fgAnonymousClassCounter = 0
 
static std::map< clang::Decl *, std::string > fgAnonymousClassMap
 
static int fgAnonymousEnumCounter = 0
 
static std::map< clang::Decl *, std::string > fgAnonymousEnumMap
 
static int fgBadClassCounter = 0
 
static const int fgDeclLast = clang::Decl::Var
 
static const int fgTypeLast = clang::Type::TemplateTypeParm
 

#include </home/sftnight/build/workspace/root-makedoc-master/rootspi/rdoc/src/master/core/dictgen/res/Scanner.h>

Inheritance diagram for RScanner:
[legend]

Member Typedef Documentation

◆ ClassColl_t

Definition at line 72 of file Scanner.h.

◆ DeclCallback

typedef void(* RScanner::DeclCallback) (const clang::RecordDecl *)

Definition at line 77 of file Scanner.h.

◆ DeclsSelRulesMap_t

typedef std::map<const clang::Decl*,const BaseSelectionRule*> RScanner::DeclsSelRulesMap_t

Definition at line 78 of file Scanner.h.

◆ EnumColl_t

typedef std::vector<const clang::EnumDecl*> RScanner::EnumColl_t

Definition at line 76 of file Scanner.h.

◆ FunctionColl_t

typedef std::vector<const clang::FunctionDecl*> RScanner::FunctionColl_t

Definition at line 74 of file Scanner.h.

◆ NamespaceColl_t

Definition at line 71 of file Scanner.h.

◆ TypedefColl_t

typedef std::vector<const clang::TypedefNameDecl*> RScanner::TypedefColl_t

Definition at line 73 of file Scanner.h.

◆ VariableColl_t

typedef std::vector<const clang::VarDecl*> RScanner::VariableColl_t

Definition at line 75 of file Scanner.h.

Member Enumeration Documentation

◆ EScanType

enum class RScanner::EScanType : char
strong
Enumerator
kNormal 
kTwoPasses 
kOnePCM 

Definition at line 80 of file Scanner.h.

Constructor & Destructor Documentation

◆ RScanner()

RScanner::RScanner ( SelectionRules rules,
EScanType  stype,
const cling::Interpreter &  interpret,
ROOT::TMetaUtils::TNormalizedCtxt normCtxt,
unsigned int  verbose = 0 
)

Regular constructor setting up the scanner to search for entities matching the 'rules'.

Definition at line 77 of file Scanner.cxx.

◆ ~RScanner()

RScanner::~RScanner ( )
virtual

Definition at line 105 of file Scanner.cxx.

Member Function Documentation

◆ AddAnnotatedRecordDecl()

int RScanner::AddAnnotatedRecordDecl ( const ClassSelectionRule selected,
const clang::Type *  req_type,
const clang::RecordDecl *  recordDecl,
const std::string &  attr_name,
const clang::TypedefNameDecl *  typedefNameDecl,
unsigned int  indexOffset = 0 
)
private

Definition at line 535 of file Scanner.cxx.

◆ AddDelayedAnnotatedRecordDecls()

void RScanner::AddDelayedAnnotatedRecordDecls ( )

Definition at line 815 of file Scanner.cxx.

◆ ConvTemplateArguments()

std::string RScanner::ConvTemplateArguments ( const clang::TemplateArgumentList &  list) const
private

◆ ConvTemplateName()

std::string RScanner::ConvTemplateName ( clang::TemplateName &  N) const
private

Definition at line 417 of file Scanner.cxx.

◆ ConvTemplateParameterList()

std::string RScanner::ConvTemplateParameterList ( clang::TemplateParameterList *  list) const
private

◆ ConvTemplateParams()

std::string RScanner::ConvTemplateParams ( clang::TemplateDecl *  D) const
private

◆ DeclInfo()

void RScanner::DeclInfo ( clang::Decl *  D) const
private

Definition at line 276 of file Scanner.cxx.

◆ ExprToStr()

std::string RScanner::ExprToStr ( clang::Expr *  expr) const
private

Definition at line 402 of file Scanner.cxx.

◆ FuncModifiers()

unsigned int RScanner::FuncModifiers ( clang::FunctionDecl *  D) const
private

◆ FuncParameterList()

std::string RScanner::FuncParameterList ( clang::FunctionDecl *  D) const
private

Definition at line 459 of file Scanner.cxx.

◆ FuncParameters()

std::string RScanner::FuncParameters ( clang::FunctionDecl *  D) const
private

Definition at line 432 of file Scanner.cxx.

◆ GetDeclName()

bool RScanner::GetDeclName ( clang::Decl *  D,
std::string &  name 
) const

Definition at line 984 of file Scanner.cxx.

◆ GetDeclQualName()

bool RScanner::GetDeclQualName ( const clang::Decl *  D,
std::string &  qual_name 
)
static

Definition at line 1000 of file Scanner.cxx.

◆ GetDeclsSelRulesMap()

const DeclsSelRulesMap_t & RScanner::GetDeclsSelRulesMap ( ) const
inline

Definition at line 125 of file Scanner.h.

◆ GetEnumName()

std::string RScanner::GetEnumName ( clang::EnumDecl *  D) const
private

Definition at line 378 of file Scanner.cxx.

◆ GetFunctionPrototype()

bool RScanner::GetFunctionPrototype ( clang::Decl *  D,
std::string &  prototype 
) const

Definition at line 1016 of file Scanner.cxx.

◆ GetLocation()

std::string RScanner::GetLocation ( clang::Decl *  D) const
private

Definition at line 235 of file Scanner.cxx.

◆ GetName()

std::string RScanner::GetName ( clang::Decl *  D) const
private

Definition at line 252 of file Scanner.cxx.

◆ GetSrcLocation()

std::string RScanner::GetSrcLocation ( clang::SourceLocation  L) const
private

Definition at line 225 of file Scanner.cxx.

◆ Scan()

void RScanner::Scan ( const clang::ASTContext &  C)

Definition at line 1052 of file Scanner.cxx.

◆ SetRecordDeclCallback()

RScanner::DeclCallback RScanner::SetRecordDeclCallback ( RScanner::DeclCallback  callback)

Set the callback to the RecordDecl and return the previous one.

Definition at line 1083 of file Scanner.cxx.

◆ shouldVisitDecl()

bool RScanner::shouldVisitDecl ( clang::NamedDecl *  D)
private

Whether we can actually visit this declaration, i.e.

if it is reachable via name lookup.

RScanner shouldn't touch decls for which this method returns false as we call Sema methods on those declarations. Those will fail in strange way as they assume those decls are already visible.

The main problem this is supposed to prevent is when we use C++ modules and have hidden declarations in our AST. Usually they can't be found as they are hidden from name lookup until their module is actually imported, but as the RecursiveASTVisitor is not supposed to be restricted by lookup limitations, it still reaches those hidden declarations.

Definition at line 122 of file Scanner.cxx.

◆ shouldVisitTemplateInstantiations()

bool RScanner::shouldVisitTemplateInstantiations ( ) const
inline

Definition at line 89 of file Scanner.h.

◆ ShowError()

void RScanner::ShowError ( const std::string &  msg,
const std::string &  location = "" 
) const
private

Definition at line 207 of file Scanner.cxx.

◆ ShowInfo()

void RScanner::ShowInfo ( const std::string &  msg,
const std::string &  location = "" 
) const
private

Definition at line 191 of file Scanner.cxx.

◆ ShowTemplateInfo()

void RScanner::ShowTemplateInfo ( const std::string &  msg,
const std::string &  location = "" 
) const
private

Definition at line 215 of file Scanner.cxx.

◆ ShowWarning()

void RScanner::ShowWarning ( const std::string &  msg,
const std::string &  location = "" 
) const
private

Definition at line 199 of file Scanner.cxx.

◆ TraverseClassTemplatePartialSpecializationDecl()

bool RScanner::TraverseClassTemplatePartialSpecializationDecl ( clang::ClassTemplatePartialSpecializationDecl *  )
inline

Definition at line 95 of file Scanner.h.

◆ TraverseDeclContextHelper()

bool RScanner::TraverseDeclContextHelper ( clang::DeclContext *  DC)

Definition at line 954 of file Scanner.cxx.

◆ TraverseStmt()

bool RScanner::TraverseStmt ( clang::Stmt *  )
inline

Definition at line 92 of file Scanner.h.

◆ TreatRecordDeclOrTypedefNameDecl()

bool RScanner::TreatRecordDeclOrTypedefNameDecl ( clang::TypeDecl *  typeDecl)

Definition at line 612 of file Scanner.cxx.

◆ UnexpectedDecl()

void RScanner::UnexpectedDecl ( clang::Decl *  D,
const std::string &  txt = "" 
) const
private

unexpected - this kind of declaration is unexpected (in concrete place)

Definition at line 298 of file Scanner.cxx.

◆ UnimplementedDecl()

void RScanner::UnimplementedDecl ( clang::Decl *  D,
const std::string &  txt = "" 
)
private

information about item, that should be implemented

Definition at line 327 of file Scanner.cxx.

◆ UnimportantDecl()

void RScanner::UnimportantDecl ( clang::Decl *  D,
const std::string &  txt = "" 
) const
private

unimportant - this kind of declaration is not stored into reflex

Definition at line 320 of file Scanner.cxx.

◆ UnknownDecl()

void RScanner::UnknownDecl ( clang::Decl *  D,
const std::string &  txt = "" 
) const
private

unknown - this kind of declaration was not known to programmer

Definition at line 287 of file Scanner.cxx.

◆ UnknownType()

void RScanner::UnknownType ( clang::QualType  qual_type) const
private

Definition at line 360 of file Scanner.cxx.

◆ UnsupportedDecl()

void RScanner::UnsupportedDecl ( clang::Decl *  D,
const std::string &  txt = "" 
) const
private

unsupported - this kind of declaration is probably not used (in current version of C++)

Definition at line 309 of file Scanner.cxx.

◆ UnsupportedType()

void RScanner::UnsupportedType ( clang::QualType  qual_type) const
private

Definition at line 369 of file Scanner.cxx.

◆ VarModifiers()

unsigned int RScanner::VarModifiers ( clang::VarDecl *  D) const
private

◆ Visibility()

unsigned int RScanner::Visibility ( clang::Decl *  D) const
private

◆ VisibilityModifiers()

unsigned int RScanner::VisibilityModifiers ( clang::AccessSpecifier  access) const
private

◆ VisitEnumDecl()

bool RScanner::VisitEnumDecl ( clang::EnumDecl *  D)

Definition at line 875 of file Scanner.cxx.

◆ VisitFieldDecl()

bool RScanner::VisitFieldDecl ( clang::FieldDecl *  D)

Nothing to be done here.

Definition at line 912 of file Scanner.cxx.

◆ VisitFunctionDecl()

bool RScanner::VisitFunctionDecl ( clang::FunctionDecl *  D)

Definition at line 934 of file Scanner.cxx.

◆ VisitNamespaceDecl()

bool RScanner::VisitNamespaceDecl ( clang::NamespaceDecl *  D)

This method visits a namespace node.

Definition at line 479 of file Scanner.cxx.

◆ VisitRecordDecl()

bool RScanner::VisitRecordDecl ( clang::RecordDecl *  D)

Definition at line 522 of file Scanner.cxx.

◆ VisitTypedefNameDecl()

bool RScanner::VisitTypedefNameDecl ( clang::TypedefNameDecl *  D)

Visitor for every TypedefNameDecl, i.e.

aliases and typedefs We check three conditions before trying to match the name: 1) If we are creating a big PCM 2) If the underlying decl is a RecordDecl 3) If the typedef is eventually contained in the std namespace

Definition at line 849 of file Scanner.cxx.

◆ VisitVarDecl()

bool RScanner::VisitVarDecl ( clang::VarDecl *  D)

Definition at line 893 of file Scanner.cxx.

Member Data Documentation

◆ fDeclSelRuleMap

DeclsSelRulesMap_t RScanner::fDeclSelRuleMap
private

Definition at line 201 of file Scanner.h.

◆ fDeclTable

bool RScanner::fDeclTable[fgDeclLast+1]
private

Definition at line 189 of file Scanner.h.

◆ fDelayedAnnotatedRecordDecls

std::vector<DelayedAnnotatedRecordDeclInfo> RScanner::fDelayedAnnotatedRecordDecls

Definition at line 140 of file Scanner.h.

◆ fFirstPass

bool RScanner::fFirstPass
private

Definition at line 200 of file Scanner.h.

◆ fgAnonymousClassCounter

int RScanner::fgAnonymousClassCounter = 0
staticprivate

Definition at line 193 of file Scanner.h.

◆ fgAnonymousClassMap

std::map< clang::Decl *, std::string > RScanner::fgAnonymousClassMap
staticprivate

Definition at line 175 of file Scanner.h.

◆ fgAnonymousEnumCounter

int RScanner::fgAnonymousEnumCounter = 0
staticprivate

Definition at line 194 of file Scanner.h.

◆ fgAnonymousEnumMap

std::map< clang::Decl *, std::string > RScanner::fgAnonymousEnumMap
staticprivate

Definition at line 176 of file Scanner.h.

◆ fgBadClassCounter

int RScanner::fgBadClassCounter = 0
staticprivate

Definition at line 195 of file Scanner.h.

◆ fgClangDeclKey

const char * RScanner::fgClangDeclKey = "ClangDecl"
static

Definition at line 122 of file Scanner.h.

◆ fgClangFuncKey

const char * RScanner::fgClangFuncKey = "ClangFunc"
static

Definition at line 123 of file Scanner.h.

◆ fgDeclLast

const int RScanner::fgDeclLast = clang::Decl::Var
staticprivate

Definition at line 187 of file Scanner.h.

◆ fgTypeLast

const int RScanner::fgTypeLast = clang::Type::TemplateTypeParm
staticprivate

Definition at line 188 of file Scanner.h.

◆ fInterpreter

const cling::Interpreter& RScanner::fInterpreter
private

Definition at line 186 of file Scanner.h.

◆ fLastDecl

clang::Decl* RScanner::fLastDecl
private

Definition at line 190 of file Scanner.h.

◆ fNormCtxt

ROOT::TMetaUtils::TNormalizedCtxt& RScanner::fNormCtxt
private

Definition at line 196 of file Scanner.h.

◆ fRecordDeclCallback

DeclCallback RScanner::fRecordDeclCallback
private

Definition at line 191 of file Scanner.h.

◆ fScanType

EScanType RScanner::fScanType
private

Definition at line 199 of file Scanner.h.

◆ fSelectedClasses

ClassColl_t RScanner::fSelectedClasses

Definition at line 128 of file Scanner.h.

◆ fSelectedEnums

EnumColl_t RScanner::fSelectedEnums

Definition at line 133 of file Scanner.h.

◆ fSelectedFunctions

FunctionColl_t RScanner::fSelectedFunctions

Definition at line 131 of file Scanner.h.

◆ fSelectedNamespaces

NamespaceColl_t RScanner::fSelectedNamespaces

Definition at line 129 of file Scanner.h.

◆ fselectedRecordDecls

std::set<clang::RecordDecl*> RScanner::fselectedRecordDecls
private

Definition at line 198 of file Scanner.h.

◆ fSelectedTypedefs

TypedefColl_t RScanner::fSelectedTypedefs

Definition at line 130 of file Scanner.h.

◆ fSelectedVariables

VariableColl_t RScanner::fSelectedVariables

Definition at line 132 of file Scanner.h.

◆ fSelectionRules

SelectionRules& RScanner::fSelectionRules
private

Definition at line 197 of file Scanner.h.

◆ fSourceManager

const clang::SourceManager* RScanner::fSourceManager
private

Definition at line 185 of file Scanner.h.

◆ fTypeTable

bool RScanner::fTypeTable[fgTypeLast+1]
private

Definition at line 192 of file Scanner.h.

◆ fVerboseLevel

unsigned int RScanner::fVerboseLevel
private

Definition at line 167 of file Scanner.h.

  • core/dictgen/res/Scanner.h
  • core/dictgen/src/Scanner.cxx