Kill FullExpr, as it was not, in fact, used anywhere in the code base.

I'm not opposed to the idea in concept, but there's no point in preserving
abortive experiments.

llvm-svn: 121083
This commit is contained in:
John McCall 2010-12-07 00:47:33 +00:00
parent 99ea8a3510
commit 6dd27195b9
6 changed files with 6 additions and 159 deletions

View File

@ -1,88 +0,0 @@
//===--- FullExpr.h - C++ full expression class -----------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file defines the FullExpr interface, to be used for type safe handling
// of full expressions.
//
// Full expressions are described in C++ [intro.execution]p12.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_CLANG_AST_FULLEXPR_H
#define LLVM_CLANG_AST_FULLEXPR_H
#include "llvm/ADT/PointerUnion.h"
namespace clang {
class ASTContext;
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;
}
};
typedef llvm::PointerUnion<Expr *, ExprAndTemporaries *> SubExprTy;
SubExprTy SubExpr;
FullExpr() { }
public:
static FullExpr Create(ASTContext &Context, Expr *SubExpr,
CXXTemporary **Temps, unsigned NumTemps);
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
#endif

View File

@ -20,7 +20,6 @@
#include "clang/AST/PrettyPrinter.h" #include "clang/AST/PrettyPrinter.h"
#include "clang/AST/StmtIterator.h" #include "clang/AST/StmtIterator.h"
#include "clang/AST/DeclGroup.h" #include "clang/AST/DeclGroup.h"
#include "clang/AST/FullExpr.h"
#include "llvm/ADT/SmallVector.h" #include "llvm/ADT/SmallVector.h"
#include "clang/AST/ASTContext.h" #include "clang/AST/ASTContext.h"
#include <string> #include <string>

View File

