16#include "cling/Interpreter/DynamicLibraryManager.h"
17#include "cling/Interpreter/Interpreter.h"
18#include "cling/Interpreter/InterpreterCallbacks.h"
19#include "cling/Interpreter/Transaction.h"
20#include "cling/Utils/AST.h"
22#include "clang/AST/ASTConsumer.h"
23#include "clang/AST/ASTContext.h"
24#include "clang/AST/DeclBase.h"
25#include "clang/AST/DeclTemplate.h"
26#include "clang/AST/GlobalDecl.h"
27#include "clang/Frontend/CompilerInstance.h"
28#include "clang/Lex/HeaderSearch.h"
29#include "clang/Lex/PPCallbacks.h"
30#include "clang/Lex/Preprocessor.h"
31#include "clang/Parse/Parser.h"
32#include "clang/Sema/Lookup.h"
33#include "clang/Sema/Scope.h"
34#include "clang/Serialization/ASTReader.h"
35#include "clang/Serialization/GlobalModuleIndex.h"
37#include "llvm/ExecutionEngine/Orc/Core.h"
39#include "llvm/Support/Error.h"
40#include "llvm/Support/FileSystem.h"
41#include "llvm/Support/Path.h"
42#include "llvm/Support/Process.h"
70 std::string &args, std::string &io, std::string &fname);
74 llvm::StringRef canonicalName);
76 llvm::StringRef canonicalName);
94 StringRef
getName()
const override {
return "<Symbols from Autoloaded Library>"; }
96 void materialize(std::unique_ptr<llvm::orc::MaterializationResponsibility>
R)
override
99 R->failMaterialization();
103 llvm::orc::SymbolMap loadedSymbols;
104 llvm::orc::SymbolNameSet failedSymbols;
105 bool loadedLibrary =
false;
108 std::string symbolStr = (*symbol).str();
112 void *addr = llvm::sys::DynamicLibrary::SearchForAddressOfSymbol(nameForDlsym);
114 if (!addr && !loadedLibrary) {
122 loadedLibrary =
true;
124 addr = llvm::sys::DynamicLibrary::SearchForAddressOfSymbol(nameForDlsym);
128 loadedSymbols[symbol] =
129 llvm::JITEvaluatedSymbol(llvm::pointerToJITTargetAddress(addr), llvm::JITSymbolFlags::Exported);
134 failedSymbols.insert(symbol);
138 if (!failedSymbols.empty()) {
139 auto failingMR =
R->delegate(failedSymbols);
141 (*failingMR)->failMaterialization();
145 if (!loadedSymbols.empty()) {
146 llvm::cantFail(
R->notifyResolved(loadedSymbols));
147 llvm::cantFail(
R->notifyEmitted());
151 void discard(
const llvm::orc::JITDylib &JD,
const llvm::orc::SymbolStringPtr &Name)
override {}
156 llvm::orc::SymbolFlagsMap map;
157 for (
auto symbolName : Symbols)
158 map[symbolName] = llvm::JITSymbolFlags::Exported;
170 llvm::Error
tryToGenerate(llvm::orc::LookupState &LS, llvm::orc::LookupKind K, llvm::orc::JITDylib &JD,
171 llvm::orc::JITDylibLookupFlags JDLookupFlags,
172 const llvm::orc::SymbolLookupSet &Symbols)
override
175 llvm::Error::success();
181 std::unordered_map<std::string, llvm::orc::SymbolNameVector> found;
182 llvm::orc::SymbolNameSet missing;
187 for (
auto &&KV : Symbols) {
188 llvm::orc::SymbolStringPtr
name = KV.first;
190 const cling::DynamicLibraryManager &DLM = *
fInterpreter->getDynamicLibraryManager();
192 std::string libName = DLM.searchLibrariesForSymbol((*name).str(),
196 assert(libName.find(
"/libNew.") == std::string::npos &&
"We must not autoload libNew!");
202 assert(libName.find(
"/libCling.") == std::string::npos &&
"Must not autoload libCling!");
205 missing.insert(
name);
207 found[libName].push_back(
name);
210 for (
auto &&KV : found) {
211 auto MU = std::make_unique<AutoloadLibraryMU>(
fCallbacks, KV.first, std::move(KV.second));
212 if (
auto Err = JD.define(MU))
216 if (!missing.empty())
217 return llvm::make_error<llvm::orc::SymbolsNotFound>(std::move(missing));
219 return llvm::Error::success();
226 Transaction* T =
nullptr;
227 m_Interpreter->declare(
"namespace __ROOT_SpecialObjects{}", &T);
230 interp->addGenerator(std::make_unique<AutoloadLibraryGenerator>(interp, *
this));
238 const clang::Token &,
239 llvm::StringRef FileName,
241 clang::CharSourceRange ,
242 const clang::FileEntry *FE,
245 const clang::Module * Imported,
246 clang::SrcMgr::CharacteristicKind FileType) {
248 Sema &SemaR = m_Interpreter->getSema();
251 if (!SemaR.isModuleVisible(Imported))
253 "Module %s resolved but not visible!", Imported->Name.c_str());
269 bool isHeaderFile = FileName.endswith(
".h") || FileName.endswith(
".hxx") || FileName.endswith(
".hpp");
273 std::string localString(FileName.str());
275 DeclarationName Name = &SemaR.getASTContext().Idents.get(localString.c_str());
276 LookupResult RHeader(SemaR, Name, sLoc, Sema::LookupOrdinaryName);
283 bool permanent,
bool resolved) {
291 llvm::SmallVectorImpl<char> &RecoveryPath) {
299 Preprocessor& PP = m_Interpreter->getCI()->getPreprocessor();
302 std::string
filename(FileName.str().substr(0,FileName.str().find_last_of(
'"')));
303 std::string fname,
mode, arguments, io;
306 if (
mode.length() > 0) {
307 if (llvm::sys::fs::exists(fname)) {
309 std::string options =
"k";
310 if (
mode.find(
"++") != std::string::npos) options +=
"f";
311 if (
mode.find(
"g") != std::string::npos) options +=
"g";
312 if (
mode.find(
"O") != std::string::npos) options +=
"O";
315 Preprocessor::CleanupAndRestoreCacheRAII cleanupRAII(PP);
316 Parser& P =
const_cast<Parser&
>(m_Interpreter->getParser());
318 clang::Parser::ParserCurTokRestoreRAII fSavedCurToken(P);
322 Token& Tok =
const_cast<Token&
>(P.getCurToken());
323 Tok.setKind(tok::semi);
335 Sema& SemaR = m_Interpreter->getSema();
336 ASTContext& C = SemaR.getASTContext();
337 Sema::ContextAndScopeRAII pushedDCAndS(SemaR, C.getTranslationUnitDecl(),
344 fPPOldFlag = PP.GetSuppressIncludeNotFoundError();
345 PP.SetSuppressIncludeNotFoundError(
true);
354 PP.SetSuppressIncludeNotFoundError(
fPPOldFlag);
365 DeclContext* DC = S->getEntity();
374 clang::DeclContext* MaybeTU = DC;
375 while (MaybeTU && !isa<TranslationUnitDecl>(MaybeTU)) {
377 MaybeTU = MaybeTU->getParent();
379 return isa<FunctionDecl>(DC);
397 if (m_Interpreter->getSema().getDiagnostics().hasErrorOccurred())
435 llvm::Optional<std::string> envUseGMI = llvm::sys::Process::GetEnv(
"ROOT_USE_GMI");
436 if (envUseGMI.hasValue())
440 const CompilerInstance *CI = m_Interpreter->getCI();
441 const LangOptions &LangOpts = CI->getPreprocessor().getLangOpts();
443 if (!LangOpts.Modules)
447 if (LangOpts.isCompilingModule())
457 Sema &SemaR = m_Interpreter->getSema();
458 if (SemaR.InstantiatingSpecializations.size() > 0)
461 GlobalModuleIndex *Index = CI->getASTReader()->getGlobalIndex();
467 GlobalModuleIndex::FileNameHitSet FoundModules;
471 if (Index->lookupIdentifier(Name.getAsString(), FoundModules)) {
472 for (llvm::StringRef FileName : FoundModules) {
473 StringRef ModuleName = llvm::sys::path::stem(FileName);
478 llvm::errs() <<
"Module '" << ModuleName <<
"' already loaded"
479 <<
" for '" << Name.getAsString() <<
"'\n";
485 llvm::errs() <<
"Loading '" << ModuleName <<
"' on demand"
486 <<
" for '" << Name.getAsString() <<
"'\n";
488 m_Interpreter->loadModule(ModuleName.str());
491 if (loadFirstMatchOnly)
511 if (
Name.getNameKind() != DeclarationName::Identifier)
514 Sema &SemaR = m_Interpreter->getSema();
515 auto *D = cast<Decl>(DC);
516 SourceLocation Loc = D->getLocation();
517 if (Loc.isValid() && SemaR.getSourceManager().isInSystemHeader(Loc)) {
526 NamespaceDecl* NSD = dyn_cast<NamespaceDecl>(
const_cast<DeclContext*
>(DC));
537 const DeclContext* primaryDC = NSD->getPrimaryContext();
541 LookupResult
R(SemaR, Name, SourceLocation(), Sema::LookupOrdinaryName);
542 R.suppressDiagnostics();
545 = NSD->getQualifiedNameAsString() +
"::" +
Name.getAsString();
551 clang::Scope
S(SemaR.TUScope, clang::Scope::DeclScope, SemaR.getDiagnostics());
552 S.setEntity(
const_cast<DeclContext*
>(DC));
553 Sema::ContextAndScopeRAII pushedDCAndS(SemaR,
const_cast<DeclContext*
>(DC), &S);
556 llvm::SmallVector<NamedDecl*, 4> lookupResults;
557 for(LookupResult::iterator
I =
R.begin(), E =
R.end();
I <
E; ++
I)
558 lookupResults.push_back(*
I);
559 UpdateWithNewDecls(DC, Name, llvm::makeArrayRef(lookupResults.data(),
560 lookupResults.size()));
581 Sema &SemaR = m_Interpreter->getSema();
583 SourceLocation Loc = Tag->getLocation();
584 if (SemaR.getSourceManager().isInSystemHeader(Loc)) {
590 for (
auto ReRD: Tag->redecls()) {
592 if (ReRD->isBeingDefined())
597 if (RecordDecl* RD = dyn_cast<RecordDecl>(Tag)) {
598 ASTContext& C = SemaR.getASTContext();
599 Parser& P =
const_cast<Parser&
>(m_Interpreter->getParser());
608 C.getTypeDeclType(RD),
614 Tag->setHasExternalLexicalStorage(
false);
630 Scope *S,
const FileEntry* FE ) {
636 Sema &SemaR = m_Interpreter->getSema();
645 Sema::LookupNameKind kind =
R.getLookupKind();
646 if (!(kind == Sema::LookupTagName || kind == Sema::LookupOrdinaryName
647 || kind == Sema::LookupNestedNameSpecifierName
648 || kind == Sema::LookupNamespaceName))
653 bool lookupSuccess =
false;
655 Parser &P =
const_cast<Parser &
>(m_Interpreter->getParser());
662 lookupSuccess = SemaR.LookupName(
R, S);
664 if (
R.isSingleResult()) {
665 if (isa<clang::RecordDecl>(
R.getFoundDecl())) {
681 lookupSuccess = FE || SemaR.LookupName(
R, S);
687 std::string incl =
"#include \"";
688 incl += FE->getName();
690 m_Interpreter->declare(incl);
726 if (
R.isForRedeclaration())
731 const Sema::LookupNameKind LookupKind =
R.getLookupKind();
732 if (LookupKind != Sema::LookupOrdinaryName)
736 Sema &SemaR = m_Interpreter->getSema();
737 ASTContext& C = SemaR.getASTContext();
738 Preprocessor &PP = SemaR.getPreprocessor();
739 DeclContext *CurDC = SemaR.CurContext;
740 DeclarationName Name =
R.getLookupName();
743 if(!CurDC || !CurDC->isFunctionOrMethod())
748 Preprocessor::CleanupAndRestoreCacheRAII cleanupPPRAII(PP);
755#if defined(R__MUST_REVISIT)
756#if R__MUST_REVISIT(6,2)
761 if (!fgSetOfSpecials) {
762 fgSetOfSpecials =
new std::set<TObject*>;
764 ((std::set<TObject*>*)fgSetOfSpecials)->insert((
TObject*)*obj);
768 VarDecl *VD = cast_or_null<VarDecl>(utils::Lookup::Named(&SemaR, Name,
773 TObject **address = (
TObject**)m_Interpreter->getAddressOfGlobal(GD);
777 CStyleCastExpr *CStyleCast = cast<CStyleCastExpr>(VD->getInit());
778 Expr* newInit = utils::Synthesize::IntegerLiteralExpr(C, (uint64_t)obj);
779 CStyleCast->setSubExpr(newInit);
786 Preprocessor::CleanupAndRestoreCacheRAII cleanupRAII(PP);
790 QualType QT = C.getPointerType(C.getTypeDeclType(cast<TypeDecl>(TD)));
793 SourceLocation(), Name.getAsIdentifierInfo(), QT,
797 = utils::Synthesize::CStyleCastPtrExpr(&SemaR, QT, (uint64_t)obj);
802 cling::CompilationOptions CO;
803 CO.DeclarationExtraction = 0;
804 CO.ValuePrinting = CompilationOptions::VPDisabled;
805 CO.ResultEvaluation = 0;
806 CO.DynamicScoping = 0;
808 CO.CodeGeneration = 1;
810 cling::Transaction* T =
new cling::Transaction(CO, SemaR);
812 T->setState(cling::Transaction::kCompleted);
814 m_Interpreter->emitAllDecls(T);
816 assert(VD &&
"Cannot be null!");
833 DeclarationName Name =
R.getLookupName();
834 IdentifierInfo* II = Name.getAsIdentifierInfo();
835 SourceLocation Loc =
R.getNameLoc();
836 Sema& SemaRef =
R.getSema();
837 ASTContext& C = SemaRef.getASTContext();
838 DeclContext* TU = C.getTranslationUnitDecl();
839 assert(TU &&
"Must not be null.");
842 clang::FunctionDecl* Wrapper =
nullptr;
845 DeclContext* DCCursor =
Cursor->getEntity();
848 Wrapper = dyn_cast_or_null<FunctionDecl>(DCCursor);
850 if (utils::Analyze::IsWrapper(Wrapper)) {
864 VarDecl* Result = VarDecl::Create(C, TU, Loc, Loc, II, C.DependentTy,
876 Wrapper->addAttr(AnnotateAttr::CreateImplicit(C,
"__ResolveAtRuntime"));
880 Sema::ContextRAII pushedDC(SemaRef, TU);
891 if (
R.getLookupKind() != Sema::LookupOrdinaryName)
894 if (
R.isForRedeclaration())
900 const Transaction* T = getInterpreter()->getCurrentTransaction();
903 const cling::CompilationOptions& COpts = T->getCompilationOpts();
904 if (!COpts.DynamicScoping)
907 auto &PP =
R.getSema().PP;
911 SourceLocation LocAfterIdent = PP.getLocForEndOfToken(
R.getNameLoc());
913 PP.getRawToken(LocAfterIdent, LookAhead0,
true);
914 if (LookAhead0.is(tok::raw_identifier))
933 for (Scope* DepScope = S; DepScope; DepScope = DepScope->getParent()) {
934 if (DeclContext* Ctx =
static_cast<DeclContext*
>(DepScope->getEntity())) {
935 if (!Ctx->isDependentContext())
937 if (isa<FunctionDecl>(Ctx))
955 if (
R.isForRedeclaration())
958 if (
R.getLookupKind() != Sema::LookupOrdinaryName)
961 if (!isa<FunctionDecl>(
R.getSema().CurContext))
966 DeclContext* ScopeDC = S->getEntity();
967 if (!ScopeDC || !llvm::isa<FunctionDecl>(ScopeDC))
972 Scope* FnScope = S->getFnParent();
975 auto FD = dyn_cast_or_null<FunctionDecl>(FnScope->getEntity());
976 if (!FD || !utils::Analyze::IsWrapper(FD))
980 Sema& SemaRef =
R.getSema();
981 ASTContext& C = SemaRef.getASTContext();
982 DeclContext* DC = SemaRef.CurContext;
983 assert(DC &&
"Must not be null.");
986 Preprocessor& PP =
R.getSema().getPreprocessor();
989 if (PP.LookAhead(0).isNot(tok::equal)) {
995 DeclarationName Name =
R.getLookupName();
996 IdentifierInfo* II = Name.getAsIdentifierInfo();
997 SourceLocation Loc =
R.getNameLoc();
998 VarDecl* Result = VarDecl::Create(C, DC, Loc, Loc, II,
999 C.getAutoType(QualType(),
1000 clang::AutoTypeKeyword::Auto,
1006 "Cannot create VarDecl");
1013 Result->addAttr(AnnotateAttr::CreateImplicit(C,
"__Auto"));
1024 Sema& SemaR = m_Interpreter->getSema();
1025 cling::Transaction TPrev((cling::CompilationOptions(), SemaR));
1026 TPrev.append(SemaR.getASTContext().getTranslationUnitDecl());
1065 if (
const RecordDecl* RD = dyn_cast<RecordDecl>(D)) {
1078 llvm::StringRef canonicalName) {
1083 llvm::StringRef canonicalName) {
The file contains utilities which are foundational and could be used across the core component of ROO...
bool TCling__LibraryLoadingFailed(const std::string &, const std::string &, bool, bool)
Lookup libraries in LD_LIBRARY_PATH and DYLD_LIBRARY_PATH with mangled_name, which is extracted by er...
void * TCling__LockCompilationDuringUserCodeExecution()
Lock the interpreter.
int TCling__LoadLibrary(const char *library)
Load a library.
void TCling__UpdateListsOnCommitted(const cling::Transaction &, Interpreter *)
void TCling__SplitAclicMode(const char *fileName, std::string &mode, std::string &args, std::string &io, std::string &fname)
void TCling__TransactionRollback(const cling::Transaction &)
const char * TCling__GetClassSharedLibs(const char *className)
int TCling__AutoParseCallback(const char *className)
Decl * TCling__GetObjectDecl(TObject *obj)
void TCling__GetNormalizedContext(const ROOT::TMetaUtils::TNormalizedCtxt *&)
void TCling__RestoreInterpreterMutex(void *state)
Re-apply the lock count delta that TCling__ResetInterpreterMutex() caused.
int TCling__CompileMacro(const char *fileName, const char *options)
void * TCling__ResetInterpreterMutex()
Reset the interpreter lock to the state it had before interpreter-related calls happened.
int TCling__AutoLoadCallback(const char *className)
void TCling__LibraryUnloadedRTTI(const void *dyLibHandle, llvm::StringRef canonicalName)
void TCling__PrintStackTrace()
Print a StackTrace!
int TCling__IsAutoLoadNamespaceCandidate(const clang::NamespaceDecl *name)
void TCling__UpdateListsOnUnloaded(const cling::Transaction &)
void TCling__UnlockCompilationDuringUserCodeExecution(void *state)
Unlock the interpreter.
static bool topmostDCIsFunction(Scope *S)
void TCling__InvalidateGlobal(const clang::Decl *)
void TCling__LibraryLoadedRTTI(const void *dyLibHandle, llvm::StringRef canonicalName)
TObject * TCling__GetObjectAddress(const char *Name, void *&LookupCtx)
void TCling__RestoreInterpreterMutex(void *delta)
Re-apply the lock count delta that TCling__ResetInterpreterMutex() caused.
void TCling__TransactionRollback(const cling::Transaction &T)
void TCling__InvalidateGlobal(const clang::Decl *D)
void * TCling__LockCompilationDuringUserCodeExecution()
Lock the interpreter.
void TCling__UpdateListsOnUnloaded(const cling::Transaction &T)
void TCling__GetNormalizedContext(const ROOT::TMetaUtils::TNormalizedCtxt *&normCtxt)
bool TCling__LibraryLoadingFailed(const std::string &errmessage, const std::string &libStem, bool permanent, bool resolved)
Lookup libraries in LD_LIBRARY_PATH and DYLD_LIBRARY_PATH with mangled_name, which is extracted by er...
void TCling__UnlockCompilationDuringUserCodeExecution(void *)
Unlock the interpreter.
const char * TCling__GetClassSharedLibs(const char *className)
int TCling__AutoParseCallback(const char *className)
void TCling__LibraryUnloadedRTTI(const void *dyLibHandle, const char *canonicalName)
void TCling__UpdateListsOnCommitted(const cling::Transaction &T, cling::Interpreter *)
const Decl * TCling__GetObjectDecl(TObject *obj)
int TCling__CompileMacro(const char *fileName, const char *options)
void * TCling__ResetInterpreterMutex()
Reset the interpreter lock to the state it had before interpreter-related calls happened.
int TCling__AutoLoadCallback(const char *className)
void TCling__PrintStackTrace()
Print a StackTrace!
void TCling__LibraryLoadedRTTI(const void *dyLibHandle, const char *canonicalName)
TObject * TCling__GetObjectAddress(const char *Name, void *&LookupCtx)
int TCling__IsAutoLoadNamespaceCandidate(const clang::NamespaceDecl *nsDecl)
void TCling__SplitAclicMode(const char *fileName, string &mode, string &args, string &io, string &fname)
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 filename
Option_t Option_t TPoint TPoint const char mode
AutoloadLibraryGenerator(cling::Interpreter *interp, const TClingCallbacks &cb)
const TClingCallbacks & fCallbacks
cling::Interpreter * fInterpreter
llvm::Error tryToGenerate(llvm::orc::LookupState &LS, llvm::orc::LookupKind K, llvm::orc::JITDylib &JD, llvm::orc::JITDylibLookupFlags JDLookupFlags, const llvm::orc::SymbolLookupSet &Symbols) override
void discard(const llvm::orc::JITDylib &JD, const llvm::orc::SymbolStringPtr &Name) override
void materialize(std::unique_ptr< llvm::orc::MaterializationResponsibility > R) override
llvm::orc::SymbolNameVector fSymbols
StringRef getName() const override
const TClingCallbacks & fCallbacks
static llvm::orc::SymbolFlagsMap getSymbolFlagsMap(const llvm::orc::SymbolNameVector &Symbols)
AutoloadLibraryMU(const TClingCallbacks &cb, const std::string &Library, const llvm::orc::SymbolNameVector &Symbols)
void LibraryUnloaded(const void *dyLibHandle, llvm::StringRef canonicalName) override
bool tryAutoParseInternal(llvm::StringRef Name, clang::LookupResult &R, clang::Scope *S, const clang::FileEntry *FE=0)
bool tryFindROOTSpecialInternal(clang::LookupResult &R, clang::Scope *S)
void ReturnedFromUserCode(void *stateInfo) override
bool fIsAutoParsingSuspended
bool tryResolveAtRuntimeInternal(clang::LookupResult &R, clang::Scope *S)
bool findInGlobalModuleIndex(clang::DeclarationName Name, bool loadFirstMatchOnly=true)
void PrintStackTrace() override
bool tryInjectImplicitAutoKeyword(clang::LookupResult &R, clang::Scope *S)
clang::NamespaceDecl * fROOTSpecialNamespace
void TransactionRollback(const cling::Transaction &T) override
void TransactionCommitted(const cling::Transaction &T) override
TClingCallbacks(cling::Interpreter *interp, bool hasCodeGen)
llvm::DenseMap< llvm::StringRef, clang::DeclarationName > m_LoadedModuleFiles
void DeclDeserialized(const clang::Decl *D) override
bool IsAutoLoadingEnabled() const
void InclusionDirective(clang::SourceLocation, const clang::Token &, llvm::StringRef FileName, bool, clang::CharSourceRange, const clang::FileEntry *, llvm::StringRef, llvm::StringRef, const clang::Module *, clang::SrcMgr::CharacteristicKind) override
void DefinitionShadowed(const clang::NamedDecl *D) override
A previous definition has been shadowed; invalidate TCling' stored data about the old (global) decl.
bool FileNotFound(llvm::StringRef FileName, llvm::SmallVectorImpl< char > &RecoveryPath) override
void * EnteringUserCode() override
bool fIsAutoLoadingRecursively
void UnlockCompilationDuringUserCodeExecution(void *StateInfo) override
bool LibraryLoadingFailed(const std::string &, const std::string &, bool, bool) override
void * LockCompilationDuringUserCodeExecution() override
bool LookupObject(clang::LookupResult &R, clang::Scope *S) override
void LibraryLoaded(const void *dyLibHandle, llvm::StringRef canonicalName) override
bool shouldResolveAtRuntime(clang::LookupResult &R, clang::Scope *S)
void TransactionUnloaded(const cling::Transaction &T) override
Mother of all ROOT objects.
bool ConvertEnvValueToBool(const std::string &value)
RooArgSet S(Args_t &&... args)
constexpr Double_t E()
Base of natural log: .
RAII used to store Parser, Sema, Preprocessor state for recursive parsing.
clang::Preprocessor::CleanupAndRestoreCacheRAII fCleanupRAII
clang::Sema::ContextAndScopeRAII fPushedDCAndS