Home | History | Annotate | Download | only in Basic
      1 //===--- LLVM.h - Import various common LLVM datatypes ----------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 /// \file
     11 /// \brief Forward declares and imports various common LLVM datatypes that
     12 /// clang wants to use unqualified.
     13 ///
     14 //===----------------------------------------------------------------------===//
     15 
     16 #ifndef CLANG_BASIC_LLVM_H
     17 #define CLANG_BASIC_LLVM_H
     18 
     19 // Do not proliferate #includes here, require clients to #include their
     20 // dependencies.
     21 // Casting.h has complex templates that cannot be easily forward declared.
     22 #include "llvm/Support/Casting.h"
     23 // None.h includes an enumerator that is desired & cannot be forward declared
     24 // without a definition of NoneType.
     25 #include "llvm/ADT/None.h"
     26 
     27 namespace llvm {
     28   // ADT's.
     29   class StringRef;
     30   class Twine;
     31   template<typename T> class ArrayRef;
     32   template<typename T> class OwningPtr;
     33   template<unsigned InternalLen> class SmallString;
     34   template<typename T, unsigned N> class SmallVector;
     35   template<typename T> class SmallVectorImpl;
     36   template<typename T> class Optional;
     37 
     38   template<typename T>
     39   struct SaveAndRestore;
     40 
     41   // Reference counting.
     42   template <typename T> class IntrusiveRefCntPtr;
     43   template <typename T> struct IntrusiveRefCntPtrInfo;
     44   template <class Derived> class RefCountedBase;
     45   class RefCountedBaseVPTR;
     46 
     47   class raw_ostream;
     48   // TODO: DenseMap, ...
     49 }
     50 
     51 
     52 namespace clang {
     53   // Casting operators.
     54   using llvm::isa;
     55   using llvm::cast;
     56   using llvm::dyn_cast;
     57   using llvm::dyn_cast_or_null;
     58   using llvm::cast_or_null;
     59 
     60   // ADT's.
     61   using llvm::None;
     62   using llvm::Optional;
     63   using llvm::StringRef;
     64   using llvm::Twine;
     65   using llvm::ArrayRef;
     66   using llvm::OwningPtr;
     67   using llvm::SmallString;
     68   using llvm::SmallVector;
     69   using llvm::SmallVectorImpl;
     70   using llvm::SaveAndRestore;
     71 
     72   // Reference counting.
     73   using llvm::IntrusiveRefCntPtr;
     74   using llvm::IntrusiveRefCntPtrInfo;
     75   using llvm::RefCountedBase;
     76   using llvm::RefCountedBaseVPTR;
     77 
     78   using llvm::raw_ostream;
     79 } // end namespace clang.
     80 
     81 #endif
     82