ack/lang/m2/comp/node.c

75 lines
1.3 KiB
C
Raw Normal View History

1986-04-06 17:42:56 +00:00
/* N O D E O F A N A B S T R A C T P A R S E T R E E */
1986-05-01 19:06:53 +00:00
#ifndef NORCSID
1986-04-06 17:42:56 +00:00
static char *RcsId = "$Header$";
1986-05-01 19:06:53 +00:00
#endif
#include "debug.h"
1986-04-06 17:42:56 +00:00
#include <em_label.h>
#include <em_arith.h>
#include <alloc.h>
1986-04-07 17:40:38 +00:00
#include <system.h>
1986-05-01 19:06:53 +00:00
1986-04-06 17:42:56 +00:00
#include "def.h"
#include "type.h"
#include "LLlex.h"
#include "node.h"
struct node *h_node; /* header of free list */
struct node *
MkNode(class, left, right, token)
struct node *left, *right;
struct token *token;
{
/* Create a node and initialize it with the given parameters
*/
register struct node *nd = new_node();
nd->nd_left = left;
nd->nd_right = right;
nd->nd_token = *token;
nd->nd_class = class;
nd->nd_type = NULLTYPE;
1986-04-07 17:40:38 +00:00
DO_DEBUG(4,(debug("Create node:"), PrNode(nd)));
1986-04-06 17:42:56 +00:00
return nd;
}
FreeNode(nd)
register struct node *nd;
{
/* Put nodes that are no longer needed back onto the free
list
*/
1986-04-12 02:21:24 +00:00
if (!nd) return;
1986-04-06 17:42:56 +00:00
if (nd->nd_left) FreeNode(nd->nd_left);
if (nd->nd_right) FreeNode(nd->nd_right);
free_node(nd);
}
1986-04-07 17:40:38 +00:00
#ifdef DEBUG
extern char *symbol2str();
static
printnode(nd)
register struct node *nd;
{
fprint(STDERR, "(");
if (nd) {
printnode(nd->nd_left);
fprint(STDERR, " %s ", symbol2str(nd->nd_symb));
printnode(nd->nd_right);
}
fprint(STDERR, ")");
}
PrNode(nd)
struct node *nd;
{
printnode(nd);
fprint(STDERR, "\n");
}
#endif DEBUG