A special kind of block node is used as the root of each AST. These
tree_proc nodes are derived from the tree_block class.
They are essentially the same as other block nodes, but they include a
few extra methods and have a slightly different kind of symbol table.
SUIF does not support nested procedures, so tree_proc nodes may
only be used at the roots of ASTs.
A procedure node's symbol table must be a proc_symtab instead of
just an ordinary block_symtab. The proc_syms method is
provided to cast the symbol table pointer to be a proc_symtab. A
tree_proc node also has a pointer to the symbol of the
corresponding procedure. This pointer is set automatically when a
tree_proc is attached to the procedure symbol. For any tree node
in an AST, the proc method retrieves this procedure symbol from
the tree_proc at the root of the tree.
Because tree_proc nodes are always at the roots of the ASTs,
their parent list pointers (see section Other Features Shared by All Tree Nodes) are
always NULL.