#include <ast.h>
Inheritance diagram for funcNode::
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 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. | |
decl_list & | args () |
const decl_list & | args () const |
typeNode * | returns () const |
void | returns (typeNode *returns) |
bool | is_knr () const |
void | is_knr (bool v) |
Type predicates | |
virtual bool | is_derived () const |
virtual bool | is_pointer () 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 decl_list | _args |
Formal parameters. More... | |
bool | _is_knr |
K-and-R style. More... |
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.
|
Create a new function type. The new function type has the given type qualifiers, argument list and return type.
|
|
Destroy a funcNode.
|
|
Add parameter types.
|
|
|
|
|
|
Dispatch a Changer. This abstract method works much the walker, but allows the tree to be changed.
Reimplemented from Node. |
|
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. |
|
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. |
|
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.
|
|
Reimplemented from typeNode. |
|
|
|
|
|
Reimplemented from typeNode. |
|
Is void argument list.
|
|
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. |
|
Formal parameters. This list contains the declarations of the formal parameters to the function. There are several special kinds of arguments:
|
|
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). |