C-Breeze
C Compiler Infrastructure

[ Project home page]
Main Page   Modules   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

SelectionDismantle Class Reference

#include <dismantle.h>

Inheritance diagram for SelectionDismantle:

Changer List of all members.

Public Types

enum  Order { Preorder, Postorder, Both }
enum  Depth { Subtree, NodeOnly }

Public Member Functions

 SelectionDismantle (void)
virtual Node * at_exprstmt (exprstmtNode *, Order)
virtual Node * at_return (returnNode *, Order)
virtual Node * at_binary (binaryNode *, Order)
virtual Node * at_if (ifNode *, Order)
virtual Node * at_switch (switchNode *, Order)
virtual Node * at_stmt (stmtNode *, Order)
Accessors
Methods to get and set fields in the class.

Order order () const
 Return the order in which Nodes of an AST should be visited.

Depth depth () const
 Return which Nodes of an AST should be visited.

bool delete_old () const
 Return whether this Changer deletes Nodes which are removed from the AST by "at_" methods.

"at_" methods
These methods define the functions that should be performed when different classes of Nodes are encountered in the AST. The most specific "at_" method that matches a given Node's class will be called.

virtual Node * at_node (Node *the_node, Order ord)
virtual Node * at_unit (unitNode *the_unit, Order ord)
virtual Node * at_def (defNode *the_def, Order ord)
virtual Node * at_decl (declNode *the_decl, Order ord)
virtual Node * at_subdecl (subdeclNode *the_subdecl, Order ord)
virtual Node * at_proc (procNode *the_proc, Order ord)
virtual Node * at_type (typeNode *the_type, Order ord)
virtual Node * at_prim (primNode *the_prim, Order ord)
virtual Node * at_tdef (tdefNode *the_tdef, Order ord)
virtual Node * at_ptr (ptrNode *the_ptr, Order ord)
virtual Node * at_array (arrayNode *the_array, Order ord)
virtual Node * at_func (funcNode *the_func, Order ord)
virtual Node * at_sue (sueNode *the_sue, Order ord)
virtual Node * at_struct (structNode *the_struct, Order ord)
virtual Node * at_union (unionNode *the_union, Order ord)
virtual Node * at_enum (enumNode *the_enum, Order ord)
virtual Node * at_suespec (suespecNode *the_suespec, Order ord)
virtual Node * at_expr (exprNode *the_expr, Order ord)
virtual Node * at_index (indexNode *the_index, Order ord)
virtual Node * at_const (constNode *the_const, Order ord)
virtual Node * at_id (idNode *the_id, Order ord)
virtual Node * at_unary (unaryNode *the_unary, Order ord)
virtual Node * at_cast (castNode *the_cast, Order ord)
virtual Node * at_comma (commaNode *the_comma, Order ord)
virtual Node * at_ternary (ternaryNode *the_ternary, Order ord)
virtual Node * at_call (callNode *the_call, Order ord)
virtual Node * at_initializer (initializerNode *the_initializer, Order ord)
virtual Node * at_block (blockNode *the_block, Order ord)
virtual Node * at_basicblock (basicblockNode *the_basicblock, Order ord)
virtual Node * at_target (targetNode *the_target, Order ord)
virtual Node * at_label (labelNode *the_label, Order ord)
virtual Node * at_case (caseNode *the_case, Order ord)
virtual Node * at_selection (selectionNode *the_selection, Order ord)
virtual Node * at_loop (loopNode *the_loop, Order ord)
virtual Node * at_while (whileNode *the_while, Order ord)
virtual Node * at_do (doNode *the_do, Order ord)
virtual Node * at_for (forNode *the_for, Order ord)
virtual Node * at_jump (jumpNode *the_jump, Order ord)
virtual Node * at_goto (gotoNode *the_goto, Order ord)
virtual Node * at_continue (continueNode *the_continue, Order ord)
virtual Node * at_break (breakNode *the_break, Order ord)
virtual Node * at_attrib (attribNode *the_attrib, Order ord)
virtual Node * at_operand (operandNode *the_oper, Order ord)
virtual Node * at_conditiongoto (conditiongotoNode *the_condgoto, Order ord)
virtual Node * at_threeAddr (threeAddrNode *the_3addr, Order ord)
virtual Node * at_text (textNode *the_text, Order ord)

Private Member Functions

indexNode * comparison_operand (exprNode *, blockNode *)
Node * andand_oror_in_expr (stmtNode *, Order)

Private Attributes

map< stmtNode *, blockNode * > _expr_block
stmtNode * _cur_stmt
bool _in_expr

Member Enumeration Documentation

