Logo ROOT  
Reference Guide
TClingUtils.h
Go to the documentation of this file.
1 // @(#)root/metautils:$Id$
2 // Author: Axel Naumann, Nov 2011
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2011, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef ROOT_TMetaUtils
13 #define ROOT_TMetaUtils
14 
15 #include "RConversionRuleParser.h"
16 
17 #include <functional>
18 #include <set>
19 #include <string>
20 #include <unordered_set>
21 #include <vector>
22 #include <list>
23 #include <map>
24 #include <utility>
25 
26 #include <cstdlib>
27 
28 #if defined(__GNUC__) && !defined(__clang__)
29 #pragma GCC diagnostic push
30 #pragma GCC diagnostic ignored "-Wpragmas"
31 #pragma GCC diagnostic ignored "-Wclass-memaccess"
32 #endif
33 
34 #include "clang/Basic/Module.h"
35 
36 #if defined(__GNUC__) && !defined(__clang__)
37 #pragma GCC diagnostic pop
38 #endif
39 
40 namespace llvm {
41  class StringRef;
42 }
43 
44 namespace clang {
45  class ASTContext;
46  class Attr;
47  class ClassTemplateDecl;
48  class ClassTemplateSpecializationDecl;
49  class CompilerInstance;
50  class CXXBaseSpecifier;
51  class CXXRecordDecl;
52  class Decl;
53  class DeclContext;
54  class DeclaratorDecl;
55  class FieldDecl;
56  class FunctionDecl;
57  class NamedDecl;
58  class ParmVarDecl;
59  class PresumedLoc;
60  class QualType;
61  class RecordDecl;
62  class SourceLocation;
63  class TagDecl;
64  class TemplateDecl;
65  class TemplateName;
66  class TemplateArgument;
67  class TemplateArgumentList;
68  class TemplateParameterList;
69  class Type;
70  class TypeDecl;
71  class TypedefNameDecl;
72  struct PrintingPolicy;
73 }
74 
75 namespace cling {
76  class Interpreter;
77  class LookupHelper;
78  namespace utils {
79  namespace Transform {
80  struct Config;
81  }
82  }
83 }
84 
85 // For ROOT::ESTLType
86 #include "ESTLType.h"
87 
88 // for TClassEdit::TInterpreterLookupHelper
89 #include "TClassEdit.h"
90 
91 #include "Varargs.h"
92 
93 namespace ROOT {
94 namespace TMetaUtils {
95 
96 ///\returns the resolved normalized absolute path possibly resolving symlinks.
97 std::string GetRealPath(const std::string &path);
98 
99 // Forward Declarations --------------------------------------------------------
100 class AnnotatedRecordDecl;
101 
102 // Constants, typedefs and Enums -----------------------------------------------
103 
104 // Convention for the ROOT relevant properties
105 namespace propNames{
106  static const std::string separator("@@@");
107  static const std::string iotype("iotype");
108  static const std::string name("name");
109  static const std::string pattern("pattern");
110  static const std::string ioname("ioname");
111  static const std::string comment("comment");
112  static const std::string nArgsToKeep("nArgsToKeep");
113  static const std::string persistent("persistent");
114  static const std::string transient("transient");
115 }
116 
117 // Get the array index information for a data member.
119 
121  const cling::Interpreter &interp,
122  const TNormalizedCtxt &normCtxt,
123  std::ostream& dictStream,
124  bool isAutoStreamer);
125 
126 const int kInfo = 0;
127 const int kNote = 500;
128 const int kWarning = 1000;
129 const int kError = 2000;
130 const int kSysError = 3000;
131 const int kFatal = 4000;
132 const int kMaxLen = 1024;
133 
134 // Classes ---------------------------------------------------------------------
135 class TNormalizedCtxtImpl;
136 
137 //______________________________________________________________________________
139 private:
140  TNormalizedCtxtImpl* fImpl;
141 public:
142  using Config_t = cling::utils::Transform::Config;
143  using TypesCont_t = std::set<const clang::Type*>;
144  using TemplPtrIntMap_t = std::map<const clang::ClassTemplateDecl*, int>;
145 
146  TNormalizedCtxt(const cling::LookupHelper &lh);
147  TNormalizedCtxt(const TNormalizedCtxt& other);
149  const Config_t& GetConfig() const;
150  const TypesCont_t &GetTypeWithAlternative() const;
151 
152  void AddTemplAndNargsToKeep(const clang::ClassTemplateDecl* templ, unsigned int i);
153  int GetNargsToKeep(const clang::ClassTemplateDecl* templ) const;
155  void keepTypedef(const cling::LookupHelper &lh, const char* name,
156  bool replace = false);
157 };
158 
159 //______________________________________________________________________________
161 public:
162  typedef bool (*ExistingTypeCheck_t)(const std::string &tname, std::string &result);
163  typedef bool (*AutoParse_t)(const char *name);
164 
165 private:
166  cling::Interpreter *fInterpreter;
171  const int *fPDebug; // debug flag, might change at runtime thus *
172  bool WantDiags() const { return fPDebug && *fPDebug > 5; }
173 
174 public:
175  TClingLookupHelper(cling::Interpreter &interpreter, TNormalizedCtxt &normCtxt,
176  ExistingTypeCheck_t existingTypeCheck,
177  AutoParse_t autoParse,
178  bool *shuttingDownPtr,
179  const int *pgDebug = 0);
180  virtual ~TClingLookupHelper() { /* we're not owner */ }
181 
182  virtual bool ExistingTypeCheck(const std::string &tname, std::string &result);
183  virtual void GetPartiallyDesugaredName(std::string &nameLong);
184  virtual bool IsAlreadyPartiallyDesugaredName(const std::string &nondef, const std::string &nameLong);
185  virtual bool IsDeclaredScope(const std::string &base, bool &isInlined);
186  virtual bool GetPartiallyDesugaredNameWithScopeHandling(const std::string &tname, std::string &result, bool dropstd = true);
187  virtual void ShuttingDownSignal();
188 };
189 
190 //______________________________________________________________________________
192 private:
193  static std::string BuildDemangledTypeInfo(const clang::RecordDecl *rDecl,
194  const std::string &normalizedName);
196  const clang::RecordDecl* fDecl;
197  std::string fRequestedName;
198  std::string fNormalizedName;
199  std::string fDemangledTypeInfo;
205 
206 public:
207  enum ERootFlag {
208  kNoStreamer = 0x01,
212  kHasVersion = 0x08
213  };
214 
215  AnnotatedRecordDecl(long index,
216  const clang::RecordDecl *decl,
217  bool rStreamerInfo,
218  bool rNoStreamer,
219  bool rRequestNoInputOperator,
220  bool rRequestOnlyTClass,
221  int rRequestedVersionNumber,
222  const cling::Interpreter &interpret,
223  const TNormalizedCtxt &normCtxt);
224 
225  AnnotatedRecordDecl(long index,
226  const clang::RecordDecl *decl,
227  const char *requestName,
228  bool rStreamerInfo,
229  bool rNoStreamer,
230  bool rRequestNoInputOperator,
231  bool rRequestOnlyTClass,
232  int rRequestedVersionNumber,
233  const cling::Interpreter &interpret,
234  const TNormalizedCtxt &normCtxt);
235 
236  AnnotatedRecordDecl(long index,
237  const clang::Type *requestedType,
238  const clang::RecordDecl *decl,
239  const char *requestedName,
240  bool rStreamerInfo,
241  bool rNoStreamer,
242  bool rRequestNoInputOperator,
243  bool rRequestOnlyTClass,
244  int rRequestedVersionNumber,
245  const cling::Interpreter &interpret,
246  const TNormalizedCtxt &normCtxt);
247 
248  AnnotatedRecordDecl(long index,
249  const clang::Type *requestedType,
250  const clang::RecordDecl *decl,
251  const char *requestedName,
252  unsigned int nTemplateArgsToSkip,
253  bool rStreamerInfo,
254  bool rNoStreamer,
255  bool rRequestNoInputOperator,
256  bool rRequestOnlyTClass,
257  int rRequestedVersionNumber,
258  const cling::Interpreter &interpret,
259  const TNormalizedCtxt &normCtxt);
260 
262  // Nothing to do we do not own the pointer;
263  }
264 
265 
266  long GetRuleIndex() const { return fRuleIndex; }
267 
268  const char *GetRequestedName() const { return fRequestedName.c_str(); }
269  const char *GetNormalizedName() const { return fNormalizedName.c_str(); }
270  const std::string &GetDemangledTypeInfo() const { return fDemangledTypeInfo; }
271  bool HasClassVersion() const { return fRequestedVersionNumber >=0 ; }
272  bool RequestStreamerInfo() const {
273  // Equivalent to CINT's cl.RootFlag() & G__USEBYTECOUNT
274  return fRequestStreamerInfo;
275  }
277  bool RequestNoStreamer() const { return fRequestNoStreamer; }
278  bool RequestOnlyTClass() const { return fRequestOnlyTClass; }
280  int RootFlag() const {
281  // Return the request (streamerInfo, has_version, etc.) combined in a single
282  // int. See RScanner::AnnotatedRecordDecl::ERootFlag.
283  int result = 0;
284  if (fRequestNoStreamer) result = kNoStreamer;
286  if (fRequestStreamerInfo) result |= kStreamerInfo;
287  if (fRequestedVersionNumber > -1) result |= kHasVersion;
288  return result;
289  }
290  const clang::RecordDecl* GetRecordDecl() const { return fDecl; }
291 
292  operator clang::RecordDecl const *() const {
293  return fDecl;
294  }
295 
296  bool operator<(const AnnotatedRecordDecl& right) const
297  {
298  return fRuleIndex < right.fRuleIndex;
299  }
300 
301  struct CompareByName {
302  bool operator() (const AnnotatedRecordDecl& right, const AnnotatedRecordDecl& left) const
303  {
304  return left.fNormalizedName < right.fNormalizedName;
305  }
306  };
307 };
308 
309 //______________________________________________________________________________
311 private:
312  const std::string fArgTypeName;
313  const clang::CXXRecordDecl *fArgType;
314 
315 public:
316  RConstructorType(const char *type_of_arg, const cling::Interpreter&);
317 
318  const char *GetName() const ;
319  const clang::CXXRecordDecl *GetType() const;
320 };
321 typedef std::list<RConstructorType> RConstructorTypes;
322 
323 // Functions -------------------------------------------------------------------
324 
325 //______________________________________________________________________________
326 int extractAttrString(clang::Attr* attribute, std::string& attrString);
327 
328 //______________________________________________________________________________
329 int extractPropertyNameValFromString(const std::string attributeStr,std::string& attrName, std::string& attrValue);
330 
331 //______________________________________________________________________________
332 int extractPropertyNameVal(clang::Attr* attribute, std::string& attrName, std::string& attrValue);
333 
334 //______________________________________________________________________________
335 bool ExtractAttrPropertyFromName(const clang::Decl& decl,
336  const std::string& propName,
337  std::string& propValue);
338 
339 //______________________________________________________________________________
340 bool ExtractAttrIntPropertyFromName(const clang::Decl& decl,
341  const std::string& propName,
342  int& propValue);
343 
344 //______________________________________________________________________________
345 bool RequireCompleteType(const cling::Interpreter &interp, const clang::CXXRecordDecl *cl);
346 
347 //______________________________________________________________________________
348 bool RequireCompleteType(const cling::Interpreter &interp, clang::SourceLocation Loc, clang::QualType Type);
349 
350 //______________________________________________________________________________
351 // Add default template parameters.
352 clang::QualType AddDefaultParameters(clang::QualType instanceType,
353  const cling::Interpreter &interpret,
354  const TNormalizedCtxt &normCtxt);
355 
356 //______________________________________________________________________________
357 llvm::StringRef DataMemberInfo__ValidArrayIndex(const clang::DeclaratorDecl &m, int *errnum = 0, llvm::StringRef *errstr = 0);
358 
360 
361 //______________________________________________________________________________
362 EIOCtorCategory CheckConstructor(const clang::CXXRecordDecl*, const RConstructorType&, const cling::Interpreter& interp);
363 
364 //______________________________________________________________________________
365 bool CheckDefaultConstructor(const clang::CXXRecordDecl*, const cling::Interpreter& interp);
366 
367 //______________________________________________________________________________
368 EIOCtorCategory CheckIOConstructor(const clang::CXXRecordDecl*, const char *, const clang::CXXRecordDecl *, const cling::Interpreter& interp);
369 
370 //______________________________________________________________________________
371 const clang::FunctionDecl* ClassInfo__HasMethod(const clang::DeclContext *cl, char const*, const cling::Interpreter& interp);
372 
373 //______________________________________________________________________________
374 void CreateNameTypeMap(clang::CXXRecordDecl const&, std::map<std::string, ROOT::Internal::TSchemaType>&);
375 
376 //______________________________________________________________________________
377 int ElementStreamer(std::ostream& finalString,
378  const clang::NamedDecl &forcontext,
379  const clang::QualType &qti,
380  const char *t,
381  int rwmode,
382  const cling::Interpreter &interp,
383  const char *tcl=0);
384 
385 //______________________________________________________________________________
386 bool IsBase(const clang::CXXRecordDecl *cl, const clang::CXXRecordDecl *base, const clang::CXXRecordDecl *context,const cling::Interpreter &interp);
387 
388 //______________________________________________________________________________
389 bool IsBase(const clang::FieldDecl &m, const char* basename, const cling::Interpreter &interp);
390 
391 //______________________________________________________________________________
392 bool HasCustomOperatorNewArrayPlacement(clang::RecordDecl const&, const cling::Interpreter &interp);
393 
394 //______________________________________________________________________________
395 bool HasCustomOperatorNewPlacement(char const*, clang::RecordDecl const&, const cling::Interpreter&);
396 
397 //______________________________________________________________________________
398 bool HasCustomOperatorNewPlacement(clang::RecordDecl const&, const cling::Interpreter&);
399 
400 //______________________________________________________________________________
401 bool HasDirectoryAutoAdd(clang::CXXRecordDecl const*, const cling::Interpreter&);
402 
403 //______________________________________________________________________________
404 bool HasIOConstructor(clang::CXXRecordDecl const*, std::string&, const RConstructorTypes&, const cling::Interpreter&);
405 
406 //______________________________________________________________________________
407 bool HasNewMerge(clang::CXXRecordDecl const*, const cling::Interpreter&);
408 
409 //______________________________________________________________________________
410 bool HasOldMerge(clang::CXXRecordDecl const*, const cling::Interpreter&);
411 
412 //______________________________________________________________________________
413 bool hasOpaqueTypedef(clang::QualType instanceType, const TNormalizedCtxt &normCtxt);
414 
415 //______________________________________________________________________________
416 bool hasOpaqueTypedef(const AnnotatedRecordDecl &cl, const cling::Interpreter &interp, const TNormalizedCtxt &normCtxt);
417 
418 //______________________________________________________________________________
419 bool HasResetAfterMerge(clang::CXXRecordDecl const*, const cling::Interpreter&);
420 
421 //______________________________________________________________________________
422 bool NeedDestructor(clang::CXXRecordDecl const*, const cling::Interpreter&);
423 
424 //______________________________________________________________________________
425 bool NeedTemplateKeyword(clang::CXXRecordDecl const*);
426 
427 //______________________________________________________________________________
428 bool CheckPublicFuncWithProto(clang::CXXRecordDecl const*, char const*, char const*,
429  const cling::Interpreter&, bool diagnose);
430 
431 //______________________________________________________________________________
432 long GetLineNumber(clang::Decl const*);
433 
434 //______________________________________________________________________________
435 bool GetNameWithinNamespace(std::string&, std::string&, std::string&, clang::CXXRecordDecl const*);
436 
437 //______________________________________________________________________________
438 void GetQualifiedName(std::string &qual_name, const clang::QualType &type, const clang::NamedDecl &forcontext);
439 
440 //----
441 std::string GetQualifiedName(const clang::QualType &type, const clang::NamedDecl &forcontext);
442 
443 //______________________________________________________________________________
444 void GetQualifiedName(std::string &qual_name, const clang::Type &type, const clang::NamedDecl &forcontext);
445 
446 //----
447 std::string GetQualifiedName(const clang::Type &type, const clang::NamedDecl &forcontext);
448 
449 //______________________________________________________________________________
450 void GetQualifiedName(std::string &qual_name, const clang::NamedDecl &nd);
451 
452 //----
453 std::string GetQualifiedName(const clang::NamedDecl &nd);
454 
455 //______________________________________________________________________________
456 void GetQualifiedName(std::string &qual_name, const AnnotatedRecordDecl &annotated);
457 
458 //----
459 std::string GetQualifiedName(const AnnotatedRecordDecl &annotated);
460 
461 //______________________________________________________________________________
462 void GetQualifiedName(std::string &qual_name, const clang::RecordDecl &recordDecl);
463 
464 //----
465 std::string GetQualifiedName(const clang::RecordDecl &recordDecl);
466 
467 //______________________________________________________________________________
468 int WriteNamespaceHeader(std::ostream&, const clang::RecordDecl *);
469 
470 //______________________________________________________________________________
471 int WriteNamespaceHeader(std::ostream&, const clang::DeclContext *);
472 
473 //______________________________________________________________________________
474 void WritePointersSTL(const AnnotatedRecordDecl &cl, const cling::Interpreter &interp, const TNormalizedCtxt &normCtxt);
475 
476 //______________________________________________________________________________
477 int GetClassVersion(const clang::RecordDecl *cl, const cling::Interpreter &interp);
478 
479 //______________________________________________________________________________
480 std::pair<bool, int> GetTrivialIntegralReturnValue(const clang::FunctionDecl *funcCV, const cling::Interpreter &interp);
481 
482 //______________________________________________________________________________
483 int IsSTLContainer(const AnnotatedRecordDecl &annotated);
484 
485 //______________________________________________________________________________
486 ROOT::ESTLType IsSTLContainer(const clang::FieldDecl &m);
487 
488 //______________________________________________________________________________
489 int IsSTLContainer(const clang::CXXBaseSpecifier &base);
490 
491 void foreachHeaderInModule(const clang::Module &module,
492  const std::function<void(const clang::Module::Header &)> &closure,
493  bool includeDirectlyUsedModules = true);
494 
495 //______________________________________________________________________________
496 const char *ShortTypeName(const char *typeDesc);
497 
498 //______________________________________________________________________________
499 std::string ShortTypeName(const clang::FieldDecl &m);
500 
501 //______________________________________________________________________________
502 bool IsStreamableObject(const clang::FieldDecl &m, const cling::Interpreter& interp);
503 
504 //______________________________________________________________________________
505 clang::RecordDecl *GetUnderlyingRecordDecl(clang::QualType type);
506 
507 //______________________________________________________________________________
508 std::string TrueName(const clang::FieldDecl &m);
509 
510 //______________________________________________________________________________
511 const clang::CXXRecordDecl *ScopeSearch(const char *name,
512  const cling::Interpreter &gInterp,
513  bool diagnose,
514  const clang::Type** resultType);
515 
516 //______________________________________________________________________________
517 void WriteAuxFunctions(std::ostream& finalString,
518  const AnnotatedRecordDecl &cl,
519  const clang::CXXRecordDecl *decl,
520  const cling::Interpreter &interp,
521  const RConstructorTypes& ctorTypes,
522  const TNormalizedCtxt &normCtxt);
523 
524 
525 //______________________________________________________________________________
526 const clang::FunctionDecl *GetFuncWithProto(const clang::Decl* cinfo,
527  const char *method,
528  const char *proto,
529  const cling::Interpreter &gInterp,
530  bool diagnose);
531 
532 //______________________________________________________________________________
533 void WriteClassCode(CallWriteStreamer_t WriteStreamerFunc,
534  const AnnotatedRecordDecl &cl,
535  const cling::Interpreter &interp,
536  const TNormalizedCtxt &normCtxt,
537  std::ostream& finalString,
538  const RConstructorTypes& ctorTypes,
539  bool isGenreflex);
540 
541 //______________________________________________________________________________
542 void WriteClassInit(std::ostream& finalString,
543  const AnnotatedRecordDecl &cl,
544  const clang::CXXRecordDecl *decl,
545  const cling::Interpreter &interp,
546  const TNormalizedCtxt &normCtxt,
547  const RConstructorTypes& ctorTypes,
548  bool& needCollectionProxy);
549 
550 //______________________________________________________________________________
551 bool HasCustomStreamerMemberFunction(const AnnotatedRecordDecl &cl,
552  const clang::CXXRecordDecl* clxx,
553  const cling::Interpreter &interp,
554  const TNormalizedCtxt &normCtxt);
555 
556 //______________________________________________________________________________
557 bool HasCustomConvStreamerMemberFunction(const AnnotatedRecordDecl &cl,
558  const clang::CXXRecordDecl* clxx,
559  const cling::Interpreter &interp,
560  const TNormalizedCtxt &normCtxt);
561 
562 //______________________________________________________________________________
563 // Return the header file to be included to declare the Decl
564 llvm::StringRef GetFileName(const clang::Decl& decl,
565  const cling::Interpreter& interp);
566 
567 //______________________________________________________________________________
568 // Return the dictionary file name for a module
569 std::string GetModuleFileName(const char* moduleName);
570 
571 //______________________________________________________________________________
572 // Return (in the argument 'output') a mangled version of the C++ symbol/type (pass as 'input')
573 // that can be used in C++ as a variable name.
574 void GetCppName(std::string &output, const char *input);
575 
576 //______________________________________________________________________________
577 // Return the type with all parts fully qualified (most typedefs),
578 // including template arguments, appended to name.
579 void GetFullyQualifiedTypeName(std::string &name, const clang::QualType &type, const cling::Interpreter &interpreter);
580 
581 //______________________________________________________________________________
582 // Return the type with all parts fully qualified (most typedefs),
583 // including template arguments, appended to name, without using the interpreter
584 void GetFullyQualifiedTypeName(std::string &name, const clang::QualType &type, const clang::ASTContext &);
585 
586 //______________________________________________________________________________
587 // Return the type normalized for ROOT,
588 // keeping only the ROOT opaque typedef (Double32_t, etc.) and
589 // adding default template argument for all types except those explicitly
590 // requested to be drop by the user.
591 // Default template for STL collections are not yet removed by this routine.
592 clang::QualType GetNormalizedType(const clang::QualType &type, const cling::Interpreter &interpreter, const TNormalizedCtxt &normCtxt);
593 
594 //______________________________________________________________________________
595 // Return the type name normalized for ROOT,
596 // keeping only the ROOT opaque typedef (Double32_t, etc.) and
597 // adding default template argument for all types except the STL collections
598 // where we remove the default template argument if any.
599 void GetNormalizedName(std::string &norm_name, const clang::QualType &type, const cling::Interpreter &interpreter, const TNormalizedCtxt &normCtxt);
600 
601 //______________________________________________________________________________
602 // Alternative signature
603 void GetNormalizedName(std::string &norm_name,
604  const clang::TypeDecl* typeDecl,
605  const cling::Interpreter &interpreter);
606 
607 //______________________________________________________________________________
608 // Analog to GetNameForIO but with types.
609 // It uses the LookupHelper of Cling to transform the name in type.
610 clang::QualType GetTypeForIO(const clang::QualType& templateInstanceType,
611  const cling::Interpreter &interpreter,
612  const TNormalizedCtxt &normCtxt,
614 
615 //______________________________________________________________________________
616 // Get the name and the type for the IO given a certain type. In some sense the
617 // combination of GetNameForIO and GetTypeForIO.
618 std::pair<std::string,clang::QualType> GetNameTypeForIO(const clang::QualType& templateInstanceType,
619  const cling::Interpreter &interpreter,
620  const TNormalizedCtxt &normCtxt,
622 
623 //______________________________________________________________________________
624 // Returns comment in a meaningful way
625 llvm::StringRef GetComment(const clang::Decl &decl, clang::SourceLocation *loc = 0);
626 
627 //______________________________________________________________________________
628 // Returns the comment of the ClassDef macro
629 llvm::StringRef GetClassComment(const clang::CXXRecordDecl &decl, clang::SourceLocation *loc, const cling::Interpreter &interpreter);
630 
631 //______________________________________________________________________________
632 // Return the base/underlying type of a chain of array or pointers type.
633 const clang::Type *GetUnderlyingType(clang::QualType type);
634 
635 //______________________________________________________________________________
636 // Scans the redeclaration chain for an annotation.
637 //
638 // returns 0 if no annotation was found.
639 //
640 template<typename T>
641 const T* GetAnnotatedRedeclarable(const T* Redecl) {
642  if (!Redecl)
643  return 0;
644 
645  Redecl = Redecl->getMostRecentDecl();
646  while (Redecl && !Redecl->hasAttrs())
647  Redecl = Redecl->getPreviousDecl();
648 
649  return Redecl;
650 }
651 
652 //______________________________________________________________________________
653 // Overload the template for typedefs, because they don't contain
654 // isThisDeclarationADefinition method. (Use inline to avoid violating ODR)
655 const clang::TypedefNameDecl* GetAnnotatedRedeclarable(const clang::TypedefNameDecl* TND);
656 
657 //______________________________________________________________________________
658 // Overload the template for tags, because we only check definitions.
659 const clang::TagDecl* GetAnnotatedRedeclarable(const clang::TagDecl* TND);
660 
661 //______________________________________________________________________________
662 // Return true if the decl is part of the std namespace.
663 bool IsStdClass(const clang::RecordDecl &cl);
664 
665 //______________________________________________________________________________
666 // Return true, if the decl is part of the std namespace and we want
667 // its default parameter dropped.
668 bool IsStdDropDefaultClass(const clang::RecordDecl &cl);
669 
670 //______________________________________________________________________________
671 // See if the CXXRecordDecl matches the current of any of the previous CXXRecordDecls
672 bool MatchWithDeclOrAnyOfPrevious(const clang::CXXRecordDecl &cl, const clang::CXXRecordDecl &currentCl);
673 
674 //______________________________________________________________________________
675 // Return true if the decl is of type
676 bool IsOfType(const clang::CXXRecordDecl &cl, const std::string& type, const cling::LookupHelper& lh);
677 
678 //______________________________________________________________________________
679 // Return which kind of STL container the decl is, if any.
680 ROOT::ESTLType IsSTLCont(const clang::RecordDecl &cl);
681 
682 //______________________________________________________________________________
683 // Check if 'input' or any of its template parameter was substituted when
684 // instantiating the class template instance and replace it with the
685 // partially sugared type we have from 'instance'.
686 clang::QualType ReSubstTemplateArg(clang::QualType input, const clang::Type *instance);
687 
688 //______________________________________________________________________________
689 // Remove the last n template arguments from the name
690 int RemoveTemplateArgsFromName(std::string& name, unsigned int);
691 
692 //______________________________________________________________________________
693 clang::TemplateName ExtractTemplateNameFromQualType(const clang::QualType& qt);
694 
695 //______________________________________________________________________________
696 bool QualType2Template(const clang::QualType& qt,
697  clang::ClassTemplateDecl*& ctd,
698  clang::ClassTemplateSpecializationDecl*& ctsd);
699 
700 //______________________________________________________________________________
701 clang::ClassTemplateDecl* QualType2ClassTemplateDecl(const clang::QualType& qt);
702 
703 //______________________________________________________________________________
704 // Extract the namespaces enclosing a DeclContext
705 void ExtractCtxtEnclosingNameSpaces(const clang::DeclContext&,
706  std::list<std::pair<std::string,bool> >&);
707 //______________________________________________________________________________
708 void ExtractEnclosingNameSpaces(const clang::Decl&,
709  std::list<std::pair<std::string,bool> >&);
710 
711 //______________________________________________________________________________
712 const clang::RecordDecl* ExtractEnclosingScopes(const clang::Decl& decl,
713  std::list<std::pair<std::string,unsigned int> >& enclosingSc);
714 //______________________________________________________________________________
715 // Kind of stl container
716 ROOT::ESTLType STLKind(const llvm::StringRef type);
717 
718 //______________________________________________________________________________
719 // Set the toolchain and the include paths for relocatability
720 void SetPathsForRelocatability(std::vector<std::string>& clingArgs);
721 
722 //______________________________________________________________________________
723 void ReplaceAll(std::string& str, const std::string& from, const std::string& to, bool recurse=false);
724 
725 // Functions for the printouts -------------------------------------------------
726 
727 //______________________________________________________________________________
728 inline unsigned int &GetNumberOfErrors()
729 {
730  static unsigned int gNumberOfErrors = 0;
731  return gNumberOfErrors;
732 }
733 
734 //______________________________________________________________________________
735 // True if printing a warning should increase GetNumberOfErrors
736 inline bool &GetWarningsAreErrors()
737 {
738  static bool gWarningsAreErrors = false;
739  return gWarningsAreErrors;
740 }
741 
742 //______________________________________________________________________________
743 // Inclusive minimum error level a message needs to get handled
744 inline int &GetErrorIgnoreLevel() {
746  return gErrorIgnoreLevel;
747 }
748 
749 //______________________________________________________________________________
750 inline void LevelPrint(bool prefix, int level, const char *location, const char *fmt, va_list ap)
751 {
752  if (level < GetErrorIgnoreLevel())
753  return;
754 
755  const char *type = 0;
756 
757  if (level >= ROOT::TMetaUtils::kInfo)
758  type = "Info";
759  if (level >= ROOT::TMetaUtils::kNote)
760  type = "Note";
761  if (level >= ROOT::TMetaUtils::kWarning)
762  type = "Warning";
763  if (level >= ROOT::TMetaUtils::kError)
764  type = "Error";
765  if (level >= ROOT::TMetaUtils::kSysError)
766  type = "SysError";
767  if (level >= ROOT::TMetaUtils::kFatal)
768  type = "Fatal";
769 
770  if (!location || !location[0]) {
771  if (prefix) fprintf(stderr, "%s: ", type);
772  vfprintf(stderr, (const char*)va_(fmt), ap);
773  } else {
774  if (prefix) fprintf(stderr, "%s in <%s>: ", type, location);
775  else fprintf(stderr, "In <%s>: ", location);
776  vfprintf(stderr, (const char*)va_(fmt), ap);
777  }
778 
779  fflush(stderr);
780 
781  // Keep track of the warnings/errors we printed.
783  ++GetNumberOfErrors();
784  }
785 }
786 
787 //______________________________________________________________________________
788 // Use this function in case an error occured.
789 inline void Error(const char *location, const char *va_(fmt), ...)
790 {
791  va_list ap;
792  va_start(ap,va_(fmt));
793  LevelPrint(true, ROOT::TMetaUtils::kError, location, va_(fmt), ap);
794  va_end(ap);
795 }
796 
797 //______________________________________________________________________________
798 // Use this function in case a system (OS or GUI) related error occured.
799 inline void SysError(const char *location, const char *va_(fmt), ...)
800 {
801  va_list ap;
802  va_start(ap, va_(fmt));
803  LevelPrint(true, ROOT::TMetaUtils::kSysError, location, va_(fmt), ap);
804  va_end(ap);
805 }
806 
807 //______________________________________________________________________________
808 // Use this function for informational messages.
809 inline void Info(const char *location, const char *va_(fmt), ...)
810 {
811  va_list ap;
812  va_start(ap,va_(fmt));
813  LevelPrint(true, ROOT::TMetaUtils::kInfo, location, va_(fmt), ap);
814  va_end(ap);
815 }
816 
817 //______________________________________________________________________________
818 // Use this function in warning situations.
819 inline void Warning(const char *location, const char *va_(fmt), ...)
820 {
821  va_list ap;
822  va_start(ap,va_(fmt));
823  LevelPrint(true, ROOT::TMetaUtils::kWarning, location, va_(fmt), ap);
824  va_end(ap);
825 }
826 
827 //______________________________________________________________________________
828 // Use this function in case of a fatal error. It will abort the program.
829 inline void Fatal(const char *location, const char *va_(fmt), ...)
830 {
831  va_list ap;
832  va_start(ap,va_(fmt));
833  LevelPrint(true, ROOT::TMetaUtils::kFatal, location, va_(fmt), ap);
834  va_end(ap);
835 }
836 
837 //______________________________________________________________________________
838 const std::string& GetPathSeparator();
839 
840 //______________________________________________________________________________
841 bool EndsWith(const std::string &theString, const std::string &theSubstring);
842 
843 //______________________________________________________________________________
844 bool BeginsWith(const std::string &theString, const std::string &theSubstring);
845 
846 //______________________________________________________________________________
847 bool IsLinkdefFile(const char *filename);
848 
849 //______________________________________________________________________________
850 bool IsHeaderName(const std::string &filename);
851 
852 //______________________________________________________________________________
853 namespace AST2SourceTools {
854 
855 //______________________________________________________________________________
856 const std::string Decls2FwdDecls(const std::vector<const clang::Decl*> &decls,
857  bool (*ignoreFiles)(const clang::PresumedLoc&) ,
858  const cling::Interpreter& interp);
859 
860 //______________________________________________________________________________
861 int PrepareArgsForFwdDecl(std::string& templateArgs,
862  const clang::TemplateParameterList& tmplParamList,
863  const cling::Interpreter& interpreter);
864 
865 //______________________________________________________________________________
866 int EncloseInNamespaces(const clang::Decl& decl, std::string& defString);
867 
868 //______________________________________________________________________________
869 const clang::RecordDecl* EncloseInScopes(const clang::Decl& decl, std::string& defString);
870 
871 //______________________________________________________________________________
872 int FwdDeclFromRcdDecl(const clang::RecordDecl& recordDecl,
873  const cling::Interpreter& interpreter,
874  std::string& defString,
875  bool acceptStl=false);
876 
877 //______________________________________________________________________________
878 int FwdDeclFromTmplDecl(const clang::TemplateDecl& tmplDecl,
879  const cling::Interpreter& interpreter,
880  std::string& defString);
881 //______________________________________________________________________________
882 int GetDefArg(const clang::ParmVarDecl& par, std::string& valAsString, const clang::PrintingPolicy& pp);
883 
884 //______________________________________________________________________________
885 int FwdDeclFromFcnDecl(const clang::FunctionDecl& fcnDecl,
886  const cling::Interpreter& interpreter,
887  std::string& defString);
888 //______________________________________________________________________________
889 int FwdDeclFromTypeDefNameDecl(const clang::TypedefNameDecl& tdnDecl,
890  const cling::Interpreter& interpreter,
891  std::string& fwdDeclString,
892  std::unordered_set<std::string>* fwdDeclSet=nullptr);
893 
894 } // namespace AST2SourceTools
895 
896 } // namespace TMetaUtils
897 
898 } // namespace ROOT
899 
900 #endif // ROOT_TMetaUtils
ROOT::TMetaUtils::RConstructorType::GetType
const clang::CXXRecordDecl * GetType() const
Definition: TClingUtils.cxx:1176
ROOT::TMetaUtils::AnnotatedRecordDecl::CompareByName
Definition: TClingUtils.h:301
ROOT::TMetaUtils::IsSTLContainer
int IsSTLContainer(const AnnotatedRecordDecl &annotated)
Is this an STL container.
Definition: TClingUtils.cxx:2649
ROOT::TMetaUtils::propNames::separator
static const std::string separator("@@@")
m
auto * m
Definition: textangle.C:8
ROOT::TMetaUtils::TClingLookupHelper::IsAlreadyPartiallyDesugaredName
virtual bool IsAlreadyPartiallyDesugaredName(const std::string &nondef, const std::string &nameLong)
Definition: TClingUtils.cxx:576
ROOT::TMetaUtils::AnnotatedRecordDecl::fRequestNoStreamer
bool fRequestNoStreamer
Definition: TClingUtils.h:201
ROOT::TMetaUtils::GetCppName
void GetCppName(std::string &output, const char *input)
Return (in the argument 'output') a mangled version of the C++ symbol/type (pass as 'input') that can...
Definition: TClingUtils.cxx:3278
ROOT::TMetaUtils::HasCustomOperatorNewPlacement
bool HasCustomOperatorNewPlacement(char const *, clang::RecordDecl const &, const cling::Interpreter &)
return true if we can find a custom operator new with placement
Definition: TClingUtils.cxx:2308
llvm
Definition: TString.h:850
ROOT::TMetaUtils::propNames::ioname
static const std::string ioname("ioname")
ROOT::TMetaUtils::AnnotatedRecordDecl::fRuleIndex
long fRuleIndex
Definition: TClingUtils.h:195
ROOT::TMetaUtils::TNormalizedCtxt::GetNargsToKeep
int GetNargsToKeep(const clang::ClassTemplateDecl *templ) const
Definition: TClingUtils.cxx:354
ROOT::TMetaUtils::AnnotatedRecordDecl::fRequestedName
std::string fRequestedName
Definition: TClingUtils.h:197
ROOT::TMetaUtils::GetUnderlyingType
const clang::Type * GetUnderlyingType(clang::QualType type)
Return the base/underlying type of a chain of array or pointers type.
Definition: TClingUtils.cxx:4351
ROOT::TMetaUtils::IsStreamableObject
bool IsStreamableObject(const clang::FieldDecl &m, const cling::Interpreter &interp)
Definition: TClingUtils.cxx:2766
ROOT::TMetaUtils::HasIOConstructor
bool HasIOConstructor(clang::CXXRecordDecl const *, std::string &, const RConstructorTypes &, const cling::Interpreter &)
return true if we can find an constructor calleable without any arguments or with one the IOCtor spec...
Definition: TClingUtils.cxx:1184
ROOT::TMetaUtils::AnnotatedRecordDecl::fNormalizedName
std::string fNormalizedName
Definition: TClingUtils.h:198
ROOT::TMetaUtils::AnnotatedRecordDecl::RequestStreamerInfo
bool RequestStreamerInfo() const
Definition: TClingUtils.h:272
ROOT::TMetaUtils::ReplaceAll
void ReplaceAll(std::string &str, const std::string &from, const std::string &to, bool recurse=false)
Definition: TClingUtils.cxx:5018
ROOT::TMetaUtils::GetLineNumber
long GetLineNumber(clang::Decl const *)
It looks like the template specialization decl actually contains less information on the location of ...
Definition: TClingUtils.cxx:1565
ROOT::TMetaUtils::AnnotatedRecordDecl::kNoStreamer
@ kNoStreamer
Definition: TClingUtils.h:208
ROOT::TMetaUtils::AST2SourceTools::PrepareArgsForFwdDecl
int PrepareArgsForFwdDecl(std::string &templateArgs, const clang::TemplateParameterList &tmplParamList, const cling::Interpreter &interpreter)
Loop over the template parameters and build a string for template arguments using the fully qualified...
Definition: TClingUtils.cxx:5182
ROOT::TMetaUtils::Warning
void Warning(const char *location, const char *va_(fmt),...)
Definition: TClingUtils.h:819
ROOT::TMetaUtils::AST2SourceTools::FwdDeclFromRcdDecl
int FwdDeclFromRcdDecl(const clang::RecordDecl &recordDecl, const cling::Interpreter &interpreter, std::string &defString, bool acceptStl=false)
Convert a rcd decl to its fwd decl If this is a template specialisation, treat in the proper way.
Definition: TClingUtils.cxx:5333
ROOT::TMetaUtils::TClingLookupHelper::IsDeclaredScope
virtual bool IsDeclaredScope(const std::string &base, bool &isInlined)
Definition: TClingUtils.cxx:592
ROOT::TMetaUtils::TClingLookupHelper::fPDebug
const int * fPDebug
Definition: TClingUtils.h:171
ROOT::TMetaUtils::AST2SourceTools::EncloseInScopes
const clang::RecordDecl * EncloseInScopes(const clang::Decl &decl, std::string &defString)
Take the scopes which enclose the decl and put them around the definition string.
Definition: TClingUtils.cxx:5143
ROOT::TMetaUtils::AnnotatedRecordDecl
Definition: TClingUtils.h:191
ROOT::TMetaUtils::GetNormalizedType
clang::QualType GetNormalizedType(const clang::QualType &type, const cling::Interpreter &interpreter, const TNormalizedCtxt &normCtxt)
Return the type normalized for ROOT, keeping only the ROOT opaque typedef (Double32_t,...
Definition: TClingUtils.cxx:4010
ROOT::TMetaUtils::TClingLookupHelper
Definition: TClingUtils.h:160
ROOT::TMetaUtils::QualType2ClassTemplateDecl
clang::ClassTemplateDecl * QualType2ClassTemplateDecl(const clang::QualType &qt)
Extract from a qualtype the class template if this makes sense.
Definition: TClingUtils.cxx:3563
ROOT::TMetaUtils::TClingLookupHelper::fAutoParse
AutoParse_t fAutoParse
Definition: TClingUtils.h:169
ROOT::TMetaUtils::AnnotatedRecordDecl::ERootFlag
ERootFlag
Definition: TClingUtils.h:207
ROOT::TMetaUtils::AnnotatedRecordDecl::fDemangledTypeInfo
std::string fDemangledTypeInfo
Definition: TClingUtils.h:199
ROOT::TMetaUtils::AnnotatedRecordDecl::GetRequestedName
const char * GetRequestedName() const
Definition: TClingUtils.h:268
ROOT::TMetaUtils::HasDirectoryAutoAdd
bool HasDirectoryAutoAdd(clang::CXXRecordDecl const *, const cling::Interpreter &)
Return true if the class has a method DirectoryAutoAdd(TDirectory *)
Definition: TClingUtils.cxx:1267
ROOT::TMetaUtils::ShortTypeName
const char * ShortTypeName(const char *typeDesc)
Return the absolute type of typeDesc.
Definition: TClingUtils.cxx:2734
output
static void output(int code)
Definition: gifencode.c:226
ROOT::TMetaUtils::HasCustomOperatorNewArrayPlacement
bool HasCustomOperatorNewArrayPlacement(clang::RecordDecl const &, const cling::Interpreter &interp)
return true if we can find a custom operator new with placement
Definition: TClingUtils.cxx:2396
ROOT::TMetaUtils::NeedDestructor
bool NeedDestructor(clang::CXXRecordDecl const *, const cling::Interpreter &)
Definition: TClingUtils.cxx:1230
ROOT::TMetaUtils::ReSubstTemplateArg
clang::QualType ReSubstTemplateArg(clang::QualType input, const clang::Type *instance)
Check if 'input' or any of its template parameter was substituted when instantiating the class templa...
Definition: TClingUtils.cxx:4541
gInterp
cling::Interpreter * gInterp
ROOT::TMetaUtils::AnnotatedRecordDecl::fRequestOnlyTClass
bool fRequestOnlyTClass
Definition: TClingUtils.h:203
ROOT::TMetaUtils::Error
void Error(const char *location, const char *va_(fmt),...)
Definition: TClingUtils.h:789
ROOT::TMetaUtils::GetFullyQualifiedTypeName
void GetFullyQualifiedTypeName(std::string &name, const clang::QualType &type, const cling::Interpreter &interpreter)
Definition: TClingUtils.cxx:3501
va_
#define va_(arg)
Definition: Varargs.h:41
ROOT::TMetaUtils::TNormalizedCtxt::GetTemplNargsToKeepMap
const TemplPtrIntMap_t GetTemplNargsToKeepMap() const
Definition: TClingUtils.cxx:358
ROOT::TMetaUtils::ExtractAttrIntPropertyFromName
bool ExtractAttrIntPropertyFromName(const clang::Decl &decl, const std::string &propName, int &propValue)
This routine counts on the "propName<separator>propValue" format.
Definition: TClingUtils.cxx:1727
ROOT::TMetaUtils::DataMemberInfo__ValidArrayIndex_error_code
DataMemberInfo__ValidArrayIndex_error_code
Definition: TClingUtils.h:118
ROOT::TMetaUtils::propNames::nArgsToKeep
static const std::string nArgsToKeep("nArgsToKeep")
ROOT::TMetaUtils::TClingLookupHelper::WantDiags
bool WantDiags() const
Definition: TClingUtils.h:172
ROOT::TMetaUtils::AnnotatedRecordDecl::RequestOnlyTClass
bool RequestOnlyTClass() const
Definition: TClingUtils.h:278
ROOT::TMetaUtils::RConstructorType::RConstructorType
RConstructorType(const char *type_of_arg, const cling::Interpreter &)
Definition: TClingUtils.cxx:1166
ROOT::TMetaUtils::AnnotatedRecordDecl::RequestNoInputOperator
bool RequestNoInputOperator() const
Definition: TClingUtils.h:276
ROOT::TMetaUtils::TrueName
std::string TrueName(const clang::FieldDecl &m)
TrueName strips the typedefs and array dimensions.
Definition: TClingUtils.cxx:2569
ROOT::TMetaUtils::extractPropertyNameVal
int extractPropertyNameVal(clang::Attr *attribute, std::string &attrName, std::string &attrValue)
Definition: TClingUtils.cxx:1693
ROOT::TMetaUtils::AnnotatedRecordDecl::kStreamerInfo
@ kStreamerInfo
Definition: TClingUtils.h:211
ROOT::TMetaUtils::IS_PRIVATE
@ IS_PRIVATE
Definition: TClingUtils.h:118
ROOT::TMetaUtils::TClingLookupHelper::fInterpreterIsShuttingDownPtr
bool * fInterpreterIsShuttingDownPtr
Definition: TClingUtils.h:170
ROOT::TMetaUtils::GetUnderlyingRecordDecl
clang::RecordDecl * GetUnderlyingRecordDecl(clang::QualType type)
Definition: TClingUtils.cxx:2842
ROOT::TMetaUtils::ExtractEnclosingScopes
const clang::RecordDecl * ExtractEnclosingScopes(const clang::Decl &decl, std::list< std::pair< std::string, unsigned int > > &enclosingSc)
Extract the names and types of containing scopes.
Definition: TClingUtils.cxx:4923
Varargs.h
ROOT::TMetaUtils::AST2SourceTools::EncloseInNamespaces
int EncloseInNamespaces(const clang::Decl &decl, std::string &defString)
Take the namespaces which enclose the decl and put them around the definition string.
Definition: TClingUtils.cxx:5131
ROOT::TMetaUtils::GetModuleFileName
std::string GetModuleFileName(const char *moduleName)
Return the dictionary file name for a module.
Definition: TClingUtils.cxx:4152
ROOT::TMetaUtils::kSysError
const int kSysError
Definition: TClingUtils.h:130
ROOT::TMetaUtils::AST2SourceTools::GetDefArg
int GetDefArg(const clang::ParmVarDecl &par, std::string &valAsString, const clang::PrintingPolicy &pp)
Get the default value as string.
Definition: TClingUtils.cxx:5484
ROOT::TMetaUtils::CheckPublicFuncWithProto
bool CheckPublicFuncWithProto(clang::CXXRecordDecl const *, char const *, char const *, const cling::Interpreter &, bool diagnose)
Return true, if the function (defined by the name and prototype) exists and is public.
Definition: TClingUtils.cxx:1251
ROOT::Math::IntegrationOneDim::Type
Type
enumeration specifying the integration types.
Definition: AllIntegrationTypes.h:60
RConversionRuleParser.h
ROOT::TMetaUtils::WritePointersSTL
void WritePointersSTL(const AnnotatedRecordDecl &cl, const cling::Interpreter &interp, const TNormalizedCtxt &normCtxt)
Write interface function for STL members.
Definition: TClingUtils.cxx:2512
ROOT::TMetaUtils::GetNormalizedName
void GetNormalizedName(std::string &norm_name, const clang::QualType &type, const cling::Interpreter &interpreter, const TNormalizedCtxt &normCtxt)
Return the type name normalized for ROOT, keeping only the ROOT opaque typedef (Double32_t,...
Definition: TClingUtils.cxx:4036
ROOT::TMetaUtils::EIOCtorCategory::kIORefType
@ kIORefType
ROOT::TMetaUtils::WriteClassInit
void WriteClassInit(std::ostream &finalString, const AnnotatedRecordDecl &cl, const clang::CXXRecordDecl *decl, const cling::Interpreter &interp, const TNormalizedCtxt &normCtxt, const RConstructorTypes &ctorTypes, bool &needCollectionProxy)
FIXME: a function of ~300 lines!
Definition: TClingUtils.cxx:1749
bool
ROOT::TMetaUtils::extractPropertyNameValFromString
int extractPropertyNameValFromString(const std::string attributeStr, std::string &attrName, std::string &attrValue)
Definition: TClingUtils.cxx:1676
ROOT::TMetaUtils::TNormalizedCtxt::keepTypedef
void keepTypedef(const cling::LookupHelper &lh, const char *name, bool replace=false)
Definition: TClingUtils.cxx:361
ROOT::TMetaUtils::DataMemberInfo__ValidArrayIndex
llvm::StringRef DataMemberInfo__ValidArrayIndex(const clang::DeclaratorDecl &m, int *errnum=0, llvm::StringRef *errstr=0)
ValidArrayIndex return a static string (so use it or copy it immediatly, do not call GrabIndex twice ...
Definition: TClingUtils.cxx:3129
ROOT::TMetaUtils::TClingLookupHelper::TClingLookupHelper
TClingLookupHelper(cling::Interpreter &interpreter, TNormalizedCtxt &normCtxt, ExistingTypeCheck_t existingTypeCheck, AutoParse_t autoParse, bool *shuttingDownPtr, const int *pgDebug=0)
Definition: TClingUtils.cxx:531
ROOT::TMetaUtils::CheckDefaultConstructor
bool CheckDefaultConstructor(const clang::CXXRecordDecl *, const cling::Interpreter &interp)
Checks if default constructor exists and accessible.
Definition: TClingUtils.cxx:1048
ROOT::TMetaUtils::propNames::persistent
static const std::string persistent("persistent")
ROOT::TMetaUtils::Fatal
void Fatal(const char *location, const char *va_(fmt),...)
Definition: TClingUtils.h:829
ROOT::TMetaUtils::TClingLookupHelper::AutoParse_t
bool(* AutoParse_t)(const char *name)
Definition: TClingUtils.h:163
ROOT::TMetaUtils::AnnotatedRecordDecl::GetNormalizedName
const char * GetNormalizedName() const
Definition: TClingUtils.h:269
ROOT::TMetaUtils::propNames::iotype
static const std::string iotype("iotype")
ROOT::TMetaUtils::TNormalizedCtxt::TemplPtrIntMap_t
std::map< const clang::ClassTemplateDecl *, int > TemplPtrIntMap_t
Definition: TClingUtils.h:144
ROOT::TMetaUtils::TNormalizedCtxt::AddTemplAndNargsToKeep
void AddTemplAndNargsToKeep(const clang::ClassTemplateDecl *templ, unsigned int i)
Definition: TClingUtils.cxx:350
ROOT::TMetaUtils::MatchWithDeclOrAnyOfPrevious
bool MatchWithDeclOrAnyOfPrevious(const clang::CXXRecordDecl &cl, const clang::CXXRecordDecl &currentCl)
This is a recursive function.
Definition: TClingUtils.cxx:4413
ROOT::TMetaUtils::Info
void Info(const char *location, const char *va_(fmt),...)
Definition: TClingUtils.h:809
ROOT::TMetaUtils::HasCustomStreamerMemberFunction
bool HasCustomStreamerMemberFunction(const AnnotatedRecordDecl &cl, const clang::CXXRecordDecl *clxx, const cling::Interpreter &interp, const TNormalizedCtxt &normCtxt)
Return true if the class has a custom member function streamer.
Definition: TClingUtils.cxx:1327
ROOT::TMetaUtils::AnnotatedRecordDecl::operator<
bool operator<(const AnnotatedRecordDecl &right) const
Definition: TClingUtils.h:296
ROOT::TMetaUtils::IsStdClass
bool IsStdClass(const clang::RecordDecl &cl)
Return true, if the decl is part of the std namespace.
Definition: TClingUtils.cxx:4386
ROOT::TMetaUtils::GetQualifiedName
void GetQualifiedName(std::string &qual_name, const clang::QualType &type, const clang::NamedDecl &forcontext)
Main implementation relying on GetFullyQualifiedTypeName All other GetQualifiedName functions leverag...
Definition: TClingUtils.cxx:1368
ROOT::TMetaUtils::IsStdDropDefaultClass
bool IsStdDropDefaultClass(const clang::RecordDecl &cl)
Return true, if the decl is part of the std namespace and we want its default parameter dropped.
Definition: TClingUtils.cxx:4395
ROOT::TMetaUtils::RConstructorType::fArgType
const clang::CXXRecordDecl * fArgType
Definition: TClingUtils.h:313
ROOT::TMetaUtils::GetNameWithinNamespace
bool GetNameWithinNamespace(std::string &, std::string &, std::string &, clang::CXXRecordDecl const *)
Return true if one of the class' enclosing scope is a namespace and set fullname to the fully qualifi...
Definition: TClingUtils.cxx:2211
ROOT::TMetaUtils::AnnotatedRecordDecl::fRequestedVersionNumber
int fRequestedVersionNumber
Definition: TClingUtils.h:204
ROOT::TMetaUtils::EIOCtorCategory::kDefault
@ kDefault
ROOT::ESTLType
ESTLType
Definition: ESTLType.h:34
ROOT::TMetaUtils::AnnotatedRecordDecl::HasClassVersion
bool HasClassVersion() const
Definition: TClingUtils.h:271
ROOT::TMetaUtils::GetNameTypeForIO
std::pair< std::string, clang::QualType > GetNameTypeForIO(const clang::QualType &templateInstanceType, const cling::Interpreter &interpreter, const TNormalizedCtxt &normCtxt, TClassEdit::EModType mode=TClassEdit::kNone)
Definition: TClingUtils.cxx:4093
ROOT::TMetaUtils::HasCustomConvStreamerMemberFunction
bool HasCustomConvStreamerMemberFunction(const AnnotatedRecordDecl &cl, const clang::CXXRecordDecl *clxx, const cling::Interpreter &interp, const TNormalizedCtxt &normCtxt)
Return true if the class has a custom member function streamer.
Definition: TClingUtils.cxx:1346
ROOT::TMetaUtils::AST2SourceTools::FwdDeclFromFcnDecl
int FwdDeclFromFcnDecl(const clang::FunctionDecl &fcnDecl, const cling::Interpreter &interpreter, std::string &defString)
ROOT::TMetaUtils::CheckConstructor
EIOCtorCategory CheckConstructor(const clang::CXXRecordDecl *, const RConstructorType &, const cling::Interpreter &interp)
Check if class has constructor of provided type - either default or with single argument.
Definition: TClingUtils.cxx:1128
ROOT::TMetaUtils::GetClassComment
llvm::StringRef GetClassComment(const clang::CXXRecordDecl &decl, clang::SourceLocation *loc, const cling::Interpreter &interpreter)
Return the class comment after the ClassDef: class MyClass { ...
Definition: TClingUtils.cxx:4317
TClassEdit::kNone
@ kNone
Definition: TClassEdit.h:75
ROOT::TMetaUtils::GetAnnotatedRedeclarable
const T * GetAnnotatedRedeclarable(const T *Redecl)
Definition: TClingUtils.h:641
ROOT::TMetaUtils::GetRealPath
std::string GetRealPath(const std::string &path)
Definition: TClingUtils.cxx:85
ROOT::TMetaUtils::ExtractAttrPropertyFromName
bool ExtractAttrPropertyFromName(const clang::Decl &decl, const std::string &propName, std::string &propValue)
This routine counts on the "propName<separator>propValue" format.
Definition: TClingUtils.cxx:1704
ROOT::TMetaUtils::AnnotatedRecordDecl::kHasVersion
@ kHasVersion
Definition: TClingUtils.h:212
ROOT::TMetaUtils::CreateNameTypeMap
void CreateNameTypeMap(clang::CXXRecordDecl const &, std::map< std::string, ROOT::Internal::TSchemaType > &)
ROOT::TMetaUtils::GetFuncWithProto
const clang::FunctionDecl * GetFuncWithProto(const clang::Decl *cinfo, const char *method, const char *proto, const cling::Interpreter &gInterp, bool diagnose)
Definition: TClingUtils.cxx:1525
ROOT::TMetaUtils::IsLinkdefFile
bool IsLinkdefFile(const char *filename)
Definition: TClingUtils.cxx:5068
ROOT::TMetaUtils::TNormalizedCtxt::~TNormalizedCtxt
~TNormalizedCtxt()
Definition: TClingUtils.cxx:341
TClassEdit::TInterpreterLookupHelper
Definition: TClassEdit.h:120
ROOT::TMetaUtils::RemoveTemplateArgsFromName
int RemoveTemplateArgsFromName(std::string &name, unsigned int)
Remove the last n template arguments from the name.
Definition: TClingUtils.cxx:4796
ROOT::TMetaUtils::HasNewMerge
bool HasNewMerge(clang::CXXRecordDecl const *, const cling::Interpreter &)
Return true if the class has a method Merge(TCollection*,TFileMergeInfo*)
Definition: TClingUtils.cxx:1282
ROOT::TMetaUtils::VALID
@ VALID
Definition: TClingUtils.h:118
ROOT::TMetaUtils::IsHeaderName
bool IsHeaderName(const std::string &filename)
Definition: TClingUtils.cxx:5093
ROOT::TMetaUtils::AnnotatedRecordDecl::RootFlag
int RootFlag() const
Definition: TClingUtils.h:280
ROOT::TMetaUtils::AnnotatedRecordDecl::kNoInputOperator
@ kNoInputOperator
Definition: TClingUtils.h:209
ROOT::TMetaUtils::extractAttrString
int extractAttrString(clang::Attr *attribute, std::string &attrString)
Extract attr string.
Definition: TClingUtils.cxx:1663
ROOT::TMetaUtils::TNormalizedCtxt::TypesCont_t
std::set< const clang::Type * > TypesCont_t
Definition: TClingUtils.h:143
ROOT::TMetaUtils::TNormalizedCtxt::TNormalizedCtxt
TNormalizedCtxt(const cling::LookupHelper &lh)
Definition: TClingUtils.cxx:333
ROOT::R::function
void function(const Char_t *name_, T fun, const Char_t *docstring=0)
Definition: RExports.h:151
ROOT::TMetaUtils::CallWriteStreamer_t
void(* CallWriteStreamer_t)(const AnnotatedRecordDecl &cl, const cling::Interpreter &interp, const TNormalizedCtxt &normCtxt, std::ostream &dictStream, bool isAutoStreamer)
Definition: TClingUtils.h:120
ROOT::TMetaUtils::kError
const int kError
Definition: TClingUtils.h:129
ROOT::TMetaUtils::ExtractCtxtEnclosingNameSpaces
void ExtractCtxtEnclosingNameSpaces(const clang::DeclContext &, std::list< std::pair< std::string, bool > > &)
Extract enclosing namespaces recursively.
Definition: TClingUtils.cxx:4896
ROOT::TMetaUtils::TClingLookupHelper::ExistingTypeCheck
virtual bool ExistingTypeCheck(const std::string &tname, std::string &result)
Helper routine to ry hard to avoid looking up in the Cling database as this could enduce an unwanted ...
Definition: TClingUtils.cxx:549
ROOT::TMetaUtils::WriteAuxFunctions
void WriteAuxFunctions(std::ostream &finalString, const AnnotatedRecordDecl &cl, const clang::CXXRecordDecl *decl, const cling::Interpreter &interp, const RConstructorTypes &ctorTypes, const TNormalizedCtxt &normCtxt)
std::string NormalizedName; GetNormalizedName(NormalizedName, decl->getASTContext()....
Definition: TClingUtils.cxx:2405
ROOT::TMetaUtils::kMaxLen
const int kMaxLen
Definition: TClingUtils.h:132
ROOT::TMetaUtils::IsSTLCont
ROOT::ESTLType IsSTLCont(const clang::RecordDecl &cl)
type : type name: vector<list<classA,allocator>,allocator> result: 0 : not stl container abs(result):...
Definition: TClingUtils.cxx:4463
ROOT::TMetaUtils::hasOpaqueTypedef
bool hasOpaqueTypedef(clang::QualType instanceType, const TNormalizedCtxt &normCtxt)
Return true if the type is a Double32_t or Float16_t or is a instance template that depends on Double...
Definition: TClingUtils.cxx:1590
ROOT::TMetaUtils::AnnotatedRecordDecl::kUseByteCount
@ kUseByteCount
Definition: TClingUtils.h:210
ROOT::TMetaUtils::RConstructorType::fArgTypeName
const std::string fArgTypeName
Definition: TClingUtils.h:312
ROOT::TMetaUtils::BeginsWith
bool BeginsWith(const std::string &theString, const std::string &theSubstring)
Definition: TClingUtils.cxx:5055
ROOT::TMetaUtils::NOT_INT
@ NOT_INT
Definition: TClingUtils.h:118
ROOT::TMetaUtils::EndsWith
bool EndsWith(const std::string &theString, const std::string &theSubstring)
Definition: TClingUtils.cxx:5044
ROOT::TMetaUtils::WriteNamespaceHeader
int WriteNamespaceHeader(std::ostream &, const clang::RecordDecl *)
Definition: TClingUtils.cxx:2283
ROOT::TMetaUtils::AnnotatedRecordDecl::fRequestNoInputOperator
bool fRequestNoInputOperator
Definition: TClingUtils.h:202
ROOT::TMetaUtils::HasOldMerge
bool HasOldMerge(clang::CXXRecordDecl const *, const cling::Interpreter &)
Return true if the class has a method Merge(TCollection*)
Definition: TClingUtils.cxx:1296
ROOT::TMetaUtils::AnnotatedRecordDecl::fDecl
const clang::RecordDecl * fDecl
Definition: TClingUtils.h:196
ROOT::TMetaUtils::AnnotatedRecordDecl::GetRecordDecl
const clang::RecordDecl * GetRecordDecl() const
Definition: TClingUtils.h:290
ROOT::TMetaUtils::STLKind
ROOT::ESTLType STLKind(const llvm::StringRef type)
Converts STL container name to number. vector -> 1, etc..
Definition: TClingUtils.cxx:4824
void
typedef void((*Func_t)())
ROOT::TMetaUtils::GetErrorIgnoreLevel
int & GetErrorIgnoreLevel()
Definition: TClingUtils.h:744
ROOT::TMetaUtils::UNKNOWN
@ UNKNOWN
Definition: TClingUtils.h:118
ROOT::TMetaUtils::kWarning
const int kWarning
Definition: TClingUtils.h:128
ROOT::TMetaUtils::TNormalizedCtxt
Definition: TClingUtils.h:138
ROOT::TMetaUtils::EIOCtorCategory
EIOCtorCategory
Definition: TClingUtils.h:359
ROOT::TMetaUtils::foreachHeaderInModule
void foreachHeaderInModule(const clang::Module &module, const std::function< void(const clang::Module::Header &)> &closure, bool includeDirectlyUsedModules=true)
Calls the given lambda on every header in the given module.
Definition: TClingUtils.cxx:2683
ROOT::TMetaUtils::QualType2Template
bool QualType2Template(const clang::QualType &qt, clang::ClassTemplateDecl *&ctd, clang::ClassTemplateSpecializationDecl *&ctsd)
Get the template specialisation decl and template decl behind the qualtype Returns true if successful...
Definition: TClingUtils.cxx:3519
ROOT::TMetaUtils::AnnotatedRecordDecl::GetRuleIndex
long GetRuleIndex() const
Definition: TClingUtils.h:266
RooFit_internal::instance
static Roo_reg_AGKInteg1D instance
Definition: RooAdaptiveGaussKronrodIntegrator1D.cxx:153
ROOT::TMetaUtils::ExtractEnclosingNameSpaces
void ExtractEnclosingNameSpaces(const clang::Decl &, std::list< std::pair< std::string, bool > > &)
Extract the immediately outer namespace and then launch the recursion.
Definition: TClingUtils.cxx:4876
proto
const char * proto
Definition: civetweb.c:16604
ROOT::TMetaUtils::TClingLookupHelper::fNormalizedCtxt
TNormalizedCtxt * fNormalizedCtxt
Definition: TClingUtils.h:167
gErrorIgnoreLevel
R__EXTERN Int_t gErrorIgnoreLevel
Definition: TError.h:129
ROOT::TMetaUtils::AnnotatedRecordDecl::~AnnotatedRecordDecl
~AnnotatedRecordDecl()
Definition: TClingUtils.h:261
ROOT::TMetaUtils::TClingLookupHelper::fExistingTypeCheck
ExistingTypeCheck_t fExistingTypeCheck
Definition: TClingUtils.h:168
ROOT::TMetaUtils::RequireCompleteType
bool RequireCompleteType(const cling::Interpreter &interp, const clang::CXXRecordDecl *cl)
Definition: TClingUtils.cxx:807
ROOT::TMetaUtils::TClingLookupHelper::ExistingTypeCheck_t
bool(* ExistingTypeCheck_t)(const std::string &tname, std::string &result)
Definition: TClingUtils.h:162
ROOT::TMetaUtils::ExtractTemplateNameFromQualType
clang::TemplateName ExtractTemplateNameFromQualType(const clang::QualType &qt)
These manipulations are necessary because a template specialisation type does not inherit from a reco...
Definition: TClingUtils.cxx:3579
TClassEdit.h
ROOT::TMetaUtils::HasResetAfterMerge
bool HasResetAfterMerge(clang::CXXRecordDecl const *, const cling::Interpreter &)
Return true if the class has a method ResetAfterMerge(TFileMergeInfo *)
Definition: TClingUtils.cxx:1311
ROOT::TMetaUtils::GetPathSeparator
const std::string & GetPathSeparator()
Return the separator suitable for this platform.
Definition: TClingUtils.cxx:5037
ROOT::TMetaUtils::AnnotatedRecordDecl::BuildDemangledTypeInfo
static std::string BuildDemangledTypeInfo(const clang::RecordDecl *rDecl, const std::string &normalizedName)
Definition: TClingUtils.cxx:367
short
l unsigned short
Definition: Converters.cxx:862
clang
Definition: BaseSelectionRule.h:29
ROOT::TMetaUtils::kFatal
const int kFatal
Definition: TClingUtils.h:131
ROOT::TMetaUtils::GetClassVersion
int GetClassVersion(const clang::RecordDecl *cl, const cling::Interpreter &interp)
Return the version number of the class or -1 if the function Class_Version does not exist.
Definition: TClingUtils.cxx:2585
TClassEdit::EModType
EModType
Definition: TClassEdit.h:74
ROOT::TMetaUtils::ScopeSearch
const clang::CXXRecordDecl * ScopeSearch(const char *name, const cling::Interpreter &gInterp, bool diagnose, const clang::Type **resultType)
Return the scope corresponding to 'name' or std::'name'.
Definition: TClingUtils.cxx:784
ROOT::TMetaUtils::TClingLookupHelper::GetPartiallyDesugaredName
virtual void GetPartiallyDesugaredName(std::string &nameLong)
Definition: TClingUtils.cxx:560
ROOT::TMetaUtils::LevelPrint
void LevelPrint(bool prefix, int level, const char *location, const char *fmt, va_list ap)
Definition: TClingUtils.h:750
ROOT::TMetaUtils::TClingLookupHelper::ShuttingDownSignal
virtual void ShuttingDownSignal()
Definition: TClingUtils.cxx:694
ROOT::TMetaUtils::GetNumberOfErrors
unsigned int & GetNumberOfErrors()
Definition: TClingUtils.h:728
name
char name[80]
Definition: TGX11.cxx:110
ROOT::TMetaUtils::EIOCtorCategory::kIOPtrType
@ kIOPtrType
ROOT::TMetaUtils::ElementStreamer
int ElementStreamer(std::ostream &finalString, const clang::NamedDecl &forcontext, const clang::QualType &qti, const char *t, int rwmode, const cling::Interpreter &interp, const char *tcl=0)
Definition: TClingUtils.cxx:869
ROOT::TMetaUtils::ClassInfo__HasMethod
const clang::FunctionDecl * ClassInfo__HasMethod(const clang::DeclContext *cl, char const *, const cling::Interpreter &interp)
Definition: TClingUtils.cxx:770
ROOT::TMetaUtils::NOT_DEF
@ NOT_DEF
Definition: TClingUtils.h:118
ROOT::Math::Chebyshev::T
double T(double x)
Definition: ChebyshevPol.h:52
ROOT::TMetaUtils::kInfo
const int kInfo
Definition: TClingUtils.h:126
ROOT::TMetaUtils::GetComment
llvm::StringRef GetComment(const clang::Decl &decl, clang::SourceLocation *loc=0)
Returns the comment (// striped away), annotating declaration in a meaningful for ROOT IO way.
Definition: TClingUtils.cxx:4184
ROOT::TMetaUtils::AnnotatedRecordDecl::AnnotatedRecordDecl
AnnotatedRecordDecl(long index, const clang::RecordDecl *decl, bool rStreamerInfo, bool rNoStreamer, bool rRequestNoInputOperator, bool rRequestOnlyTClass, int rRequestedVersionNumber, const cling::Interpreter &interpret, const TNormalizedCtxt &normCtxt)
There is no requested type name.
Definition: TClingUtils.cxx:425
ROOT::TMetaUtils::AnnotatedRecordDecl::GetDemangledTypeInfo
const std::string & GetDemangledTypeInfo() const
Definition: TClingUtils.h:270
ESTLType.h
ROOT::TMetaUtils::TNormalizedCtxt::fImpl
TNormalizedCtxtImpl * fImpl
Definition: TClingUtils.h:140
ROOT::TMetaUtils::AST2SourceTools::Decls2FwdDecls
const std::string Decls2FwdDecls(const std::vector< const clang::Decl * > &decls, bool(*ignoreFiles)(const clang::PresumedLoc &), const cling::Interpreter &interp)
ROOT::TMetaUtils::propNames::comment
static const std::string comment("comment")
ROOT::TMetaUtils::GetTypeForIO
clang::QualType GetTypeForIO(const clang::QualType &templateInstanceType, const cling::Interpreter &interpreter, const TNormalizedCtxt &normCtxt, TClassEdit::EModType mode=TClassEdit::kNone)
Definition: TClingUtils.cxx:4141
ROOT::TMetaUtils::EIOCtorCategory::kAbsent
@ kAbsent
ROOT::TMetaUtils::TNormalizedCtxt::GetTypeWithAlternative
const TypesCont_t & GetTypeWithAlternative() const
Definition: TClingUtils.cxx:347
ROOT::TMetaUtils::IsOfType
bool IsOfType(const clang::CXXRecordDecl &cl, const std::string &type, const cling::LookupHelper &lh)
Definition: TClingUtils.cxx:4433
launcher.module
module
Definition: launcher.py:31
type
int type
Definition: TGX11.cxx:121
ROOT::TMetaUtils::TClingLookupHelper::GetPartiallyDesugaredNameWithScopeHandling
virtual bool GetPartiallyDesugaredNameWithScopeHandling(const std::string &tname, std::string &result, bool dropstd=true)
We assume that we have a simple type: [const] typename[*&][const].
Definition: TClingUtils.cxx:611
ROOT::TMetaUtils::IsBase
bool IsBase(const clang::CXXRecordDecl *cl, const clang::CXXRecordDecl *base, const clang::CXXRecordDecl *context, const cling::Interpreter &interp)
Definition: TClingUtils.cxx:826
ROOT::TMetaUtils::WriteClassCode
void WriteClassCode(CallWriteStreamer_t WriteStreamerFunc, const AnnotatedRecordDecl &cl, const cling::Interpreter &interp, const TNormalizedCtxt &normCtxt, std::ostream &finalString, const RConstructorTypes &ctorTypes, bool isGenreflex)
Generate the code of the class If the requestor is genreflex, request the new streamer format.
Definition: TClingUtils.cxx:2857
ROOT::TMetaUtils::AST2SourceTools::FwdDeclFromTypeDefNameDecl
int FwdDeclFromTypeDefNameDecl(const clang::TypedefNameDecl &tdnDecl, const cling::Interpreter &interpreter, std::string &fwdDeclString, std::unordered_set< std::string > *fwdDeclSet=nullptr)
Extract "forward declaration" of a typedef.
Definition: TClingUtils.cxx:5404
ROOT::TMetaUtils::TClingLookupHelper::fInterpreter
cling::Interpreter * fInterpreter
Definition: TClingUtils.h:166
ROOT::TMetaUtils::SysError
void SysError(const char *location, const char *va_(fmt),...)
Definition: TClingUtils.h:799
ROOT::TMetaUtils::GetWarningsAreErrors
bool & GetWarningsAreErrors()
Definition: TClingUtils.h:736
ROOT::TMetaUtils::AnnotatedRecordDecl::RequestedVersionNumber
int RequestedVersionNumber() const
Definition: TClingUtils.h:279
ROOT::TMetaUtils::NeedTemplateKeyword
bool NeedTemplateKeyword(clang::CXXRecordDecl const *)
Definition: TClingUtils.cxx:2290
ROOT::TMetaUtils::AnnotatedRecordDecl::fRequestStreamerInfo
bool fRequestStreamerInfo
Definition: TClingUtils.h:200
ROOT::TMetaUtils::RConstructorTypes
std::list< RConstructorType > RConstructorTypes
Definition: TClingUtils.h:321
ROOT::TMetaUtils::AnnotatedRecordDecl::CompareByName::operator()
bool operator()(const AnnotatedRecordDecl &right, const AnnotatedRecordDecl &left) const
Definition: TClingUtils.h:302
ROOT::TMetaUtils::TNormalizedCtxt::GetConfig
const Config_t & GetConfig() const
Definition: TClingUtils.cxx:344
ROOT::TMetaUtils::TNormalizedCtxt::Config_t
cling::utils::Transform::Config Config_t
Definition: TClingUtils.h:142
ROOT
VSD Structures.
Definition: StringConv.hxx:21
ROOT::TMetaUtils::AddDefaultParameters
clang::QualType AddDefaultParameters(clang::QualType instanceType, const cling::Interpreter &interpret, const TNormalizedCtxt &normCtxt)
Add any unspecified template parameters to the class template instance, mentioned anywhere in the typ...
Definition: TClingUtils.cxx:2906
ROOT::TMetaUtils::CheckIOConstructor
EIOCtorCategory CheckIOConstructor(const clang::CXXRecordDecl *, const char *, const clang::CXXRecordDecl *, const cling::Interpreter &interp)
Checks IO constructor - must be public and with specified argument.
Definition: TClingUtils.cxx:1068
ROOT::TMetaUtils::propNames::name
static const std::string name("name")
ROOT::TMetaUtils::TClingLookupHelper::~TClingLookupHelper
virtual ~TClingLookupHelper()
Definition: TClingUtils.h:180
ROOT::TMetaUtils::AST2SourceTools::FwdDeclFromTmplDecl
int FwdDeclFromTmplDecl(const clang::TemplateDecl &tmplDecl, const cling::Interpreter &interpreter, std::string &defString)
Convert a tmplt decl to its fwd decl.
Definition: TClingUtils.cxx:5244
ROOT::TMetaUtils::SetPathsForRelocatability
void SetPathsForRelocatability(std::vector< std::string > &clingArgs)
Organise the parameters for cling in order to guarantee relocatability It treats the gcc toolchain an...
Definition: TClingUtils.cxx:4998
ROOT::TMetaUtils::AnnotatedRecordDecl::RequestNoStreamer
bool RequestNoStreamer() const
Definition: TClingUtils.h:277
ROOT::TMetaUtils::RConstructorType::GetName
const char * GetName() const
Definition: TClingUtils.cxx:1175
ROOT::TMetaUtils::kNote
const int kNote
Definition: TClingUtils.h:127
ROOT::TMetaUtils::propNames::pattern
static const std::string pattern("pattern")
ROOT::TMetaUtils::GetFileName
llvm::StringRef GetFileName(const clang::Decl &decl, const cling::Interpreter &interp)
Return the header file to be included to declare the Decl.
Definition: TClingUtils.cxx:3339
ROOT::TMetaUtils::RConstructorType
Definition: TClingUtils.h:310
ROOT::TMetaUtils::GetTrivialIntegralReturnValue
std::pair< bool, int > GetTrivialIntegralReturnValue(const clang::FunctionDecl *funcCV, const cling::Interpreter &interp)
If the function contains 'just': return SomeValue; this routine will extract this value and return it...
Definition: TClingUtils.cxx:2612