virtual typeNode * type();
This method returns NULL and can be overridden by a subclass to return the ``type'' of that node. Note: there are two senses in which we speak of the ``type'' of a node. One is the C++ sense: given a pointer to an object of an abstract class, what is the actual type of the object? The other is the parsed C sense: given a node representing an expression, what is the type of that expression (e.g., pointer, integer, etc.)? This method returns the type in the latter sense; the typ() field of Node returns the type in the former sense.
virtual typeNode * base_type(bool TdefIndir);
This method returns the ``base type'' of a node; how this differs from the ``type'' of the node depends on its parameter flag. The TdefIndir flag, if true, causes any typedef base types to be dereferenced; i.e., instead of returning a tdefNode *, base_type() will return the type referred to by the typedef.
virtual void visit(Visitor *);
This method can be overriden to provide a Visitor with something to do at that node.
virtual void walk(Walker &);
This method can be overriden to provide a Walker with something to do at that node.
virtual Node * change(Changer & , bool redispatch = false);
This method can be overriden to provide a Changer with something to do at that node.
virtual Node * clone() const =0;
This method returns a pointer to a newly allocated copy of the current node. Each subclass of Node simply overrides this method to return the result of calling the default copy constructor on itself.
virtual void output(output_context & ct, Node * par) =0;
Each subclass of Node overrides this method to send readable C code representing itself to the given output context. This method is useful for debugging. To output a node, first create an output_context that is initialized with the desired output stream. For example,
output_context oc(cout); // output to cout
Then call the node's output method as follows:
node->output(oc, NULL);