[project @ 1999-06-01 16:15:42 by simonmar]
[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 extern BOOLEAN warnSCC;
19                                   
20 extern unsigned hash_table_size;
21
22 void process_args PROTO((int, char **));
23
24 /* end of util.c stuff */
25
26 list mklcons    PROTO((void *h, list t)); /* if we have PROTO, we have "void *" */
27 list lapp       PROTO((list l1, void *l2));
28 list lconc      PROTO((list l1, list l2));
29
30 #define lsing(l) mklcons(l, Lnil)               /* Singleton Lists */
31 #define ldub(l1, l2) mklcons(l1, lsing(l2))     /* Two-element Lists */
32
33 #define FN fns[icontexts]
34 #define SAMEFN samefn[icontexts]
35 #define PREVPATT prevpatt[icontexts]
36
37 id installid PROTO((char *));                /* Create a new identifier */
38 hstring installHstring PROTO((int, char *)); /* Create a new literal string */
39
40 id      install_literal PROTO((char *));
41 char   *id_to_string PROTO((id));
42
43 id      qid_to_id PROTO((qid));
44 char   *qid_to_string PROTO((qid));
45 char   *qid_to_mod PROTO((qid));             /* NULL if unqual */
46 char   *qid_to_pmod PROTO((qid));            /* "?"  if unqual */
47 qid     creategid PROTO((long));
48
49 /* partain additions */
50
51 char    *xmalloc PROTO((unsigned)); /* just a GNU-style error-checking malloc */
52 int      printf  PROTO((const char *, ...));
53 int      fprintf PROTO((FILE *, const char *, ...));
54 /*varies (sun/alpha): int fputc   PROTO((char, FILE *)); */
55 int      fputs   PROTO((const char *, FILE *));
56 int      sscanf  PROTO((const char *, const char *, ...));
57 long     strtol  PROTO((const char *, char **, int));
58 size_t   fread   PROTO((void *, size_t, size_t, FILE *));
59 int      fclose  PROTO((FILE *));
60 int      isatty  PROTO((int));
61 /*extern ???       _filbuf */
62 /*extern ???     _flsbuf */
63
64 void     pprogram PROTO((tree));
65
66 void     format_string PROTO((FILE *, unsigned char *, int));
67 list     type2context PROTO((ttype));
68 void     is_context_format PROTO((ttype, int));
69 void     process_args PROTO((int, char **));
70 void     hash_init PROTO((void));
71 void     print_hash_table PROTO((void));
72 long int hash_index PROTO((id));
73 void     yyinit PROTO((void));
74 int      yyparse PROTO((void));
75 int      yylex PROTO((void));
76 void     setyyin PROTO((char *));
77 void     yyerror PROTO((char *));
78 void     error PROTO((char *));
79 void     hsperror PROTO((char *));
80
81 void     makeinfix PROTO((id, int, int, id, long, long, id, id, long, long, long, list));
82 struct infix *infixlookup PROTO((qid));
83 int      pprecedence PROTO((struct infix *));
84 int      pfixity PROTO((struct infix *));
85 char *   infixstr PROTO((int));
86 long     infixint PROTO((int));
87
88 void     hsincindent PROTO((void));
89 void     hssetindent PROTO((void));
90 void     hsendindent PROTO((void));
91 void     hsindentoff PROTO((void));
92
93 int      checkfixity PROTO((char *));
94 void     checksamefn PROTO((tree));
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 /* FFI predefines */
116 #define CALLCONV_NONE     (-1)
117 #define CALLCONV_STDCALL  0
118 #define CALLCONV_CCALL    1
119 #define CALLCONV_PASCAL   2
120 #define CALLCONV_FASTCALL 3
121
122 #define FOREIGN_IMPORT    0
123 #define FOREIGN_EXPORT    1
124 #define FOREIGN_LABEL     2
125
126 BOOLEAN isconstr PROTO((char *));
127 void    setstartlineno PROTO((void));
128
129 /* mattson additions */
130 char *xstrdup PROTO((char *));            /* Duplicate a string */
131 char *xstrndup PROTO((char *, unsigned)); /* Duplicate a substring */
132 char *xrealloc PROTO((char *, unsigned)); /* Re-allocate a string */
133
134 #endif /* __UTILS_H */