#include <ast.h>
Inheritance diagram for arrayNode::
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 Node * | clone () 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. | |
exprNode * | dim () const |
exprNode * | get_dim () |
void | dim (exprNode *the_dim) |
int | size () const |
void | size (int the_size) |
Type predicates | |
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 | |
virtual void | visit (Visitor *the_visitor) |
Dispatch a Visitor. More... | |
virtual void | walk (Walker &the_walker) |
Dispatch a Walker. More... | |
virtual Node * | change (Changer &the_changer, bool redispatch=false) |
Dispatch a Changer. More... | |
Private Attributes | |
TREE exprNode * | _dim |
Array size expression. More... | |
int | _size |
Array size. More... |
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.
|
Create a new array type. The new type has the given type qualifiers, element type, and size expression.
|
|
Destroy a arrayNode.
|
|
Dispatch a Changer. This abstract method works much the walker, but allows the tree to be changed.
Reimplemented from Node. |
|
Clone the input node. This is not a "deep" clone, so be careful. For a deep clone, use the clone_changer class.
Reimplemented from Node. |
|
|
|
|
|
|
|
Reimplemented from typeNode. |
|
Reimplemented from typeNode. |
|
Reimplemented from typeNode. |
|
Reimplemented from typeNode. |
|
|
|
Output a type.
Reimplemented from typeNode. |
|
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.
Reimplemented from typeNode. |
|
|
|
|
|
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.
Reimplemented from Node. |
|
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.
Reimplemented from Node. |
|
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.
|
|
Array size. Currently unused, this could hold the actual size of the array computed by evaluating the size expression.
|