enum Changer::Depth [inherited]
 

Enumeration values:
Subtree 
NodeOnly 

Definition at line 148 of file changer.h.

enum Changer::Order [inherited]
 

Enumeration values:
Preorder 
Postorder 
Both 

Definition at line 147 of file changer.h.

Referenced by whileNode::change(), unitNode::change(), unionNode::change(), unaryNode::change(), threeAddrNode::change(), textNode::change(), ternaryNode::change(), tdefNode::change(), switchNode::change(), suespecNode::change(), subdeclNode::change(), structNode::change(), returnNode::change(), ptrNode::change(), procNode::change(), primNode::change(), operandNode::change(), metastmtNode::change(), metaexprNode::change(), labelNode::change(), initializerNode::change(), ifNode::change(), idNode::change(), gotoNode::change(), funcNode::change(), forNode::change(), exprstmtNode::change(), enumNode::change(), doNode::change(), declNode::change(), continueNode::change(), constNode::change(), conditiongotoNode::change(), commaNode::change(), castNode::change(), caseNode::change(), callNode::change(), breakNode::change(), blockNode::change(), binaryNode::change(), basicblockNode::change(), attribNode::change(), and arrayNode::change().


Constructor & Destructor Documentation

SelectionDismantle::SelectionDismantle (  void    ) 
 

Definition at line 320 of file dismantle-control.cc.


Member Function Documentation

Node * SelectionDismantle::andand_oror_in_expr (  stmtNode *   ,
Order   
)  [private]
 

Definition at line 330 of file dismantle-control.cc.

References _expr_block, _in_expr, blockNode::change(), Changer::Preorder, and blockNode::stmts().

Referenced by at_exprstmt(), and at_return().

