[project @ 1996-06-05 06:44:31 by partain]
[ghc-hetmet.git] / ghc / compiler / parser / utils.h
1 /*
2         Utility Definitions.
3 */
4
5 #ifndef __UTILS_H
6 #define __UTILS_H
7
8 /* stuff from util.c */
9 extern tree root;
10 extern list Lnil;
11 extern list all;
12
13 extern BOOLEAN nonstandardFlag;
14 extern BOOLEAN hashIds;
15 extern BOOLEAN etags;
16                                   
17 extern BOOLEAN ignoreSCC;
18                                   
19 extern unsigned hash_table_size;
20
21 void process_args PROTO((int, char **));
22
23 /* end of util.c stuff */
24
25 list mklcons    PROTO((void *h, list t)); /* if we have PROTO, we have "void *" */
26 list lapp       PROTO((list l1, void *l2));
27 list lconc      PROTO((list l1, list l2));
28
29 #define lsing(l) mklcons(l, Lnil)               /* Singleton Lists */
30 #define ldub(l1, l2) mklcons(l1, lsing(l2))     /* Two-element Lists */
31
32 #define FN fns[icontexts]
33 #define SAMEFN samefn[icontexts]
34 #define PREVPATT prevpatt[icontexts]
35
36 id installid PROTO((char *));                /* Create a new identifier */
37 hstring installHstring PROTO((int, char *)); /* Create a new literal string */
38
39 id      install_literal PROTO((char *));
40 char   *id_to_string PROTO((id));
41
42 id      qid_to_id PROTO((qid));
43 char   *qid_to_string PROTO((qid));
44 char   *qid_to_mod PROTO((qid));             /* NULL if unqual */
45 char   *qid_to_pmod PROTO((qid));            /* "?"  if unqual */
46 qid     creategid PROTO((long));
47
48 /* partain additions */
49
50 char    *xmalloc PROTO((unsigned)); /* just a GNU-style error-checking malloc */
51 int      printf  PROTO((const char *, ...));
52 int      fprintf PROTO((FILE *, const char *, ...));
53 /*varies (sun/alpha): int fputc   PROTO((char, FILE *)); */
54 int      fputs   PROTO((const char *, FILE *));
55 int      sscanf  PROTO((const char *, const char *, ...));
56 long     strtol  PROTO((const char *, char **, int));
57 size_t   fread   PROTO((void *, size_t, size_t, FILE *));
58 int      fclose  PROTO((FILE *));
59 int      isatty  PROTO((int));
60 /*extern ???       _filbuf */
61 /*extern ???     _flsbuf */
62
63 void     pprogram PROTO((tree));
64
65 void     format_string PROTO((FILE *, unsigned char *, int));
66 list     type2context PROTO((ttype));
67 pbinding createpat PROTO((pbinding, binding));
68 void     process_args PROTO((int, char **));
69 void     hash_init PROTO((void));
70 void     print_hash_table PROTO((void));
71 long int hash_index PROTO((id));
72 void     yyinit PROTO((void));
73 int      yyparse PROTO((void));
74 int      yylex PROTO((void));
75 void     setyyin PROTO((char *));
76 void     yyerror PROTO((char *));
77 void     error PROTO((char *));
78 void     hsperror PROTO((char *));
79
80 void     makeinfix PROTO((id, int, int, id, long, long, id, id, long, long, long, list));
81 struct infix *infixlookup PROTO((qid));
82 int      pprecedence PROTO((struct infix *));
83 int      pfixity PROTO((struct infix *));
84 char *   infixstr PROTO((int));
85 long     infixint PROTO((int));
86
87 void     hsincindent PROTO((void));
88 void     hssetindent PROTO((void));
89 void     hsendindent PROTO((void));
90 void     hsindentoff PROTO((void));
91
92 int      checkfixity PROTO((char *));
93 void     checksamefn PROTO((qid));
94 void     checkinpat PROTO((void));
95
96 void     expORpat PROTO((int,tree));
97 /* the "int" arg says what we want; it is one of: */
98 #define LEGIT_PATT 1
99 #define LEGIT_EXPR 2
100
101 BOOLEAN lhs_is_patt PROTO((tree));
102 tree    function PROTO((tree));
103 void    extendfn PROTO((binding, binding));
104 void    checkorder PROTO((binding));
105
106 void    checkdostmts PROTO((list));
107 void    checknobangs PROTO((ttype));
108 void    splittyconapp PROTO((ttype, qid *, list *));
109
110 /*
111 void    precparse PROTO((tree));
112 void    checkprec PROTO((tree, qid, BOOLEAN));
113 */
114
115 BOOLEAN isconstr PROTO((char *));
116 void    setstartlineno PROTO((void));
117
118 /* mattson additions */
119 char *xstrdup PROTO((char *));            /* Duplicate a string */
120 char *xstrndup PROTO((char *, unsigned)); /* Duplicate a substring */
121 char *xrealloc PROTO((char *, unsigned)); /* Re-allocate a string */
122
123 #endif /* __UTILS_H */