14#include "cling/Interpreter/Interpreter.h" 
   15#include "cling/Interpreter/LookupHelper.h" 
   17#include "clang/AST/DeclTemplate.h" 
   21   cling::Interpreter::PushTransactionRAII RAII(
fInterp);
 
   37   if (
auto *NSD = llvm::dyn_cast<clang::NamespaceDecl>(*fDeclIter)) {
 
   38      if (NSD->isInlineNamespace() || NSD->isAnonymousNamespace()) {
 
   41         fContexts.push_back(NSD);
 
   44   } 
else if (
auto *ED = llvm::dyn_cast<clang::EnumDecl>(*fDeclIter)) {
 
   45      if (!ED->isScoped()) {
 
   47         fContexts.push_back(ED);
 
   50   } 
else if (
auto *RD = llvm::dyn_cast<clang::RecordDecl>(*fDeclIter)) {
 
   51      if (RD->isAnonymousStructOrUnion()) {
 
   53         fContexts.push_back(RD);
 
   65   while (HandleInlineDeclContext())
 
   75   while (fDeclIter == fContexts[fDCIdx]->decls_end()) {
 
   77      if (fDCIdx == fContexts.size())
 
   79      cling::Interpreter::PushTransactionRAII RAII(fInterp);
 
   80      fDeclIter = fContexts[fDCIdx]->decls_begin();
 
   88   return AdvanceToFirstValidDecl();
 
   94   cling::Interpreter::PushTransactionRAII RAII(interp);
 
  102      if (Iter() == End()) {
 
  104         fUsingIterStack.pop();
 
  105         if (fUsingIterStack.empty())
 
  110      if (
auto *UD = llvm::dyn_cast<clang::UsingDecl>(Iter()->getTargetDecl())) {
 
  111         if (UD->shadow_size()) {
 
  112            cling::Interpreter::PushTransactionRAII RAII(fInterp);
 
  113            fUsingIterStack.push({UD});
 
  125   fTemplateSpec = 
nullptr;
 
  127      const clang::Decl *D = Get();
 
  128      if (
auto *UD = llvm::dyn_cast<clang::UsingDecl>(D)) {
 
  129         if (UD->shadow_size()) {
 
  130            assert(!fUsingDeclIter.IsValid() && 
"Expected UsingDecl to be already handled by UsingDeclIter!");
 
  136      if (
auto *USD = llvm::dyn_cast<clang::UsingShadowDecl>(D)) {
 
  137         if (!ShouldSkip(USD))
 
  139      } 
else if (
auto *RTD = llvm::dyn_cast<clang::RedeclarableTemplateDecl>(D)) {
 
  140         if (
const clang::Decl *DInst = InstantiateTemplateWithDefaults(RTD)) {
 
  141            fTemplateSpec = DInst;
 
  144      } 
else if (!ShouldSkip(D))
 
  148      if (!AdvanceUnfiltered())
 
llvm::SmallVector< clang::DeclContext *, 2 > fContexts
bool AdvanceToFirstValidDecl()
Do not return inline namespaces etc.
cling::Interpreter * fInterp
bool IterNext()
Increment the iterator, possibly moving to the next context.
clang::DeclContext::decl_iterator fDeclIter
bool HandleInlineDeclContext()
Return true if fDeclIter has triggered an inline or anonymous namespace / ... to be appended to fCont...
std::stack< UsingDeclFrame > fUsingIterStack
Handle nested UsingDecls: