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

funcNode Class Reference

Function type node. More...

#include <ast.h>

Inheritance diagram for funcNode::

typeNode Node List of all members.

Public Methods

 funcNode (Type_qualifiers tq, decl_list *args, typeNode *returns, const Coord coord=Coord::Unknown)
 Create a new function type. More...

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

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

bool is_void_args ()
 Is void argument list. More...

bool check_conversions ()
 Check conversions. More...

bool is_compatible_with (funcNode *nfunc)
 Compare two functions for compatibility. More...

void add_parameter_types (decl_list *types)
 Add parameter types. 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.

decl_listargs ()
const decl_listargs () const
typeNodereturns () const
void returns (typeNode *returns)
bool is_knr () const
void is_knr (bool v)
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_derived () const
virtual bool is_pointer () 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 decl_list _args
 Formal parameters. More...

bool _is_knr
 K-and-R style. More...


Detailed Description

Function type node.

This class represents function types. It is used for both procedure definitions, and for declaring variables of type pointer-to-function. The sub-type is used to hold the return type of the function.

The NodeType is Func.


Constructor & Destructor Documentation

funcNode::funcNode Type_qualifiers    tq,
decl_list   args,
typeNode   returns,
const Coord    coord = Coord::Unknown
 

Create a new function type.

The new function type has the given type qualifiers, argument list and return type.

Parameters:
tq  the type qualifiers
args  the arguments, which are removed and the list deleted
returns  the return type
coord  the location of the construct in the source file.

funcNode::~funcNode   [virtual]
 

Destroy a funcNode.

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


Member Function Documentation

void funcNode::add_parameter_types decl_list   types
 

Add parameter types.

const decl_list& funcNode::args   const [inline]
 

decl_list& funcNode::args   [inline]
 

Node * funcNode::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.

bool funcNode::check_conversions  
 

Check conversions.

This method may be obsolete. It just calls typeNode::usual_unary_conversion_type() on each argument, returning false if any of the resulting types are incompatible with the original types.

virtual Node* funcNode::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.

bool funcNode::is_compatible_with funcNode *    nfunc
 

Compare two functions for compatibility.

From ANSI 6.5.4.3, this method compares two function types for compatibility. This is the basis for the type comparison of this type. See the ANSI standard for the rules.

Parameters:
nfunc  the other function type to compare against
Returns:
true if they are compatible

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

Reimplemented from typeNode.

void funcNode::is_knr bool    v [inline]
 

bool funcNode::is_knr   const [inline]
 

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

Reimplemented from typeNode.

bool funcNode::is_void_args  
 

Is void argument list.

Returns:
true if the argument list is void

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

Output a type.

Reimplemented from typeNode.

bool funcNode::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 funcNode::returns typeNode   returns [inline]
 

typeNode* funcNode::returns   const [inline]
 

void funcNode::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 funcNode::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 decl_list funcNode::_args [private]
 

Formal parameters.

This list contains the declarations of the formal parameters to the function. There are several special kinds of arguments:

  • An empty list of arguments. This indicates a function declaration that does not specify the input parameters.
  • A list with one argument and that argument is a declaration with no name and primitive type void. This indicates a function that takes no arguments.
  • Arguments with types, but no names. These are abstract declarators.
  • The last argument has primitive type ellipsis and no name. This indicates a variable argument function, such as printf.
The class provides methods to conveniently check for these cases.

bool funcNode::_is_knr [private]
 

K-and-R style.

True if the function type was parsed from an old K-and-R style declaration (argument types separate from the argument list).


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