diff options
Diffstat (limited to 'sys/cmd/rc/tree.c')
-rw-r--r-- | sys/cmd/rc/tree.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/sys/cmd/rc/tree.c b/sys/cmd/rc/tree.c index 0e2146f..0f7378f 100644 --- a/sys/cmd/rc/tree.c +++ b/sys/cmd/rc/tree.c @@ -19,7 +19,7 @@ freeparsetree(void) Tree *t, *nt; for(t = nodes; t; t = nt) { nt = t->link; - if(t->str) + if(t->type == Tword && t->str) efree(t->str); efree(t); } @@ -60,6 +60,28 @@ hangchild1(Tree *node, Tree *c, int i) } Tree* +hangchild2(Tree *node, Tree *c1, int i1, Tree *c2, int i2) +{ + node->child[i1] = c1; + node->child[i2] = c2; + + return node; +} + +Tree* +hangepilog(Tree *cmd, Tree *epi) +{ + Tree *p; + if(!epi) + return cmd; + for(p = epi; p->child[1]; p = p->child[1]) + ; + + p->child[1] = cmd; + return epi; +} + +Tree* token(int type, char *s) { Tree *node = maketree(); |