[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