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

arrayNode Class Reference

Array type node. More...

#include <ast.h>

Inheritance diagram for arrayNode::

typeNode Node List of all members.

Public Methods

 arrayNode (Type_qualifiers tq, typeNode *the_type, exprNode *the_dim, const Coord coord=Coord::Unknown)
 Create a new array type. More...

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

bool qualified_equal_to (typeNode *node2, bool strict_toplevel, bool strict_recursive)
 Virtual type comparison routine. More...

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

virtual void output_type (output_context &ct, Node *par, Assoc context, Type_qualifiers q)
 Output a type. More...

Accessors
Methods to get and set fields in the class.

exprNodedim () const
exprNodeget_dim ()
void dim (exprNode *the_dim)
int size () const
void size (int the_size)
Type predicates
These methods support a variety of useful type predicates, most of which are self-explanatory. Each typeNode subclass overrides the methods for which it returns true. See typeNode for details.

virtual bool is_aggregate () const
virtual bool is_derived () const
virtual bool is_pointer () const
virtual bool is_scalar () const
bool is_string () 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

TREE exprNode_dim
 Array size expression. More...

int _size
 Array size. More...


Detailed Description

Array type node.

This class represents array types, where the sub-type is the type of the array elements. Note that we automatically break multi-dimensional arrays into nested array types. For example, "int A[3][5]" is represented as: arrayNode [3] --> arrayNode [5] --> primNode (int)

We recognize the equivalence between an array of elements and a pointer to the element type. In particular, for the purposes of parameter passing, an array is a pointer to the element type. Formal array parameters have no size expression because they accept any array of the given element type.

We also recognize that an array of char is a string. All string constants will have this type.

The NodeType is Array.

See also:
ptrNode , constNode


Constructor & Destructor Documentation

arrayNode::arrayNode Type_qualifiers    tq,
typeNode   the_type,
exprNode   the_dim,
const Coord    coord = Coord::Unknown
 

Create a new array type.

The new type has the given type qualifiers, element type, and size expression.

Parameters:
tq  the type qualifiers
the_type  the type of the array element
the_dim  the expression indicating the size of the array
coord  the location of the construct in the source file.

arrayNode::~arrayNode   [virtual]
 

Destroy a arrayNode.

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


Member Function Documentation

Node * arrayNode::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* arrayNode::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 arrayNode::dim exprNode   the_dim [inline]
 

exprNode* arrayNode::dim   const [inline]
 

exprNode* arrayNode::get_dim   [inline]
 

virtual bool arrayNode::is_aggregate   const [inline, virtual]
 

Reimplemented from typeNode.

virtual bool arrayNode::is_derived   const [inline, virtual]
 

Reimplemented from typeNode.

virtual bool arrayNode::is_pointer   const [inline, virtual]
 

Reimplemented from typeNode.

virtual bool arrayNode::is_scalar   const [inline, virtual]
 

Reimplemented from typeNode.

bool arrayNode::is_string   const
 

void arrayNode::output_type output_context   ct,
Node   parent,
Assoc    context,
Type_qualifiers    q
[virtual]
 

Output a type.

Reimplemented from typeNode.

bool arrayNode::qualified_equal_to typeNode   node2,
bool    strict_toplevel,
bool    strict_recursive
[virtual]
 

Virtual type comparison routine.

Each typeNode subclass overrides this routine to provide its specific type comparison. This is used by the static equal_to() method to perform general deep type comparison.

See also:
equal_to()
Parameters:
other  the type to compare against
strict_toplevel  pass true to require strict comparison of top-level types
strict_recursive  pass true to require strict comparson of sub-types
Returns:
true, if the types pass the equality test

Reimplemented from typeNode.

void arrayNode::size int    the_size [inline]
 

int arrayNode::size   const [inline]
 

void arrayNode::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 arrayNode::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

TREE exprNode* arrayNode::_dim [private]
 

Array size expression.

This expression holds the size of the array. Since an array size can be any constant expression, we store the expression as-is, and use the exprNode::eval() functions to determine the actual numeric size when necessary.

See also:
exprNode::eval()

int arrayNode::_size [private]
 

Array size.

Currently unused, this could hold the actual size of the array computed by evaluating the size expression.

See also:
_dim , exprNode::eval()


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