[project @ 1996-01-09 18:40:14 by partain]
[ghc-hetmet.git] / ghc / utils / ugen / tree.c
diff --git a/ghc/utils/ugen/tree.c b/ghc/utils/ugen/tree.c
new file mode 100644 (file)
index 0000000..f3b3c15
--- /dev/null
@@ -0,0 +1,205 @@
+#include "id.h"
+#include "tree.h"
+
+extern char *malloc();
+
+struct Stypdef {
+       Ttree tag;
+       id Xgtid;
+       tree Xgtdeflist;
+};
+
+struct Sdeflist {
+       Ttree tag;
+       tree Xgdeflist;
+       tree Xgdef;
+};
+
+struct Sdef {
+       Ttree tag;
+       id Xgdid;
+       tree Xgditemlist;
+};
+
+struct Sitemlist {
+       Ttree tag;
+       tree Xgitemlist;
+       tree Xgitem;
+};
+
+struct Semitemlist {
+       Ttree tag;
+};
+
+struct Sitem {
+       Ttree tag;
+       id Xgitemfunid;
+       id Xgitemtypid;
+};
+
+Ttree ttree(t)
+ tree t;
+{
+       return(t -> tag);
+}
+
+
+/************** typdef ******************/
+
+tree mktypdef(PPgtid, PPgtdeflist)
+ id PPgtid;
+ tree PPgtdeflist;
+{
+       register struct Stypdef *pp =
+               (struct Stypdef *) malloc(sizeof(struct Stypdef));
+       pp -> tag = typdef;
+       pp -> Xgtid = PPgtid;
+       pp -> Xgtdeflist = PPgtdeflist;
+       return((tree)pp);
+}
+
+id *Rgtid(t)
+ struct Stypdef *t;
+{
+       if(t -> tag != typdef)
+               printf("gtid: illegal selection; was %d\n", t -> tag);
+       return(& t -> Xgtid);
+}
+
+tree *Rgtdeflist(t)
+ struct Stypdef *t;
+{
+       if(t -> tag != typdef)
+               printf("gtdeflist: illegal selection; was %d\n", t -> tag);
+       return(& t -> Xgtdeflist);
+}
+
+/************** deflist ******************/
+
+tree mkdeflist(PPgdeflist, PPgdef)
+ tree PPgdeflist;
+ tree PPgdef;
+{
+       register struct Sdeflist *pp =
+               (struct Sdeflist *) malloc(sizeof(struct Sdeflist));
+       pp -> tag = deflist;
+       pp -> Xgdeflist = PPgdeflist;
+       pp -> Xgdef = PPgdef;
+       return((tree)pp);
+}
+
+tree *Rgdeflist(t)
+ struct Sdeflist *t;
+{
+       if(t -> tag != deflist)
+               printf("gdeflist: illegal selection; was %d\n", t -> tag);
+       return(& t -> Xgdeflist);
+}
+
+tree *Rgdef(t)
+ struct Sdeflist *t;
+{
+       if(t -> tag != deflist)
+               printf("gdef: illegal selection; was %d\n", t -> tag);
+       return(& t -> Xgdef);
+}
+
+/************** def ******************/
+
+tree mkdef(PPgdid, PPgditemlist)
+ id PPgdid;
+ tree PPgditemlist;
+{
+       register struct Sdef *pp =
+               (struct Sdef *) malloc(sizeof(struct Sdef));
+       pp -> tag = def;
+       pp -> Xgdid = PPgdid;
+       pp -> Xgditemlist = PPgditemlist;
+       return((tree)pp);
+}
+
+id *Rgdid(t)
+ struct Sdef *t;
+{
+       if(t -> tag != def)
+               printf("gdid: illegal selection; was %d\n", t -> tag);
+       return(& t -> Xgdid);
+}
+
+tree *Rgditemlist(t)
+ struct Sdef *t;
+{
+       if(t -> tag != def)
+               printf("gditemlist: illegal selection; was %d\n", t -> tag);
+       return(& t -> Xgditemlist);
+}
+
+/************** itemlist ******************/
+
+tree mkitemlist(PPgitemlist, PPgitem)
+ tree PPgitemlist;
+ tree PPgitem;
+{
+       register struct Sitemlist *pp =
+               (struct Sitemlist *) malloc(sizeof(struct Sitemlist));
+       pp -> tag = itemlist;
+       pp -> Xgitemlist = PPgitemlist;
+       pp -> Xgitem = PPgitem;
+       return((tree)pp);
+}
+
+tree *Rgitemlist(t)
+ struct Sitemlist *t;
+{
+       if(t -> tag != itemlist)
+               printf("gitemlist: illegal selection; was %d\n", t -> tag);
+       return(& t -> Xgitemlist);
+}
+
+tree *Rgitem(t)
+ struct Sitemlist *t;
+{
+       if(t -> tag != itemlist)
+               printf("gitem: illegal selection; was %d\n", t -> tag);
+       return(& t -> Xgitem);
+}
+
+/************** emitemlist ******************/
+
+tree mkemitemlist()
+{
+       register struct Semitemlist *pp =
+               (struct Semitemlist *) malloc(sizeof(struct Semitemlist));
+       pp -> tag = emitemlist;
+       return((tree)pp);
+}
+
+/************** item ******************/
+
+tree mkitem(PPgitemfunid, PPgitemtypid)
+ id PPgitemfunid;
+ id PPgitemtypid;
+{
+       register struct Sitem *pp =
+               (struct Sitem *) malloc(sizeof(struct Sitem));
+       pp -> tag = item;
+       pp -> Xgitemfunid = PPgitemfunid;
+       pp -> Xgitemtypid = PPgitemtypid;
+       return((tree)pp);
+}
+
+id *Rgitemfunid(t)
+ struct Sitem *t;
+{
+       if(t -> tag != item)
+               printf("gitemfunid: illegal selection; was %d\n", t -> tag);
+       return(& t -> Xgitemfunid);
+}
+
+id *Rgitemtypid(t)
+ struct Sitem *t;
+{
+       if(t -> tag != item)
+               printf("gitemtypid: illegal selection; was %d\n", t -> tag);
+       return(& t -> Xgitemtypid);
+}