summaryrefslogtreecommitdiff
path: root/Parser/node.c
diff options
context:
space:
mode:
Diffstat (limited to 'Parser/node.c')
-rw-r--r--Parser/node.c34
1 files changed, 20 insertions, 14 deletions
diff --git a/Parser/node.c b/Parser/node.c
index 264fd9e8a1..024dbd4668 100644
--- a/Parser/node.c
+++ b/Parser/node.c
@@ -1,11 +1,10 @@
/* Parse tree node implementation */
-#include "PROTO.h"
-#include "malloc.h"
+#include "pgenheaders.h"
#include "node.h"
node *
-newnode(type)
+newtree(type)
int type;
{
node *n = NEW(node, 1);
@@ -13,6 +12,7 @@ newnode(type)
return NULL;
n->n_type = type;
n->n_str = NULL;
+ n->n_lineno = 0;
n->n_nchildren = 0;
n->n_child = NULL;
return n;
@@ -22,10 +22,11 @@ newnode(type)
#define XXXROUNDUP(n) ((n) == 1 ? 1 : ((n) + XXX - 1) / XXX * XXX)
node *
-addchild(n1, type, str)
+addchild(n1, type, str, lineno)
register node *n1;
int type;
char *str;
+ int lineno;
{
register int nch = n1->n_nchildren;
register int nch1 = nch+1;
@@ -41,11 +42,26 @@ addchild(n1, type, str)
n = &n1->n_child[n1->n_nchildren++];
n->n_type = type;
n->n_str = str;
+ n->n_lineno = lineno;
n->n_nchildren = 0;
n->n_child = NULL;
return n;
}
+/* Forward */
+static void freechildren PROTO((node *));
+
+
+void
+freetree(n)
+ node *n;
+{
+ if (n != NULL) {
+ freechildren(n);
+ DEL(n);
+ }
+}
+
static void
freechildren(n)
node *n;
@@ -58,13 +74,3 @@ freechildren(n)
if (STR(n) != NULL)
DEL(STR(n));
}
-
-void
-freenode(n)
- node *n;
-{
- if (n != NULL) {
- freechildren(n);
- DEL(n);
- }
-}