virtual Node* Changer::at_array (  arrayNode *    the_array,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in AllocSizeChanger.

Definition at line 253 of file changer.h.

References Changer::at_type().

Referenced by arrayNode::change().

virtual Node* Changer::at_attrib (  attribNode *    the_attrib,
Order    ord
)  [inline, virtual, inherited]
 

Definition at line 364 of file changer.h.

References Changer::at_stmt().

Referenced by attribNode::change().

virtual Node* Changer::at_basicblock (  basicblockNode *    the_basicblock,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in constantFoldingChanger.

Definition at line 313 of file changer.h.

References Changer::at_block().

Referenced by basicblockNode::change().

Node * SelectionDismantle::at_binary (  binaryNode *   ,
Order   
)  [virtual]
 

Reimplemented from Changer.

Definition at line 361 of file dismantle-control.cc.

References _cur_stmt, _expr_block, _in_expr, Operator::ANDAND, Node::coord(), exprstmtNode::expr(), Operator::id(), DismantleUtil::new_temp_decl(), binaryNode::op(), Operator::OROR, Changer::Preorder, and exprNode::type().

virtual Node* Changer::at_block (  blockNode *    the_block,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in StaticToGlobalDismantle, and InitializerDismantle.

Definition at line 310 of file changer.h.

References Changer::at_stmt().

Referenced by Changer::at_basicblock(), and blockNode::change().

virtual Node* Changer::at_break (  breakNode *    the_break,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in BreakContinueChanger.

Definition at line 358 of file changer.h.

References Changer::at_jump().

Referenced by breakNode::change().

virtual Node* Changer::at_call (  callNode *    the_call,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in ExpressionDismantle.

Definition at line 301 of file changer.h.

References Changer::at_expr().

Referenced by callNode::change().

virtual Node* Changer::at_case (  caseNode *    the_case,
Order    ord
)  [inline, virtual, inherited]
 

Definition at line 325 of file changer.h.

References Changer::at_target().

Referenced by caseNode::change().

virtual Node* Changer::at_cast (  castNode *    the_cast,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in ExpressionDismantle, and CastRemover.

Definition at line 292 of file changer.h.

References Changer::at_expr().

Referenced by castNode::change().

virtual Node* Changer::at_comma (  commaNode *    the_comma,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in ExpressionDismantle.

Definition at line 295 of file changer.h.

References Changer::at_expr().

Referenced by commaNode::change().

virtual Node* Changer::at_conditiongoto (  conditiongotoNode *    the_condgoto,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in constantPropChanger, constantFoldingChanger, and constantsChanger.

Definition at line 370 of file changer.h.

References Changer::at_goto().

Referenced by conditiongotoNode::change().

virtual Node* Changer::at_const (  constNode *    the_const,
Order    ord
)  [inline, virtual, inherited]
 

Definition at line 280 of file changer.h.

References Changer::at_index().

Referenced by constNode::change().

virtual Node* Changer::at_continue (  continueNode *    the_continue,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in BreakContinueChanger.

Definition at line 355 of file changer.h.

References Changer::at_jump().

Referenced by continueNode::change().

virtual Node* Changer::at_decl (  declNode *    the_decl,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in AllocSizeChanger, StaticToGlobalDismantle, InitializerDismantle, FlattenDismantle, ref_clone_changer, and TreeFixer.

Definition at line 232 of file changer.h.

References Changer::at_def().

Referenced by Changer::at_subdecl(), and declNode::change().

virtual Node* Changer::at_def (  defNode *    the_def,
Order    ord
)  [inline, virtual, inherited]
 

Definition at line 229 of file changer.h.

References Changer::at_node().

Referenced by Changer::at_decl(), and Changer::at_proc().

virtual Node* Changer::at_do (  doNode *    the_do,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in LoopDismantle.

Definition at line 343 of file changer.h.

References Changer::at_loop().

Referenced by doNode::change().

virtual Node* Changer::at_enum (  enumNode *    the_enum,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in AllocSizeChanger.

Definition at line 268 of file changer.h.

References Changer::at_sue().

Referenced by enumNode::change().

virtual Node* Changer::at_expr (  exprNode *    the_expr,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in ipConstantsChanger.

Definition at line 274 of file changer.h.

References Changer::at_node().

Referenced by Changer::at_binary(), Changer::at_call(), Changer::at_cast(), Changer::at_comma(), Changer::at_index(), Changer::at_initializer(), Changer::at_operand(), Changer::at_ternary(), Changer::at_unary(), and metaexprNode::change().

Node * SelectionDismantle::at_exprstmt (  exprstmtNode *   ,
Order   
)  [virtual]
 

Reimplemented from Changer.

Definition at line 349 of file dismantle-control.cc.

References _cur_stmt, and andand_oror_in_expr().

virtual Node* Changer::at_for (  forNode *    the_for,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in LoopDismantle.

Definition at line 346 of file changer.h.

References Changer::at_loop().

Referenced by forNode::change().

virtual Node* Changer::at_func (  funcNode *    the_func,
Order    ord
)  [inline, virtual, inherited]
 

Definition at line 256 of file changer.h.

References Changer::at_type().

Referenced by funcNode::change().

virtual Node* Changer::at_goto (  gotoNode *    the_goto,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in FlattenDismantle.

Definition at line 352 of file changer.h.

References Changer::at_jump().

Referenced by Changer::at_conditiongoto(), and gotoNode::change().

virtual Node* Changer::at_id (  idNode *    the_id,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in UnusedDeclarationCleanupChanger, and constantsChanger.

Definition at line 283 of file changer.h.

References Changer::at_index().

Referenced by idNode::change().

Node * SelectionDismantle::at_if (  ifNode *   ,
Order   
)  [virtual]
 

Reimplemented from Changer.

Definition at line 523 of file dismantle-control.cc.

References _cur_stmt, Operator::ANDAND, Binary, comparison_operand(), Const, Node::coord(), blockNode::decls(), DismantleUtil::empty_block(), exprstmtNode::expr(), unaryNode::expr(), selectionNode::expr(), Id, Operator::id(), Operator::is_comparison(), binaryNode::left(), DismantleUtil::new_label(), DismantleUtil::new_temp_decl(), unaryNode::op(), binaryNode::op(), Operator::OROR, Changer::Preorder, binaryNode::right(), blockNode::stmts(), ifNode::true_br(), exprNode::type(), and Unary.

virtual Node* Changer::at_index (  indexNode *    the_index,
Order    ord
)  [inline, virtual, inherited]
 

Definition at line 277 of file changer.h.

References Changer::at_expr().

Referenced by Changer::at_const(), and Changer::at_id().

virtual Node* Changer::at_initializer (  initializerNode *    the_initializer,
Order    ord
)  [inline, virtual, inherited]
 

Definition at line 304 of file changer.h.

References Changer::at_expr().

Referenced by initializerNode::change().

virtual Node* Changer::at_jump (  jumpNode *    the_jump,
Order    ord
)  [inline, virtual, inherited]
 

Definition at line 349 of file changer.h.

References Changer::at_stmt().

Referenced by Changer::at_break(), Changer::at_continue(), Changer::at_goto(), and Changer::at_return().

virtual Node* Changer::at_label (  labelNode *    the_label,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in LabelDismantle, FlattenDismantle, and ref_clone_changer.

Definition at line 322 of file changer.h.

References Changer::at_target().

Referenced by labelNode::change().

virtual Node* Changer::at_loop (  loopNode *    the_loop,
Order    ord
)  [inline, virtual, inherited]
 

Definition at line 337 of file changer.h.

References Changer::at_stmt().

Referenced by Changer::at_do(), Changer::at_for(), and Changer::at_while().

virtual Node* Changer::at_node (  Node *    the_node,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in ref_clone_changer.

Definition at line 223 of file changer.h.

Referenced by Changer::at_def(), Changer::at_expr(), Changer::at_stmt(), Changer::at_text(), Changer::at_type(), and Changer::at_unit().

virtual Node* Changer::at_operand (  operandNode *    the_oper,
Order    ord
)  [inline, virtual, inherited]
 

Definition at line 367 of file changer.h.

References Changer::at_expr().

Referenced by operandNode::change().

virtual Node* Changer::at_prim (  primNode *    the_prim,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in AllocSizeChanger.

Definition at line 244 of file changer.h.

References Changer::at_type().

Referenced by primNode::change().

virtual Node* Changer::at_proc (  procNode *    the_proc,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in Dismantle, StaticToGlobalDismantle, ControlDismantle, ReturnDismantle, FlattenDismantle, function_inline, cfg_changer, copyPropChanger, deadCodeEliminationChanger, UnusedDeclarationCleanupChanger, LocalCopyPropChanger, CFS_Changer, and Optimizer.

Definition at line 238 of file changer.h.

References Changer::at_def().

Referenced by procNode::change().

virtual Node* Changer::at_ptr (  ptrNode *    the_ptr,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in AllocSizeChanger.

Definition at line 250 of file changer.h.

References Changer::at_type().

Referenced by ptrNode::change().

Node * SelectionDismantle::at_return (  returnNode *   ,
Order   
)  [virtual]
 

Reimplemented from Changer.

Definition at line 355 of file dismantle-control.cc.

References _cur_stmt, and andand_oror_in_expr().

virtual Node* Changer::at_selection (  selectionNode *    the_selection,
Order    ord
)  [inline, virtual, inherited]
 

Definition at line 328 of file changer.h.

References Changer::at_stmt().

Referenced by Changer::at_if(), and Changer::at_switch().

Node * SelectionDismantle::at_stmt (  stmtNode *   ,
Order   
)  [virtual]
 

Reimplemented from Changer.

Definition at line 687 of file dismantle-control.cc.

References _cur_stmt.

virtual Node* Changer::at_struct (  structNode *    the_struct,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in AllocSizeChanger.

Definition at line 262 of file changer.h.

References Changer::at_sue().

Referenced by structNode::change().

virtual Node* Changer::at_subdecl (  subdeclNode *    the_subdecl,
Order    ord
)  [inline, virtual, inherited]
 

Definition at line 235 of file changer.h.

References Changer::at_decl().

Referenced by subdeclNode::change().

virtual Node* Changer::at_sue (  sueNode *    the_sue,
Order    ord
)  [inline, virtual, inherited]
 

Definition at line 259 of file changer.h.

References Changer::at_type().

Referenced by Changer::at_enum(), Changer::at_struct(), and Changer::at_union().

virtual Node* Changer::at_suespec (  suespecNode *    the_suespec,
Order    ord
)  [inline, virtual, inherited]
 

Definition at line 271 of file changer.h.

References Changer::at_type().

Referenced by suespecNode::change().

Node * SelectionDismantle::at_switch (  switchNode *   ,
Order   
)  [virtual]
 

Reimplemented from Changer.

Definition at line 406 of file dismantle-control.cc.

References _cur_stmt, Case, Node::coord(), blockNode::decls(), caseNode::expr(), exprstmtNode::expr(), selectionNode::expr(), DismantleUtil::new_label(), DismantleUtil::new_temp_decl(), Changer::Preorder, targetNode::stmt(), blockNode::stmts(), target_list_p, and exprNode::type().

virtual Node* Changer::at_target (  targetNode *    the_target,
Order    ord
)  [inline, virtual, inherited]
 

Definition at line 319 of file changer.h.

References Changer::at_stmt().

Referenced by Changer::at_case(), and Changer::at_label().

virtual Node* Changer::at_tdef (  tdefNode *    the_tdef,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in AllocSizeChanger, and UpdateTdefChanger.

Definition at line 247 of file changer.h.

References Changer::at_type().

Referenced by tdefNode::change().

virtual Node* Changer::at_ternary (  ternaryNode *    the_ternary,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in TernaryDismantle.

Definition at line 298 of file changer.h.

References Changer::at_expr().

Referenced by ternaryNode::change().

virtual Node* Changer::at_text (  textNode *    the_text,
Order    ord
)  [inline, virtual, inherited]
 

Definition at line 376 of file changer.h.

References Changer::at_node().

Referenced by textNode::change().

virtual Node* Changer::at_threeAddr (  threeAddrNode *    the_3addr,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in SizeofChanger, FlattenDismantle, function_inline, constantPropChanger, constantFoldingChanger, deadCodeEliminationChanger, constantsChanger, and deadcodeChanger.

Definition at line 373 of file changer.h.

References Changer::at_stmt().

Referenced by threeAddrNode::change().

virtual Node* Changer::at_type (  typeNode *    the_type,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in TernaryDismantle, and ExpressionDismantle.

Definition at line 241 of file changer.h.

References Changer::at_node().

Referenced by Changer::at_array(), Changer::at_func(), Changer::at_prim(), Changer::at_ptr(), Changer::at_sue(), Changer::at_suespec(), and Changer::at_tdef().

virtual Node* Changer::at_unary (  unaryNode *    the_unary,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in AllocSizeChanger, and ExpressionDismantle.

Definition at line 289 of file changer.h.

References Changer::at_expr().

Referenced by unaryNode::change().

virtual Node* Changer::at_union (  unionNode *    the_union,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in AllocSizeChanger.

Definition at line 265 of file changer.h.

References Changer::at_sue().

Referenced by unionNode::change().

virtual Node* Changer::at_unit (  unitNode *    the_unit,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in Dismantle, StaticToGlobalDismantle, and Optimizer.

Definition at line 226 of file changer.h.

References Changer::at_node().

Referenced by unitNode::change().

virtual Node* Changer::at_while (  whileNode *    the_while,
Order    ord
)  [inline, virtual, inherited]
 

Reimplemented in LoopDismantle.

Definition at line 340 of file changer.h.

References Changer::at_loop().

Referenced by whileNode::change().

indexNode * SelectionDismantle::comparison_operand (  exprNode *   ,
blockNode *   
)  [private]
 

Definition at line 496 of file dismantle-control.cc.

References Const, exprstmtNode::expr(), Id, DismantleUtil::new_temp_decl(), and exprNode::type().

Referenced by at_if().

bool Changer::delete_old (    )  const [inline, inherited]
 

Return whether this Changer deletes Nodes which are removed from the AST by "at_" methods.

Definition at line 209 of file changer.h.

Referenced by subdeclNode::change(), change_list(), and Changer::Changer().

Depth Changer::depth (    )  const [inline, inherited]
 

Return which Nodes of an AST should be visited.

A value of SubTree specifies that the entire AST should be traversed. A value of NodeOnly specifies that only the root Node in the AST should be visited.

Definition at line 204 of file changer.h.

Order Changer::order (    )  const [inline, inherited]
 

Return the order in which Nodes of an AST should be visited.

Nodes can be visited before their children (Preorder), after their children (Postorder), or both (Both).

Definition at line 196 of file changer.h.

Referenced by whileNode::change(), unitNode::change(), unionNode::change(), unaryNode::change(), threeAddrNode::change(), textNode::change(), ternaryNode::change(), tdefNode::change(), switchNode::change(), suespecNode::change(), subdeclNode::change(), structNode::change(), returnNode::change(), ptrNode::change(), procNode::change(), primNode::change(), operandNode::change(), metastmtNode::change(), metaexprNode::change(), labelNode::change(), initializerNode::change(), ifNode::change(), idNode::change(), gotoNode::change(), funcNode::change(), forNode::change(), exprstmtNode::change(), enumNode::change(), doNode::change(), declNode::change(), continueNode::change(), constNode::change(), conditiongotoNode::change(), commaNode::change(), castNode::change(), caseNode::change(), callNode::change(), breakNode::change(), blockNode::change(), binaryNode::change(), basicblockNode::change(), attribNode::change(), and arrayNode::change().


Member Data Documentation

stmtNode* SelectionDismantle::_cur_stmt [private]
 

Definition at line 220 of file dismantle.h.

Referenced by at_binary(), at_exprstmt(), at_if(), at_return(), at_stmt(), and at_switch().

map<stmtNode*,blockNode*> SelectionDismantle::_expr_block [private]
 

Definition at line 219 of file dismantle.h.

Referenced by andand_oror_in_expr(), and at_binary().

bool SelectionDismantle::_in_expr [private]
 

Definition at line 221 of file dismantle.h.

Referenced by andand_oror_in_expr(), and at_binary().


The documentation for this class was generated from the following files:

Generated on August 27, 2003
Back to the C-Breeze home page