Skip to content
  1. Apr 09, 2009
  2. Mar 28, 2009
    • Chris Lattner's avatar
      Introduce a new OpaquePtr<N> struct type, which is a simple POD wrapper for a · 83f095cc
      Chris Lattner authored
      pointer.  Its purpose in life is to be a glorified void*, but which does not
      implicitly convert to void* or other OpaquePtr's with a different UID.
      
      Introduce Action::DeclPtrTy which is a typedef for OpaquePtr<0>.  Change the 
      entire parser/sema interface to use DeclPtrTy instead of DeclTy*.  This
      makes the C++ compiler enforce that these aren't convertible to other opaque
      types.
      
      We should also convert ExprTy, StmtTy, TypeTy, AttrTy, BaseTy, etc,
      but I don't plan to do that in the short term.
      
      The one outstanding known problem with this patch is that we lose the 
      bitmangling optimization where ActionResult<DeclPtrTy> doesn't know how to
      bitmangle the success bit into the low bit of DeclPtrTy.  I will rectify
      this with a subsequent patch.
      
      llvm-svn: 67952
      83f095cc
  3. Mar 26, 2009
    • Douglas Gregor's avatar
      The injected-class-name of class templates and class template · 97f1f1c4
      Douglas Gregor authored
      specializations can be treated as a template. Finally, we can parse
      and process the first implementation of Fibonacci I wrote!
      
      Note that this code does not handle all of the cases where
      injected-class-names can be treated as templates. In particular,
      there's an ambiguity case that we should be able to handle (but
      can't), e.g.,
      
        template <class T> struct Base { }; 
        template <class T> struct Derived : Base<int>, Base<char> {
          typename Derived::Base b;       // error: ambiguous
          typename Derived::Base<double> d;  // OK 
        };
      
      llvm-svn: 67720
      97f1f1c4
    • Douglas Gregor's avatar
      Implement template instantiation for static data members of class · ef1a09a3
      Douglas Gregor authored
      templates, including in-class initializers. For example:
      
        template<typename T, T Divisor>
        class X {
        public:
          static const T value = 10 / Divisor;
        };
      
      instantiated with, e.g.,
      
        X<int, 5>::value
      
      to get the value '2'.
      
      llvm-svn: 67715
      ef1a09a3
  4. Mar 25, 2009
  5. Mar 24, 2009
  6. Mar 17, 2009
Loading