Main Page   Modules   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   File Members   Related Pages  

labelNode Class Reference

Label statement. More...

#include <ast.h>

Inheritance diagram for labelNode::

targetNode stmtNode Node List of all members.

Public Methods

 labelNode (const char *name, stmtNode *stmt, const Coord coord=Coord::Unknown)
 Create a new label statement. More...

virtual ~labelNode ()
 Destroy a labelNode. More...

bool is_undeclared () const
virtual void dataflow (FlowVal *v, FlowProblem &fp)
 Run the dataflow analyzer. More...

virtual Nodeclone () const
 Clone the input node. More...

virtual void output_stmt (output_context &ct, Node *par)
 Output a statement. More...

Parser methods
 labelNode (idNode *ident, stmtNode *stmt)
 Create a label from an identfier. More...

 labelNode (idNode *ident)
 Create an empty label from an identifier. More...

Accessors
Methods to get and set fields in the class.

string & name ()
void name (string name)
goto_listreferences ()
const goto_listreferences () const
AST Traversal
Methods to uniformly traverse the AST. See the documentation in the Node class.

virtual void visit (Visitor *the_visitor)
 Dispatch a Visitor. More...

virtual void walk (Walker &the_walker)
 Dispatch a Walker. More...

virtual Nodechange (Changer &the_changer, bool redispatch=false)
 Dispatch a Changer. More...


Private Attributes

string _name
 the name of the label. More...

REF goto_list _references
 the list of referring gotos. More...


Detailed Description

Label statement.

This class represents label statements. The label has a name, and a child statement inherited from targetNode. In addition, it has a list that can hold references to all the goto statements that refer to it. This information is populated during initial parsing by the goto_label_walker.

The NodeType is Label.

See also:
gotoNode , goto_label_walker


Constructor & Destructor Documentation

labelNode::labelNode const char *    name,
stmtNode   stmt,
const Coord    coord = Coord::Unknown
 

Create a new label statement.

The new label has the given name and child statement. The input string is copied and not deleted.

Parameters:
name  the name of the label (copied; not deleted)
stmt  the child statement
coord  the location of the construct in the source file.

labelNode::labelNode idNode   ident,
stmtNode   the_stmt
 

Create a label from an identfier.

labelNode::labelNode idNode   ident
 

Create an empty label from an identifier.

labelNode::~labelNode   [virtual]
 

Destroy a labelNode.

Warning:
Do not use the destructors to delete AST nodes. Instead, rely on the node garbage collector.


Member Function Documentation

Node * labelNode::change Changer   the_changer,
bool    redispatch = false
[virtual]
 

Dispatch a Changer.

This abstract method works much the walker, but allows the tree to be changed.

Parameters:
the_changer  the specific Changer object to use.
redispatch  pass true to revisit parts of the tree that have changed.

Reimplemented from Node.

virtual Node* labelNode::clone   const [inline, virtual]
 

Clone the input node.

This is not a "deep" clone, so be careful. For a deep clone, use the clone_changer class.

Returns:
a shallow copy of the node (no subtrees are copied).

Reimplemented from Node.

void labelNode::dataflow FlowVal   v,
FlowProblem   fp
[virtual]
 

Run the dataflow analyzer.

Each subclass overrides this method to define it's semantics for dataflow analysis. It alters the input flow value to reflect the effect of the node within the given flow problem, calling dataflow() on it's subtrees as necessary. See the dataflow analysis documentation for more information.

Parameters:
v  the flow value to pass through the node.
fp  the flow problem (specifying the transfer functions).

Reimplemented from Node.

bool labelNode::is_undeclared   const
 

void labelNode::name string    name [inline]
 

string& labelNode::name   [inline]
 

void labelNode::output_stmt output_context   ct,
Node   parent
[virtual]
 

Output a statement.

Reimplemented from stmtNode.

const goto_list& labelNode::references   const [inline]
 

goto_list& labelNode::references   [inline]
 

void labelNode::visit Visitor   the_visitor [virtual]
 

Dispatch a Visitor.

This abstract method is the entry point for the visitor design pattern. Each node subclass defines a visit() method that calls the appropriate at_ method in the visitor. For more information see the Visitor documentation.

Parameters:
the_visitor  the specific Visitor object to use.

Reimplemented from Node.

void labelNode::walk Walker   the_walker [virtual]
 

Dispatch a Walker.

This abstract method works much like the visitor, but instead walks the entire underlying subtree calling the appropriate at_ method at each node. For more information see the Walker documentation.

Parameters:
the_walker  the specific Walker object to use.

Reimplemented from Node.


Member Data Documentation

string labelNode::_name [private]
 

the name of the label.

REF goto_list labelNode::_references [private]
 

the list of referring gotos.

This list is initially empty, but is populated by the goto_label_walker after parsing.


The documentation for this class was generated from the following files:
Generated on Thu Jan 10 12:06:29 2002 for C-Breeze by doxygen1.2.13.1 written by Dimitri van Heesch, © 1997-2001