]> granicus.if.org Git - clang/commit
Remove vtables from the Stmt hierarchy; this was pretty easy as
authorJohn McCall <rjmccall@apple.com>
Wed, 9 Feb 2011 08:16:59 +0000 (08:16 +0000)
committerJohn McCall <rjmccall@apple.com>
Wed, 9 Feb 2011 08:16:59 +0000 (08:16 +0000)
commit63c00d7f35fa060c0a446c9df3a4402d9c7757fe
tree64f68effbaf44e33590151cab184481c9313db35
parentf0ed580ea5cdc171973c1ac259a9ee21badb80d8
Remove vtables from the Stmt hierarchy;  this was pretty easy as
there were only three virtual methods of any significance.

The primary way to grab child iterators now is with
  Stmt::child_range children();
  Stmt::const_child_range children() const;
where a child_range is just a std::pair of iterators suitable for
being llvm::tie'd to some locals.  I've left the old child_begin()
and child_end() accessors in place, but it's probably a substantial
penalty to grab the iterators individually now, since the
switch-based dispatch is kindof inherently slower than vtable
dispatch.  Grabbing them together is probably a slight win over the
status quo, although of course we could've achieved that with vtables, too.

I also reclassified SwitchCase (correctly) as an abstract Stmt
class, which (as the first such class that wasn't an Expr subclass)
required some fiddling in a few places.

There are somewhat gross metaprogramming hooks in place to ensure
that new statements/expressions continue to implement
getSourceRange() and children().  I had to work around a recent clang
bug;  dgregor actually fixed it already, but I didn't want to
introduce a selfhosting dependency on ToT.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125183 91177308-0d34-0410-b5e6-96231b3b80d8
20 files changed:
include/clang/AST/Expr.h
include/clang/AST/ExprCXX.h
include/clang/AST/ExprObjC.h
include/clang/AST/RecursiveASTVisitor.h
include/clang/AST/Stmt.h
include/clang/AST/StmtCXX.h
include/clang/AST/StmtIterator.h
include/clang/AST/StmtObjC.h
include/clang/Basic/StmtNodes.td
lib/AST/Expr.cpp
lib/AST/ExprCXX.cpp
lib/AST/ExprClassification.cpp
lib/AST/ExprConstant.cpp
lib/AST/ItaniumMangle.cpp
lib/AST/Stmt.cpp
lib/AST/StmtPrinter.cpp
lib/CodeGen/CGStmt.cpp
lib/Sema/TreeTransform.h
lib/StaticAnalyzer/Checkers/ExprEngine.cpp
tools/libclang/CXCursor.cpp