summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ghc/utils/ugen/tree.c80
-rw-r--r--ghc/utils/ugen/tree.h270
-rw-r--r--ghc/utils/ugen/tree.ugn2
3 files changed, 270 insertions, 82 deletions
diff --git a/ghc/utils/ugen/tree.c b/ghc/utils/ugen/tree.c
index f3b3c15ea2..38e3420602 100644
--- a/ghc/utils/ugen/tree.c
+++ b/ghc/utils/ugen/tree.c
@@ -1,42 +1,8 @@
+
+
#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;
{
@@ -61,16 +27,20 @@ tree mktypdef(PPgtid, PPgtdeflist)
id *Rgtid(t)
struct Stypdef *t;
{
+#ifdef UGEN_DEBUG
if(t -> tag != typdef)
- printf("gtid: illegal selection; was %d\n", t -> tag);
+ fprintf(stderr,"gtid: illegal selection; was %d\n", t -> tag);
+#endif /* UGEN_DEBUG */
return(& t -> Xgtid);
}
tree *Rgtdeflist(t)
struct Stypdef *t;
{
+#ifdef UGEN_DEBUG
if(t -> tag != typdef)
- printf("gtdeflist: illegal selection; was %d\n", t -> tag);
+ fprintf(stderr,"gtdeflist: illegal selection; was %d\n", t -> tag);
+#endif /* UGEN_DEBUG */
return(& t -> Xgtdeflist);
}
@@ -91,16 +61,20 @@ tree mkdeflist(PPgdeflist, PPgdef)
tree *Rgdeflist(t)
struct Sdeflist *t;
{
+#ifdef UGEN_DEBUG
if(t -> tag != deflist)
- printf("gdeflist: illegal selection; was %d\n", t -> tag);
+ fprintf(stderr,"gdeflist: illegal selection; was %d\n", t -> tag);
+#endif /* UGEN_DEBUG */
return(& t -> Xgdeflist);
}
tree *Rgdef(t)
struct Sdeflist *t;
{
+#ifdef UGEN_DEBUG
if(t -> tag != deflist)
- printf("gdef: illegal selection; was %d\n", t -> tag);
+ fprintf(stderr,"gdef: illegal selection; was %d\n", t -> tag);
+#endif /* UGEN_DEBUG */
return(& t -> Xgdef);
}
@@ -121,16 +95,20 @@ tree mkdef(PPgdid, PPgditemlist)
id *Rgdid(t)
struct Sdef *t;
{
+#ifdef UGEN_DEBUG
if(t -> tag != def)
- printf("gdid: illegal selection; was %d\n", t -> tag);
+ fprintf(stderr,"gdid: illegal selection; was %d\n", t -> tag);
+#endif /* UGEN_DEBUG */
return(& t -> Xgdid);
}
tree *Rgditemlist(t)
struct Sdef *t;
{
+#ifdef UGEN_DEBUG
if(t -> tag != def)
- printf("gditemlist: illegal selection; was %d\n", t -> tag);
+ fprintf(stderr,"gditemlist: illegal selection; was %d\n", t -> tag);
+#endif /* UGEN_DEBUG */
return(& t -> Xgditemlist);
}
@@ -151,22 +129,26 @@ tree mkitemlist(PPgitemlist, PPgitem)
tree *Rgitemlist(t)
struct Sitemlist *t;
{
+#ifdef UGEN_DEBUG
if(t -> tag != itemlist)
- printf("gitemlist: illegal selection; was %d\n", t -> tag);
+ fprintf(stderr,"gitemlist: illegal selection; was %d\n", t -> tag);
+#endif /* UGEN_DEBUG */
return(& t -> Xgitemlist);
}
tree *Rgitem(t)
struct Sitemlist *t;
{
+#ifdef UGEN_DEBUG
if(t -> tag != itemlist)
- printf("gitem: illegal selection; was %d\n", t -> tag);
+ fprintf(stderr,"gitem: illegal selection; was %d\n", t -> tag);
+#endif /* UGEN_DEBUG */
return(& t -> Xgitem);
}
/************** emitemlist ******************/
-tree mkemitemlist()
+tree mkemitemlist(void)
{
register struct Semitemlist *pp =
(struct Semitemlist *) malloc(sizeof(struct Semitemlist));
@@ -191,15 +173,19 @@ tree mkitem(PPgitemfunid, PPgitemtypid)
id *Rgitemfunid(t)
struct Sitem *t;
{
+#ifdef UGEN_DEBUG
if(t -> tag != item)
- printf("gitemfunid: illegal selection; was %d\n", t -> tag);
+ fprintf(stderr,"gitemfunid: illegal selection; was %d\n", t -> tag);
+#endif /* UGEN_DEBUG */
return(& t -> Xgitemfunid);
}
id *Rgitemtypid(t)
struct Sitem *t;
{
+#ifdef UGEN_DEBUG
if(t -> tag != item)
- printf("gitemtypid: illegal selection; was %d\n", t -> tag);
+ fprintf(stderr,"gitemtypid: illegal selection; was %d\n", t -> tag);
+#endif /* UGEN_DEBUG */
return(& t -> Xgitemtypid);
}
diff --git a/ghc/utils/ugen/tree.h b/ghc/utils/ugen/tree.h
index 2a71f88b1c..83bab360d2 100644
--- a/ghc/utils/ugen/tree.h
+++ b/ghc/utils/ugen/tree.h
@@ -1,5 +1,16 @@
#ifndef tree_defined
#define tree_defined
+
+#include <stdio.h>
+
+#ifndef PROTO
+#ifdef __STDC__
+#define PROTO(x) x
+#else
+#define PROTO(x) /**/
+#endif
+#endif
+
typedef enum {
typdef,
deflist,
@@ -11,39 +22,230 @@ typedef enum {
typedef struct { Ttree tag; } *tree;
-/* Compatibility defines */
-extern Ttree ttree();
+#ifdef __GNUC__
+Ttree ttree(tree t);
+extern __inline__ Ttree ttree(tree t)
+{
+ return(t -> tag);
+}
+#else /* ! __GNUC__ */
+extern Ttree ttree PROTO((tree));
+#endif /* ! __GNUC__ */
-#endif
-extern tree mktypdef();
-extern id *Rgtid();
-#define gtid(xyzxyz) (*Rgtid(xyzxyz))
-extern tree *Rgtdeflist();
-#define gtdeflist(xyzxyz) (*Rgtdeflist(xyzxyz))
-
-extern tree mkdeflist();
-extern tree *Rgdeflist();
-#define gdeflist(xyzxyz) (*Rgdeflist(xyzxyz))
-extern tree *Rgdef();
-#define gdef(xyzxyz) (*Rgdef(xyzxyz))
-
-extern tree mkdef();
-extern id *Rgdid();
-#define gdid(xyzxyz) (*Rgdid(xyzxyz))
-extern tree *Rgditemlist();
-#define gditemlist(xyzxyz) (*Rgditemlist(xyzxyz))
-
-extern tree mkitemlist();
-extern tree *Rgitemlist();
-#define gitemlist(xyzxyz) (*Rgitemlist(xyzxyz))
-extern tree *Rgitem();
-#define gitem(xyzxyz) (*Rgitem(xyzxyz))
-
-extern tree mkemitemlist();
-
-extern tree mkitem();
-extern id *Rgitemfunid();
-#define gitemfunid(xyzxyz) (*Rgitemfunid(xyzxyz))
-extern id *Rgitemtypid();
-#define gitemtypid(xyzxyz) (*Rgitemtypid(xyzxyz))
+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;
+};
+
+extern tree mktypdef PROTO((id, tree));
+#ifdef __GNUC__
+
+id *Rgtid PROTO((struct Stypdef *));
+
+extern __inline__ id *Rgtid(struct Stypdef *t)
+{
+#ifdef UGEN_DEBUG
+ if(t -> tag != typdef)
+ fprintf(stderr,"gtid: illegal selection; was %d\n", t -> tag);
+#endif /* UGEN_DEBUG */
+ return(& t -> Xgtid);
+}
+#else /* ! __GNUC__ */
+extern id *Rgtid PROTO((struct Stypdef *));
+#endif /* ! __GNUC__ */
+
+#define gtid(xyzxyz) (*Rgtid((struct Stypdef *) (xyzxyz)))
+#ifdef __GNUC__
+
+tree *Rgtdeflist PROTO((struct Stypdef *));
+
+extern __inline__ tree *Rgtdeflist(struct Stypdef *t)
+{
+#ifdef UGEN_DEBUG
+ if(t -> tag != typdef)
+ fprintf(stderr,"gtdeflist: illegal selection; was %d\n", t -> tag);
+#endif /* UGEN_DEBUG */
+ return(& t -> Xgtdeflist);
+}
+#else /* ! __GNUC__ */
+extern tree *Rgtdeflist PROTO((struct Stypdef *));
+#endif /* ! __GNUC__ */
+
+#define gtdeflist(xyzxyz) (*Rgtdeflist((struct Stypdef *) (xyzxyz)))
+
+extern tree mkdeflist PROTO((tree, tree));
+#ifdef __GNUC__
+
+tree *Rgdeflist PROTO((struct Sdeflist *));
+
+extern __inline__ tree *Rgdeflist(struct Sdeflist *t)
+{
+#ifdef UGEN_DEBUG
+ if(t -> tag != deflist)
+ fprintf(stderr,"gdeflist: illegal selection; was %d\n", t -> tag);
+#endif /* UGEN_DEBUG */
+ return(& t -> Xgdeflist);
+}
+#else /* ! __GNUC__ */
+extern tree *Rgdeflist PROTO((struct Sdeflist *));
+#endif /* ! __GNUC__ */
+
+#define gdeflist(xyzxyz) (*Rgdeflist((struct Sdeflist *) (xyzxyz)))
+#ifdef __GNUC__
+
+tree *Rgdef PROTO((struct Sdeflist *));
+
+extern __inline__ tree *Rgdef(struct Sdeflist *t)
+{
+#ifdef UGEN_DEBUG
+ if(t -> tag != deflist)
+ fprintf(stderr,"gdef: illegal selection; was %d\n", t -> tag);
+#endif /* UGEN_DEBUG */
+ return(& t -> Xgdef);
+}
+#else /* ! __GNUC__ */
+extern tree *Rgdef PROTO((struct Sdeflist *));
+#endif /* ! __GNUC__ */
+#define gdef(xyzxyz) (*Rgdef((struct Sdeflist *) (xyzxyz)))
+
+extern tree mkdef PROTO((id, tree));
+#ifdef __GNUC__
+
+id *Rgdid PROTO((struct Sdef *));
+
+extern __inline__ id *Rgdid(struct Sdef *t)
+{
+#ifdef UGEN_DEBUG
+ if(t -> tag != def)
+ fprintf(stderr,"gdid: illegal selection; was %d\n", t -> tag);
+#endif /* UGEN_DEBUG */
+ return(& t -> Xgdid);
+}
+#else /* ! __GNUC__ */
+extern id *Rgdid PROTO((struct Sdef *));
+#endif /* ! __GNUC__ */
+
+#define gdid(xyzxyz) (*Rgdid((struct Sdef *) (xyzxyz)))
+#ifdef __GNUC__
+
+tree *Rgditemlist PROTO((struct Sdef *));
+
+extern __inline__ tree *Rgditemlist(struct Sdef *t)
+{
+#ifdef UGEN_DEBUG
+ if(t -> tag != def)
+ fprintf(stderr,"gditemlist: illegal selection; was %d\n", t -> tag);
+#endif /* UGEN_DEBUG */
+ return(& t -> Xgditemlist);
+}
+#else /* ! __GNUC__ */
+extern tree *Rgditemlist PROTO((struct Sdef *));
+#endif /* ! __GNUC__ */
+
+#define gditemlist(xyzxyz) (*Rgditemlist((struct Sdef *) (xyzxyz)))
+
+extern tree mkitemlist PROTO((tree, tree));
+#ifdef __GNUC__
+
+tree *Rgitemlist PROTO((struct Sitemlist *));
+
+extern __inline__ tree *Rgitemlist(struct Sitemlist *t)
+{
+#ifdef UGEN_DEBUG
+ if(t -> tag != itemlist)
+ fprintf(stderr,"gitemlist: illegal selection; was %d\n", t -> tag);
+#endif /* UGEN_DEBUG */
+ return(& t -> Xgitemlist);
+}
+#else /* ! __GNUC__ */
+extern tree *Rgitemlist PROTO((struct Sitemlist *));
+#endif /* ! __GNUC__ */
+
+#define gitemlist(xyzxyz) (*Rgitemlist((struct Sitemlist *) (xyzxyz)))
+#ifdef __GNUC__
+
+tree *Rgitem PROTO((struct Sitemlist *));
+
+extern __inline__ tree *Rgitem(struct Sitemlist *t)
+{
+#ifdef UGEN_DEBUG
+ if(t -> tag != itemlist)
+ fprintf(stderr,"gitem: illegal selection; was %d\n", t -> tag);
+#endif /* UGEN_DEBUG */
+ return(& t -> Xgitem);
+}
+#else /* ! __GNUC__ */
+extern tree *Rgitem PROTO((struct Sitemlist *));
+#endif /* ! __GNUC__ */
+
+#define gitem(xyzxyz) (*Rgitem((struct Sitemlist *) (xyzxyz)))
+
+extern tree mkemitemlist PROTO((void));
+
+extern tree mkitem PROTO((id, id));
+#ifdef __GNUC__
+
+id *Rgitemfunid PROTO((struct Sitem *));
+
+extern __inline__ id *Rgitemfunid(struct Sitem *t)
+{
+#ifdef UGEN_DEBUG
+ if(t -> tag != item)
+ fprintf(stderr,"gitemfunid: illegal selection; was %d\n", t -> tag);
+#endif /* UGEN_DEBUG */
+ return(& t -> Xgitemfunid);
+}
+#else /* ! __GNUC__ */
+extern id *Rgitemfunid PROTO((struct Sitem *));
+#endif /* ! __GNUC__ */
+
+#define gitemfunid(xyzxyz) (*Rgitemfunid((struct Sitem *) (xyzxyz)))
+#ifdef __GNUC__
+
+id *Rgitemtypid PROTO((struct Sitem *));
+
+extern __inline__ id *Rgitemtypid(struct Sitem *t)
+{
+#ifdef UGEN_DEBUG
+ if(t -> tag != item)
+ fprintf(stderr,"gitemtypid: illegal selection; was %d\n", t -> tag);
+#endif /* UGEN_DEBUG */
+ return(& t -> Xgitemtypid);
+}
+#else /* ! __GNUC__ */
+extern id *Rgitemtypid PROTO((struct Sitem *));
+#endif /* ! __GNUC__ */
+
+#define gitemtypid(xyzxyz) (*Rgitemtypid((struct Sitem *) (xyzxyz)))
+
+#endif
diff --git a/ghc/utils/ugen/tree.ugn b/ghc/utils/ugen/tree.ugn
index 758aabae49..c27ca65997 100644
--- a/ghc/utils/ugen/tree.ugn
+++ b/ghc/utils/ugen/tree.ugn
@@ -17,7 +17,7 @@ type tree;
>;
itemlist : <
gitemlist : tree;
- gitem : tree;
+ gitem : tree;
>;
emitemlist: < >;
item : <