@ -78,7 +78,6 @@ namespace clang {
class ExternalSemaSource; class ExternalSemaSource;
class FormatAttr; class FormatAttr;
class FriendDecl; class FriendDecl;
class FullExpr;
class FunctionDecl; class FunctionDecl;
class FunctionProtoType; class FunctionProtoType;
class FunctionTemplateDecl; class FunctionTemplateDecl;
@ -1556,7 +1555,7 @@ public:
private: private:
// FIXME: No need to make the entire Sema class a friend when it's just // FIXME: No need to make the entire Sema class a friend when it's just
// Sema::FullExpr that needs access to the constructor below. // Sema::MakeFullExpr that needs access to the constructor below.
friend class Sema; friend class Sema;
explicit FullExprArg(Expr *expr) : E(expr) {} explicit FullExprArg(Expr *expr) : E(expr) {}
@ -1595,17 +1594,17 @@ public:
SourceLocation ColonLoc, Stmt *SubStmt, SourceLocation ColonLoc, Stmt *SubStmt,
bool HasUnusedAttr); bool HasUnusedAttr);
StmtResult ActOnIfStmt(SourceLocation IfLoc, StmtResult ActOnIfStmt(SourceLocation IfLoc,
FullExprArg CondVal, Decl *CondVar, FullExprArg CondVal, Decl *CondVar,
Stmt *ThenVal, Stmt *ThenVal,
SourceLocation ElseLoc, Stmt *ElseVal); SourceLocation ElseLoc, Stmt *ElseVal);
StmtResult ActOnStartOfSwitchStmt(SourceLocation SwitchLoc, StmtResult ActOnStartOfSwitchStmt(SourceLocation SwitchLoc,
Expr *Cond, Expr *Cond,
Decl *CondVar); Decl *CondVar);
StmtResult ActOnFinishSwitchStmt(SourceLocation SwitchLoc, StmtResult ActOnFinishSwitchStmt(SourceLocation SwitchLoc,
Stmt *Switch, Stmt *Body); Stmt *Switch, Stmt *Body);
StmtResult ActOnWhileStmt(SourceLocation WhileLoc, StmtResult ActOnWhileStmt(SourceLocation WhileLoc,
FullExprArg Cond, FullExprArg Cond,
Decl *CondVar, Stmt *Body); Decl *CondVar, Stmt *Body);
StmtResult ActOnDoStmt(SourceLocation DoLoc, Stmt *Body, StmtResult ActOnDoStmt(SourceLocation DoLoc, Stmt *Body,
SourceLocation WhileLoc, SourceLocation WhileLoc,
SourceLocation CondLParen, Expr *Cond, SourceLocation CondLParen, Expr *Cond,
@ -2379,7 +2378,6 @@ public:
Expr *MaybeCreateExprWithCleanups(Expr *SubExpr); Expr *MaybeCreateExprWithCleanups(Expr *SubExpr);
Stmt *MaybeCreateStmtWithCleanups(Stmt *SubStmt); Stmt *MaybeCreateStmtWithCleanups(Stmt *SubStmt);
ExprResult MaybeCreateExprWithCleanups(ExprResult SubExpr); ExprResult MaybeCreateExprWithCleanups(ExprResult SubExpr);
FullExpr CreateFullExpr(Expr *SubExpr);
ExprResult ActOnFinishFullExpr(Expr *Expr); ExprResult ActOnFinishFullExpr(Expr *Expr);
StmtResult ActOnFinishFullStmt(Stmt *Stmt); StmtResult ActOnFinishFullStmt(Stmt *Stmt);

View File

@ -24,7 +24,6 @@ add_clang_library(clangAST
ExprClassification.cpp ExprClassification.cpp
ExprConstant.cpp ExprConstant.cpp
ExprCXX.cpp ExprCXX.cpp
FullExpr.cpp
InheritViz.cpp InheritViz.cpp
ItaniumCXXABI.cpp ItaniumCXXABI.cpp
MicrosoftCXXABI.cpp MicrosoftCXXABI.cpp

View File

@ -1,45 +0,0 @@
//===--- FullExpr.cpp - C++ full expression class ---------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file defines the FullExpr interface, to be used for type safe handling
// of full expressions.
//
// Full expressions are described in C++ [intro.execution]p12.
//
//===----------------------------------------------------------------------===//
#include "clang/AST/ASTContext.h"
#include "clang/AST/FullExpr.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "llvm/Support/AlignOf.h"
using namespace clang;
FullExpr FullExpr::Create(ASTContext &Context, Expr *SubExpr,
CXXTemporary **Temporaries, unsigned NumTemporaries) {
FullExpr E;
if (!NumTemporaries) {
E.SubExpr = SubExpr;
return E;
}
unsigned Size = sizeof(FullExpr)
+ sizeof(CXXTemporary *) * NumTemporaries;
unsigned Align = llvm::AlignOf<ExprAndTemporaries>::Alignment;
ExprAndTemporaries *ET =
static_cast<ExprAndTemporaries *>(Context.Allocate(Size, Align));
ET->SubExpr = SubExpr;
std::copy(Temporaries, Temporaries + NumTemporaries, ET->temps_begin());
return E;
}

View File

@ -3176,22 +3176,6 @@ Sema::MaybeCreateExprWithCleanups(ExprResult SubExpr) {
return Owned(MaybeCreateExprWithCleanups(SubExpr.take())); return Owned(MaybeCreateExprWithCleanups(SubExpr.take()));
} }
FullExpr Sema::CreateFullExpr(Expr *SubExpr) {
unsigned FirstTemporary = ExprEvalContexts.back().NumTemporaries;
assert(ExprTemporaries.size() >= FirstTemporary);
unsigned NumTemporaries = ExprTemporaries.size() - FirstTemporary;
CXXTemporary **Temporaries =
NumTemporaries == 0 ? 0 : &ExprTemporaries[FirstTemporary];
FullExpr E = FullExpr::Create(Context, SubExpr, Temporaries, NumTemporaries);
ExprTemporaries.erase(ExprTemporaries.begin() + FirstTemporary,
ExprTemporaries.end());
return E;
}
Stmt *Sema::MaybeCreateStmtWithCleanups(Stmt *SubStmt) { Stmt *Sema::MaybeCreateStmtWithCleanups(Stmt *SubStmt) {
assert(SubStmt && "sub statement can't be null!"); assert(SubStmt && "sub statement can't be null!");