24#define fnmatch(glob, path, dummy) PathMatchSpecA(path, glob);
28#include "llvm/Support/raw_ostream.h"
29#include "clang/Basic/SourceLocation.h"
30#include "clang/Basic/SourceManager.h"
31#include "clang/AST/ASTContext.h"
32#include "clang/AST/DeclCXX.h"
33#include "clang/AST/DeclTemplate.h"
35#include "cling/Interpreter/Interpreter.h"
37const clang::CXXRecordDecl *
R__ScopeSearch(
const char *
name,
const clang::Type** resultType =
nullptr) ;
81 std::cout<<
"Printing Selection Rules:"<<std::endl;
86 std::cout<<
"\tClass sel rule "<<i<<
":"<<std::endl;
91 std::cout<<
"\tNo Class Selection Rules"<<std::endl;
96 std::list<FunctionSelectionRule>::const_iterator it2;
100 std::cout<<
"\tFunction sel rule "<<i<<
":"<<std::endl;
101 std::cout<<
"\t\tSelected: ";
102 switch(it2->GetSelected()){
109 default: std::cout<<
"Unspecified"<<std::endl;
111 it2->PrintAttributes(std::cout,2);
115 std::cout<<
"\tNo function sel rules"<<std::endl;
119 std::list<VariableSelectionRule>::const_iterator it3;
123 std::cout<<
"\tVariable sel rule "<<i<<
":"<<std::endl;
124 std::cout<<
"\t\tSelected: ";
125 switch(it3->GetSelected()){
132 default: std::cout<<
"Unspecified"<<std::endl;
134 it3->PrintAttributes(std::cout,2);
138 std::cout<<
"\tNo variable sel rules"<<std::endl;
142 std::list<EnumSelectionRule>::const_iterator it4;
146 std::cout<<
"\tEnum sel rule "<<i<<
":"<<std::endl;
147 std::cout<<
"\t\tSelected: ";
148 switch(it4->GetSelected()){
155 default: std::cout<<
"Unspecified"<<std::endl;
157 it4->PrintAttributes(std::cout,2);
161 std::cout<<
"\tNo enum sel rules"<<std::endl;
175 std::unordered_map<std::string,RULE*>& storedRules,
176 const std::string& attrName){
177 auto itRetCodePair = storedRules.emplace( attrName, rule );
179 auto storedRule = storedRules[attrName];
181 if (itRetCodePair.second ||
182 storedRule->GetSelected() != rule->GetSelected())
return false;
185 std::stringstream sstr; sstr <<
"Rule:\n";
187 sstr << (areEqual ?
"Identical " :
"Conflicting ");
188 sstr <<
"rule already stored:\n";
189 storedRule->Print(sstr);
191 "Duplicated rule found.\n%s",sstr.str().c_str());
195template<
class RULESCOLLECTION,
class RULE =
typename RULESCOLLECTION::value_type>
198 std::unordered_map<std::string, RULE*> patterns,names;
199 for (
auto&& rule : rules){
200 if (rule.HasAttributeName() &&
HasDuplicate(&rule,names,rule.GetAttributeName())) nDuplicates++;
201 if (rule.HasAttributePattern() &&
HasDuplicate(&rule,patterns,rule.GetAttributePattern())) nDuplicates++;
213 if (0 != nDuplicates){
215 "Duplicates in rules were found.\n");
228 if ((nAttrsPattern != 1 || nAttrsName !=1) &&
237 auto implies = 0 == fnmatch(pattern,
name, FNM_PATHNAME);
240 static const auto msg =
"The pattern rule %s matches the name rule %s. "
241 "Since the name rule has compatible attributes, "
242 "it will be removed: the pattern rule will match the necessary classes if needed.\n";
261 if (rule.HasAttributeName()) {
262 for (
auto&& intRule : selectionRules){
263 if (intRule.HasAttributePattern() &&
Implies(intRule, rule)) {
275 std::string qual_name;
282 std::string qual_name;
289 std::string qual_name;
306#if defined(R__MUST_REVISIT)
307# if R__MUST_REVISIT(6,4)
308 "Can become no-op once PCMs are available."
312 std::string str_name;
313 std::string qual_name;
336 std::string qual_name;
351 std::string str_name;
352 std::string qual_name;
362 std::string qual_name;
376 clang::Decl::Kind declkind = D->getKind();
379 case clang::Decl::CXXRecord:
380 case clang::Decl::ClassTemplateSpecialization:
381 case clang::Decl::ClassTemplatePartialSpecialization:
384 case clang::Decl::Namespace:
386 case clang::Decl::Enum:
389 case clang::Decl::Var:
391#if ROOTCLING_NEEDS_FUNCTIONS_SELECTION
392 case clang::Decl::Function:
394 case clang::Decl::CXXMethod:
395 case clang::Decl::CXXConstructor:
396 case clang::Decl::CXXDestructor: {
402 std::string str_name;
403 std::string qual_name;
411 case clang::Decl::Field:
427 const clang::NamedDecl*
N = llvm::dyn_cast<clang::NamedDecl> (D);
433 if (
N->getIdentifier()) {
434 name =
N->getNameAsString();
436 else if (
N->isCXXClassMember()) {
437 name =
N->getNameAsString();
439 llvm::raw_string_ostream stream(qual_name);
440 N->getNameForDiagnostic(stream,
N->getASTContext().getPrintingPolicy(),
true);
446 const clang::NamedDecl*
N =
static_cast<const clang::NamedDecl*
> (D);
447 llvm::raw_string_ostream stream(qual_name);
449 N->getNameForDiagnostic(stream,
N->getASTContext().getPrintingPolicy(),
true);
459 const std::vector<std::string> quals={
"*",
"&"};
464 for (
auto I =
F->param_begin(), E =
F->param_end();
I != E; ++
I) {
466 clang::ParmVarDecl* P = *
I;
480 for (
auto& qual : quals){
481 auto pos =
type.find(
" "+qual);
482 if (pos != std::string::npos)
483 type.replace( pos, 2, qual );
493 prototype =
"(" + prototype +
")";
504 if (
const clang::TagDecl *T = llvm::dyn_cast<clang::TagDecl>(
505 D->getDeclContext()))
506 return T->isClass() || T->isStruct();
513 if (
const clang::TagDecl* parent
514 = llvm::dyn_cast<clang::TagDecl>(D->getDeclContext())) {
515 if (parent->isClass()|| parent->isStruct()) {
516 GetDeclName(parent, parent_name, parent_qual_name);
525 if (
const clang::RecordDecl* parent
526 = llvm::dyn_cast<clang::RecordDecl>(D->getDeclContext())) {
527 GetDeclName(parent, parent_name, parent_qual_name);
573 const clang::NamespaceDecl*
N = llvm::dyn_cast<clang::NamespaceDecl> (D);
575 std::cout<<
"\n\tCouldn't cast Decl to NamespaceDecl";
587 std::string name_value;
588 std::string pattern_value;
601 explicit_selector = &(*it);
604 if (it->GetAttributeValue(
"pattern", pattern_value) &&
605 pattern_value !=
"*" && pattern_value !=
"*::*") specific_pattern_selector = &(*it);
614#ifdef SELECTION_DEBUG
615 std::cout<<
"\tNo returned"<<std::endl;
623 if (it->GetAttributeValue(
"pattern", pattern_value) &&
624 (pattern_value ==
"*" || pattern_value ==
"*::*")) ++fImplNo;
633#ifdef SELECTION_DEBUG
634 std::cout<<
"Empty dontC returned = No"<<std::endl;
644#ifdef SELECTION_DEBUG
645 std::cout<<
"\n\tfYes = "<<fYes<<
", fImplNo = "<<fImplNo<<std::endl;
648 if (explicit_selector)
return explicit_selector;
649 else if (specific_pattern_selector)
return specific_pattern_selector;
650 else if (fImplNo > 0)
return nullptr;
651 else return selector;
656#ifdef SELECTION_DEBUG
657 std::cout<<
"\n\tfYes = "<<fYes<<
", fFileNo = "<<fFileNo<<std::endl;
671 const clang::TagDecl* tagDecl = llvm::dyn_cast<clang::TagDecl> (D);
672 const clang::TypedefNameDecl* typeDefNameDecl = llvm::dyn_cast<clang::TypedefNameDecl> (D);
674 if (!tagDecl && !typeDefNameDecl) {
676 "Cannot cast Decl to TagDecl and Decl is not a typedef.\n");
680 if (!tagDecl && typeDefNameDecl){
684 "Cannot get RecordDecl behind TypedefDecl.\n");
687 tagDecl = recordDecl;
692 if (!( isLinkDefFile || tagDecl->isClass() || tagDecl->isStruct() ))
701 bool earlyReturn=
false;
703 const clang::NamedDecl* nDecl(llvm::dyn_cast<clang::NamedDecl>(D));
705 if (!includeTypedefRule && rule.IsFromTypedef())
710 if (
const clang::ClassTemplateSpecializationDecl* ctsd =
711 llvm::dyn_cast_or_null<clang::ClassTemplateSpecializationDecl>(D))
712 if(
const clang::ClassTemplateDecl* ctd = ctsd->getSpecializedTemplate()){
713 const std::string& nArgsToKeep = rule.GetAttributeNArgsToKeep();
714 if (!nArgsToKeep.empty()){
716 std::atoi(nArgsToKeep.c_str()));
720 if (earlyReturn)
continue;
729 explicit_selector = &(rule);
733 if (!pattern_value.empty() &&
734 pattern_value !=
"*" &&
735 pattern_value !=
"*::*") specific_pattern_selector = &(rule);
740 if (!isLinkDefFile) {
750 const std::string& pattern_value=rule.GetAttributePattern();
751 if (!pattern_value.empty() &&
752 (pattern_value ==
"*" || pattern_value ==
"*::*")) ++fImplNo;
765 if (earlyReturn)
return retval;
769 if (explicit_selector)
return explicit_selector;
770 else if (specific_pattern_selector)
return specific_pattern_selector;
771 else if (fImplNo > 0)
return nullptr;
772 else return selector;
791 for(; it != it_end; ++it) {
809 D->getPrimaryTemplate() !=
nullptr ||
810 llvm::isa<clang::CXXMethodDecl>(D))
return nullptr;
812 std::string prototype;
814 prototype = qual_name + prototype;
863 std::string name_value;
864 std::string pattern_value;
867 = selRule.
Match(llvm::dyn_cast<clang::NamedDecl>(D), qual_name,
"",
false);
873 explicit_selector = &selRule;
875 if (selRule.GetAttributeValue(
"pattern", pattern_value)) {
876 explicit_selector=&selRule;
886 if (selRule.GetAttributeValue(
"pattern", pattern_value)) {
887 if (pattern_value ==
"*" || pattern_value ==
"*::*") ++fImplNo;
900#ifdef SELECTION_DEBUG
901 std::cout<<
"\n\tfYes = "<<fYes<<
", fImplNo = "<<fImplNo<<std::endl;
904 if (explicit_selector)
return explicit_selector;
905 else if (fImplNo > 0)
return nullptr;
906 else return selector;
917 D->getPrimaryTemplate() !=
nullptr ||
918 llvm::isa<clang::CXXMethodDecl>(D))
return nullptr;
920 std::string prototype;
923 prototype = qual_name + prototype;
929 std::string pattern_value;
932 = selRule.
Match(llvm::dyn_cast<clang::NamedDecl>(D), qual_name, prototype,
false);
938 explicit_selector = &selRule;
940 if (selRule.GetAttributeValue(
"pattern", pattern_value)) {
941 explicit_selector = &selRule;
951 if (selRule.GetAttributeValue(
"pattern", pattern_value)) {
952 if (pattern_value ==
"*" || pattern_value ==
"*::*") ++fImplNo;
964 if (explicit_selector)
return explicit_selector;
965 else if (fImplNo > 0)
return nullptr;
966 else return selector;
975 std::list<VariableSelectionRule>::const_iterator it;
976 std::list<VariableSelectionRule>::const_iterator it_end;
985 std::string name_value;
986 std::string pattern_value;
987 for(; it != it_end; ++it) {
989 it->
Match(llvm::dyn_cast<clang::NamedDecl>(D), qual_name,
"",
false);
995 explicit_selector = &(*it);
997 it->GetAttributeValue(
"pattern", pattern_value)) {
999 if (pattern_value !=
"*" && pattern_value !=
"*::*") explicit_selector = &(*it);
1006 if (it->GetAttributeValue(
"pattern", pattern_value)) {
1007 if (pattern_value ==
"*" || pattern_value ==
"*::*") ++fImplNo;
1020#ifdef SELECTION_DEBUG
1021 std::cout<<
"\n\tfYes = "<<fYes<<
", fImplNo = "<<fImplNo<<std::endl;
1024 if (explicit_selector)
return explicit_selector;
1025 else if (fImplNo > 0)
return nullptr;
1026 else return selector;
1050 std::string prototype;
1052 if (
const clang::FunctionDecl*
F = llvm::dyn_cast<clang::FunctionDecl> (D))
1054 prototype = qual_name + prototype;
1056#ifdef SELECTION_DEBUG
1057 std::cout<<
"\tFunction prototype = "<<prototype<<std::endl;
1060 int impl_r_No = 0, impl_rr_No = 0;
1065 if (D->getKind() == clang::Decl::CXXMethod){
1067 std::string pat_value;
1068 for(; it != it_end; ++it) {
1070 = it->
Match(llvm::dyn_cast<clang::NamedDecl>(D), qual_name, prototype,
false);
1075 explicit_r = &(*it);
1078#ifdef SELECTION_DEBUG
1079 std::cout<<
"\tExplicit rule BaseSelectionRule::kNo found"<<std::endl;
1087 if (it->GetAttributeValue(
"pattern", pat_value)) {
1088 if (pat_value ==
"*")
continue;
1090 std::string par_name, par_qual_name;
1092 std::string par_pat = par_qual_name +
"::*";
1094 if (pat_value == par_pat) {
1095 implicit_rr = &(*it);
1098#ifdef SELECTION_DEBUG
1099 std::cout<<
"Implicit_rr rule ("<<pat_value<<
"), selected = "<<selected<<std::endl;
1105#ifdef SELECTION_DEBUG
1106 std::cout<<
"Implicit_rr rule ("<<pat_value<<
"), selected = "<<selected<<std::endl;
1113 implicit_r = &(*it);
1116#ifdef SELECTION_DEBUG
1117 std::cout<<
"Implicit_r rule ("<<pat_value<<
"), selected = "<<selected<<std::endl;
1123#ifdef SELECTION_DEBUG
1124 std::cout<<
"Implicit_r rule ("<<pat_value<<
"), selected = "<<selected<<std::endl;
1136#ifdef SELECTION_DEBUG
1137 std::cout<<
"\tExplicit rule BaseSelectionRule::BaseSelectionRule::kYes found"<<std::endl;
1142 else if (implicit_rr) {
1143 if (impl_rr_No > 0) {
1145#ifdef SELECTION_DEBUG
1146 std::cout<<
"\tImplicit_rr rule BaseSelectionRule::kNo found"<<std::endl;
1153#ifdef SELECTION_DEBUG
1154 std::cout<<
"\tImplicit_rr rule BaseSelectionRule::kYes found"<<std::endl;
1160 else if (implicit_r) {
1161 if (impl_r_No > 0) {
1163#ifdef SELECTION_DEBUG
1164 std::cout<<
"\tImplicit_r rule BaseSelectionRule::kNo found"<<std::endl;
1171#ifdef SELECTION_DEBUG
1172 std::cout<<
"\tImplicit_r rule BaseSelectionRule::kYes found"<<std::endl;
1180#ifdef SELECTION_DEBUG
1181 std::cout<<
"\tChecking parent class rules"<<std::endl;
1186 std::string parent_name, parent_qual_name;
1187 if (!
GetParentName(D, parent_name, parent_qual_name))
return nullptr;
1197 std::string name_value;
1198 std::string pattern_value;
1201 = it->
Match(llvm::dyn_cast<clang::NamedDecl>(D), parent_qual_name,
"",
true);
1208 explicit_selector = &(*it);
1210 if (it->GetAttributeValue(
"pattern", pattern_value)) {
1212 if (pattern_value !=
"*" && pattern_value !=
"*::*") explicit_selector = &(*it);
1218 if (it->GetAttributeValue(
"pattern", pattern_value)) {
1219 if (pattern_value ==
"*" || pattern_value ==
"*::*") ++fImplNo;
1229#ifdef SELECTION_DEBUG
1230 std::cout<<
"\n\tfYes = "<<fYes<<
", fImplNo = "<<fImplNo<<std::endl;
1233 if (explicit_selector) {
1235#ifdef SELECTION_DEBUG
1236 std::cout<<
"\tReturning Yes"<<std::endl;
1239 return explicit_selector;
1241 else if (fImplNo > 0) {
1242#ifdef SELECTION_DEBUG
1243 std::cout<<
"\tReturning No"<<std::endl;
1250#ifdef SELECTION_DEBUG
1251 std::cout<<
"\tReturning Yes"<<std::endl;
1264 std::string parent_name;
1265 std::string parent_qual_name;
1269 if (!
GetParentName(D, parent_name, parent_qual_name))
return nullptr;
1277 std::string name_value;
1278 std::string pattern_value;
1281 = it->
Match(llvm::dyn_cast<clang::NamedDecl>(D), parent_qual_name,
"",
false);
1288 explicit_selector = &(*it);
1290 if (it->GetAttributeValue(
"pattern", pattern_value)) {
1292 if (pattern_value !=
"*" && pattern_value !=
"*::*") explicit_selector = &(*it);
1300#ifdef SELECTION_DEBUG
1301 std::cout<<
"\tNo returned"<<std::endl;
1309 if (pattern_value ==
"*" || pattern_value ==
"*::*") ++fImplNo;
1319 if (!it->HasMethodSelectionRules() && !it->HasFieldSelectionRules()) {
1321#ifdef SELECTION_DEBUG
1322 std::cout<<
"\tNo fields and methods"<<std::endl;
1328 clang::Decl::Kind kind = D->getKind();
1329 if (kind == clang::Decl::Field || kind == clang::Decl::CXXMethod || kind == clang::Decl::CXXConstructor || kind == clang::Decl::CXXDestructor){
1330 std::list<VariableSelectionRule> members;
1331 std::list<VariableSelectionRule>::iterator mem_it;
1332 std::list<VariableSelectionRule>::iterator mem_it_end;
1333 std::string prototype;
1335 if (kind == clang::Decl::Field) {
1336 members = it->GetFieldSelectionRules();
1339 if (
const clang::FunctionDecl*
F = llvm::dyn_cast<clang::FunctionDecl> (D)){
1341 prototype = str_name + prototype;
1346 members = it->GetMethodSelectionRules();
1348 mem_it = members.begin();
1349 mem_it_end = members.end();
1350 for (; mem_it != mem_it_end; ++mem_it) {
1363#ifdef SELECTION_DEBUG
1364 std::cout<<
"\n\tfYes = "<<fYes<<
", fImplNo = "<<fImplNo<<std::endl;
1367 if (explicit_selector) {
1368#ifdef SELECTION_DEBUG
1369 std::cout<<
"\tReturning Yes"<<std::endl;
1372 return explicit_selector;
1374 else if (fImplNo > 0) {
1376#ifdef SELECTION_DEBUG
1377 std::cout<<
"\tReturning No"<<std::endl;
1384#ifdef SELECTION_DEBUG
1385 std::cout<<
"\tReturning Yes"<<std::endl;
1405 if (rule.GetAttributeValue(
"pattern",
name)) {
1407 }
else if (rule.GetAttributeValue(
"name",
name)) {
1412 std::string file_name_value;
1413 if (!rule.GetAttributeValue(
"file_name", file_name_value)) file_name_value.clear();
1415 if (!file_name_value.empty()) {
1420 const char* attrName =
"class";
1421 const char* attrVal =
nullptr;
1422 if (!
name.empty()) attrVal =
name.c_str();
1431 if (rule.GetAttributeValue(
"pattern",
name)) {
1433 }
else if (rule.GetAttributeValue(
"name",
name)) {
1440 rule.PrintAttributes(std::cout,3);
1445#if defined(R__MUST_REVISIT)
1446#if R__MUST_REVISIT(6,2)
1448"Warnings concerning non matching selection rules are suppressed. An action is to be taken.\n");
1482#if Enums_rules_becomes_useful_for_rootcling
1486 if (rule.GetAttributeValue(
"pattern",
name)) {
1488 }
else if (rule.GetAttributeValue(
"name",
name)) {
1497 rule.PrintAttributes(std::cout,3);
1512 if (it->HasAttributeWithName(
"name")) {
1513 std::string name_value;
1514 it->GetAttributeValue(
"name", name_value);
1516 const clang::Type *typeptr =
nullptr;
1517 const clang::CXXRecordDecl *
target
1521 it->SetCXXRecordDecl(
target,typeptr);
const clang::CXXRecordDecl * R__ScopeSearch(const char *name, const clang::Type **resultType=nullptr)
static bool Implies(const ClassSelectionRule &patternRule, const ClassSelectionRule &nameRule)
static bool HasDuplicate(RULE *rule, std::unordered_map< std::string, RULE * > &storedRules, const std::string &attrName)
static int CheckDuplicatesImp(RULESCOLLECTION &rules)
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t target
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
const std::string & GetAttributePattern() const
bool HasInterpreter() const
EMatchType Match(const clang::NamedDecl *decl, const std::string &name, const std::string &prototype, bool isLinkdef) const
const std::string & GetAttributeName() const
const AttributesMap_t & GetAttributes() const
ESelect GetSelected() const
const BaseSelectionRule * IsLinkdefVarSelected(const clang::VarDecl *D, const std::string &qual_name) const
void GetDeclQualName(const clang::Decl *D, std::string &qual_name) const
const BaseSelectionRule * IsVarSelected(const clang::VarDecl *D, const std::string &qual_name) const
const BaseSelectionRule * IsFunSelected(const clang::FunctionDecl *D, const std::string &qual_name) const
void AddVariableSelectionRule(const VariableSelectionRule &varSel)
void AddClassSelectionRule(const ClassSelectionRule &classSel)
std::list< VariableSelectionRule > fVariableSelectionRules
List of the global variables selection rules.
bool AreAllSelectionRulesUsed() const
bool GetFunctionPrototype(const clang::FunctionDecl *F, std::string &prototype) const
bool SearchNames(cling::Interpreter &interp)
bool GetParentName(const clang::Decl *D, std::string &parent_name, std::string &parent_qual_name) const
std::list< FunctionSelectionRule > fFunctionSelectionRules
List of the global functions selection rules.
const BaseSelectionRule * IsLinkdefFunSelected(const clang::FunctionDecl *D, const std::string &qual_name) const
std::list< EnumSelectionRule > fEnumSelectionRules
List of the enums selection rules.
void PrintSelectionRules() const
bool GetHasFileNameRule() const
ROOT::TMetaUtils::TNormalizedCtxt & fNormCtxt
bool IsLinkdefFile() const
bool GetDeclName(const clang::Decl *D, std::string &name, std::string &qual_name) const
void AddEnumSelectionRule(const EnumSelectionRule &enumSel)
const BaseSelectionRule * IsMemberSelected(const clang::Decl *D, const std::string &str_name) const
bool IsSelectionXMLFile() const
void ClearSelectionRules()
bool IsParentClass(const clang::Decl *D) const
const BaseSelectionRule * IsLinkdefEnumSelected(const clang::EnumDecl *D, const std::string &qual_name) const
void AddFunctionSelectionRule(const FunctionSelectionRule &funcSel)
const BaseSelectionRule * IsEnumSelected(const clang::EnumDecl *D, const std::string &qual_name) const
const ClassSelectionRule * IsDeclSelected(const clang::RecordDecl *D, bool includeTypedefRule) const
const ClassSelectionRule * IsNamespaceSelected(const clang::Decl *D, const std::string &qual_name) const
std::list< ClassSelectionRule > fClassSelectionRules
List of the class selection rules.
cling::Interpreter & fInterp
const BaseSelectionRule * IsLinkdefMethodSelected(const clang::Decl *D, const std::string &qual_name) const
const ClassSelectionRule * IsClassSelected(const clang::Decl *D, const std::string &qual_name, bool includeTypedefRule) const
bool areEqual(const RULE *r1, const RULE *r2, bool moduloNameOrPattern=false)