[cfe-commits] r42662 - /cfe/trunk/include/clang/Analysis/Visitors/DataflowStmtVisitor.h
Ted Kremenek
kremenek at apple.com
Fri Oct 5 16:27:24 PDT 2007
Author: kremenek
Date: Fri Oct 5 18:27:24 2007
New Revision: 42662
URL: http://llvm.org/viewvc/llvm-project?rev=42662&view=rev
Log:
Removed DataflowStmtVisitor. It is no longer used, and is obsoleted
by newer visitor interfaces.
Removed:
cfe/trunk/include/clang/Analysis/Visitors/DataflowStmtVisitor.h
Removed: cfe/trunk/include/clang/Analysis/Visitors/DataflowStmtVisitor.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/Visitors/DataflowStmtVisitor.h?rev=42661&view=auto
==============================================================================
--- cfe/trunk/include/clang/Analysis/Visitors/DataflowStmtVisitor.h (original)
+++ cfe/trunk/include/clang/Analysis/Visitors/DataflowStmtVisitor.h (removed)
@@ -1,130 +0,0 @@
-//===--- DataFlowStmtVisitor.h - StmtVisitor for Dataflow -------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file was developed by Ted Kremenek and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines the DataflowStmtVisitor interface, which extends
-// CFGStmtVisitor. This interface is useful for visiting statements in a CFG
-// with the understanding that statements are walked in order of the analysis
-// traversal.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_ANALYSIS_DATAFLOW_STMTVISITOR_H
-#define LLVM_CLANG_ANALYSIS_DATAFLOW_STMTVISITOR_H
-
-#include "clang/Analysis/Visitors/CFGStmtVisitor.h"
-
-namespace clang {
-
-// Tag classes describing what direction the dataflow analysis goes.
-namespace dataflow {
- struct forward_analysis_tag {};
- struct backward_analysis_tag {};
-}
-
-template < typename ImplClass,
- typename AnalysisTag=dataflow::forward_analysis_tag >
-class DataflowStmtVisitor : public CFGStmtVisitor<ImplClass,void> {
-public:
- //===--------------------------------------------------------------------===//
- // Observer methods. These are called before a statement is visited, and
- // there is no special dispatch on statement type. This allows subclasses
- // to inject extra functionality (e.g. monitoring) that applies to all
- // visited statements.
- //===--------------------------------------------------------------------===//
-
- void ObserveStmt(Stmt* S) {}
-
- void ObserveBlockStmt(Stmt* S) {
- static_cast<ImplClass*>(this)->ObserveStmt(S);
- }
-
- //===--------------------------------------------------------------------===//
- // Statment visitor methods. These modify the behavior of CFGVisitor::Visit
- // and CFGVisitor::BlockStmt_Visit by performing a traversal of substatements
- // depending on the direction of the dataflow analysis. For forward
- // analyses, the traversal is postorder (representing evaluation order)
- // and for backward analysis it is preorder (reverse-evaluation order).
- //===--------------------------------------------------------------------===//
-
- void BlockStmt_Visit(Stmt* S) { BlockStmt_Visit(S,AnalysisTag()); }
-
- void BlockStmt_Visit(Stmt* S, dataflow::forward_analysis_tag) {
- // Process statements in a postorder traversal of the AST.
- if (!CFG::hasImplicitControlFlow(S) ||
- S->getStmtClass() == Stmt::CallExprClass)
- static_cast<ImplClass*>(this)->VisitChildren(S);
-
- static_cast<ImplClass*>(this)->ObserveBlockStmt(S);
- static_cast<CFGStmtVisitor<ImplClass,void>*>(this)->BlockStmt_Visit(S);
- }
-
- void BlockStmt_Visit(Stmt* S, dataflow::backward_analysis_tag) {
- // Process statements in a preorder traversal of the AST.
- static_cast<ImplClass*>(this)->ObserveBlockStmt(S);
- static_cast<CFGStmtVisitor<ImplClass,void>*>(this)->BlockStmt_Visit(S);
-
- if (!CFG::hasImplicitControlFlow(S) ||
- S->getStmtClass() == Stmt::CallExprClass)
- static_cast<ImplClass*>(this)->VisitChildren(S);
- }
-
- void Visit(Stmt* S) { Visit(S,AnalysisTag()); }
-
- void Visit(Stmt* S, dataflow::forward_analysis_tag) {
- if (CFG::hasImplicitControlFlow(S))
- return;
-
- // Process statements in a postorder traversal of the AST.
- static_cast<ImplClass*>(this)->VisitChildren(S);
- static_cast<ImplClass*>(this)->ObserveStmt(S);
- static_cast<CFGStmtVisitor<ImplClass,void>*>(this)->Visit(S);
- }
-
- void Visit(Stmt* S, dataflow::backward_analysis_tag) {
- if (CFG::hasImplicitControlFlow(S))
- return;
-
- // Process statements in a preorder traversal of the AST.
- static_cast<ImplClass*>(this)->ObserveStmt(S);
- static_cast<CFGStmtVisitor<ImplClass,void>*>(this)->Visit(S);
- static_cast<ImplClass*>(this)->VisitChildren(S);
- }
-
- //===--------------------------------------------------------------------===//
- // Methods for visiting entire CFGBlocks.
- //===--------------------------------------------------------------------===//
-
- void VisitBlockEntry(const CFGBlock* B) {}
- void VisitBlockExit(const CFGBlock* B) {}
-
- void VisitBlock(const CFGBlock* B) { VisitBlock(B,AnalysisTag()); }
-
- void VisitBlock(const CFGBlock* B, dataflow::forward_analysis_tag ) {
- static_cast<ImplClass*>(this)->VisitBlockEntry(B);
-
- for (CFGBlock::const_iterator I=B->begin(), E=B->end(); I!=E; ++I)
- static_cast<ImplClass*>(this)->BlockStmt_Visit(const_cast<Stmt*>(*I));
-
- static_cast<ImplClass*>(this)->VisitBlockExit(B);
- }
-
- void VisitBlock(const CFGBlock* B, dataflow::backward_analysis_tag ) {
- static_cast<ImplClass*>(this)->VisitBlockExit(B);
-
- for (CFGBlock::const_reverse_iterator I=B->rbegin(), E=B->rend(); I!=E; ++I)
- static_cast<ImplClass*>(this)->BlockStmt_Visit(const_cast<Stmt*>(*I));
-
- static_cast<ImplClass*>(this)->VisitBlockEntry(B);
- }
-
-};
-
-} // end namespace clang
-
-#endif
More information about the cfe-commits
mailing list