[cfe-commits] r91514 - /cfe/trunk/include/clang/AST/FullExpr.h

Anders Carlsson andersca at mac.com
Tue Dec 15 22:21:35 PST 2009


Author: andersca
Date: Wed Dec 16 00:21:35 2009
New Revision: 91514

URL: http://llvm.org/viewvc/llvm-project?rev=91514&view=rev
Log:
More FullExpr work.

Modified:
    cfe/trunk/include/clang/AST/FullExpr.h

Modified: cfe/trunk/include/clang/AST/FullExpr.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/FullExpr.h?rev=91514&r1=91513&r2=91514&view=diff

==============================================================================
--- cfe/trunk/include/clang/AST/FullExpr.h (original)
+++ cfe/trunk/include/clang/AST/FullExpr.h Wed Dec 16 00:21:35 2009
@@ -23,58 +23,66 @@
   class CXXTemporary;
   class Expr;
 
-  class FullExpr {
-    struct ExprAndTemporaries {
-      Expr *SubExpr;
-      
-      unsigned NumTemps;
-      
-      typedef CXXTemporary** temps_iterator;
-      
-      temps_iterator temps_begin() { 
-        return reinterpret_cast<CXXTemporary **>(this + 1); 
-      }
-      temps_iterator temps_end() { 
-        return temps_begin() + NumTemps;
-      }
-    };
-  
-    llvm::PointerUnion<Expr *, ExprAndTemporaries *> SubExpr;
+class FullExpr {
+  struct ExprAndTemporaries {
+    Expr *SubExpr;
     
-    FullExpr() { }
-
-  public:
-    static FullExpr Create(ASTContext &Context, Expr *SubExpr, 
-                           CXXTemporary **Temps, unsigned NumTemps);
-    void Destroy(ASTContext &Context);
-    
-    Expr *getExpr() {
-      if (Expr *E = SubExpr.dyn_cast<Expr *>())
-        return E;
-      
-      return SubExpr.get<ExprAndTemporaries *>()->SubExpr;
-    }
-    
-    const Expr *getExpr() const { 
-      return const_cast<FullExpr*>(this)->getExpr();
-    }
+    unsigned NumTemps;
     
     typedef CXXTemporary** temps_iterator;
-
-    temps_iterator temps_begin() {
-      if (ExprAndTemporaries *ET = SubExpr.dyn_cast<ExprAndTemporaries *>())
-        return ET->temps_begin();
-      
-      return 0;
+    
+    temps_iterator temps_begin() { 
+      return reinterpret_cast<CXXTemporary **>(this + 1); 
     }
-    temps_iterator temps_end() {
-      if (ExprAndTemporaries *ET = SubExpr.dyn_cast<ExprAndTemporaries *>())
-        return ET->temps_end();
-      
-      return 0;
+    temps_iterator temps_end() { 
+      return temps_begin() + NumTemps;
     }
   };
+
+  typedef llvm::PointerUnion<Expr *, ExprAndTemporaries *> SubExprTy;
+  SubExprTy SubExpr;
+  
+  FullExpr() { }
+
+public:
+  static FullExpr Create(ASTContext &Context, Expr *SubExpr, 
+                         CXXTemporary **Temps, unsigned NumTemps);
+  void Destroy(ASTContext &Context);
+  
+  Expr *getExpr() {
+    if (Expr *E = SubExpr.dyn_cast<Expr *>())
+      return E;
+    
+    return SubExpr.get<ExprAndTemporaries *>()->SubExpr;
+  }
   
+  const Expr *getExpr() const { 
+    return const_cast<FullExpr*>(this)->getExpr();
+  }
+  
+  typedef CXXTemporary** temps_iterator;
+
+  temps_iterator temps_begin() {
+    if (ExprAndTemporaries *ET = SubExpr.dyn_cast<ExprAndTemporaries *>())
+      return ET->temps_begin();
+    
+    return 0;
+  }
+  temps_iterator temps_end() {
+    if (ExprAndTemporaries *ET = SubExpr.dyn_cast<ExprAndTemporaries *>())
+      return ET->temps_end();
+    
+    return 0;
+  }
+    
+  void *getAsOpaquePtr() const { return SubExpr.getOpaqueValue(); }
+
+  static FullExpr getFromOpaquePtr(void *Ptr) {
+    FullExpr E;
+    E.SubExpr = SubExprTy::getFromOpaqueValue(Ptr);
+    return E;
+  }
+};
 
 }  // end namespace clang
 





More information about the cfe-commits mailing list