summaryrefslogtreecommitdiff
path: root/ghc/compiler/HsVersions.h
blob: b90e474525bd22ab675d8885fc49afa13182d962 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
#ifndef HSVERSIONS_H
#define HSVERSIONS_H

#if 0

IMPORTANT!  If you put extra tabs/spaces in these macro definitions,
you will screw up the layout where they are used in case expressions!

(This is cpp-dependent, of course)

#endif

#define COMMA ,

#ifdef DEBUG
#define ASSERT(e) if (not (e)) then (assertPanic __FILE__ __LINE__) else
#define ASSERT2(e,msg) if (not (e)) then (assertPprPanic __FILE__ __LINE__ (msg)) else
#define WARN( e, msg ) (warnPprTrace (e) __FILE__ __LINE__ (msg))
#else
#define ASSERT(e)
#define ASSERT2(e,msg)
#define WARN(e,msg)
#endif

#if __STDC__
#define CAT2(a,b)a##b
#else
#define CAT2(a,b)a/**/b
#endif

#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 202
# define REALLY_HASKELL_1_3
# define SYN_IE(a) a
# define EXP_MODULE(a) module a
# define IMPORT_DELOOPER(mod) import mod
# define IMPORT_1_3(mod) import mod
# define _Addr Addr
# define _ByteArray GlaExts.ByteArray
# define _MutableByteArray GlaExts.MutableByteArray
# define _MutableArray GlaExts.MutableArray
# define _RealWorld GlaExts.RealWorld
# define _ST GlaExts.ST
# define _ForeignObj Foreign.ForeignObj
# define _runST ST.runST
# define seqStrictlyST seqST
# define thenStrictlyST thenST
# define returnStrictlyST return
# define MkST ST
# if __GLASGOW_HASKELL__ >= 209
#  define STATE_TOK(x)    x
#  define ST_RET(x,y)     STret (y) (x)
#  define unsafePerformST(x)  runST (x)
#  define ST_TO_PrimIO(x) (stToIO (x))
# else
#  define STATE_TOK(x)  (S# x)
#  define ST_RET(x,y)   (x,y)
#  define unsafePerformST(x) unsafePerformPrimIO(x)
#  define ST_TO_PrimIO(x) x
# endif
# define failWith fail
# define MkIOError(h,errt,msg) (IOError (Just h) errt msg)
# define CCALL_THEN thenIO_Prim
# define Text Show
# define IMP_FASTSTRING() import FastString
# if __GLASGOW_HASKELL__ >= 209
#  define IMP_Ubiq() import GlaExts ; import Addr(Addr(..)); import FastString
#  define CHK_Ubiq() import GlaExts ; import Addr(Addr(..)); import FastString
# else
#  define IMP_Ubiq() import GlaExts ; import FastString
#  define CHK_Ubiq() import GlaExts ; import FastString
# endif
# define minInt (minBound::Int)
# define maxInt (maxBound::Int)
#else
# define STATE_TOK(x)  (S# x)
# define ST_RET(x,y)   (x,y)
# define unsafePerformST(x) unsafePerformPrimIO(x)
# define ST_TO_PrimIO(x) x
# define SYN_IE(a) a(..)
# define EXP_MODULE(a) a..
# define IMPORT_DELOOPER(mod) import mod
# define IMPORT_1_3(mod) {--}
# define IMP_FASTSTRING() import FastString
# define IMP_Ubiq() IMPORT_DELOOPER(Ubiq) ; import FastString
# define CHK_Ubiq() IMPORT_DELOOPER(Ubiq) ; import FastString
# define MkST
# define CCALL_THEN thenPrimIO
# define MkIOError(h,errt,msg) (errt msg)
#endif

#if defined(__GLASGOW_HASKELL__)

-- Import the beggars
import GlaExts
	( Int(..), Int#, (+#), (-#), (*#), 
	  quotInt#, negateInt#, (==#), (<#), (<=#), (>=#), (>#)
	)

#define FAST_INT Int#
#define ILIT(x) (x#)
#define IBOX(x) (I# (x))
#define _ADD_ +#
#define _SUB_ -#
#define _MUL_ *#
#define _QUOT_ `quotInt#`
#define _NEG_ negateInt#
#define _EQ_ ==#
#define _LT_ <#
#define _LE_ <=#
#define _GE_ >=#
#define _GT_ >#

#define FAST_BOOL Int#
#define _TRUE_ 1#
#define _FALSE_ 0#
#define _IS_TRUE_(x) ((x) _EQ_ 1#)

#else {- ! __GLASGOW_HASKELL__ -}

#define FAST_INT Int
#define ILIT(x) (x)
#define IBOX(x) (x)
#define _ADD_ +
#define _SUB_ -
#define _MUL_ *
#define _DIV_ `div`
#define _QUOT_ `quot`
#define _NEG_ -
#define _EQ_ ==
#define _LT_ <
#define _LE_ <=
#define _GE_ >=
#define _GT_ >

#define FAST_BOOL Bool
#define _TRUE_ True
#define _FALSE_ False
#define _IS_TRUE_(x) (x)

#endif  {- ! __GLASGOW_HASKELL__ -}

#if __GLASGOW_HASKELL__ >= 23

-- This #ifndef lets us switch off the "import FastString"
-- when compiling FastString itself
#ifndef COMPILING_FAST_STRING
-- 
import qualified FastString 
#endif

# define USE_FAST_STRINGS 1
# define FAST_STRING	FastString.FastString
# define SLIT(x)	(FastString.mkFastCharString# (x#))
# define _NULL_		FastString.nullFastString
# define _NIL_		(FastString.mkFastString "")
# define _CONS_		FastString.consFS
# define _HEAD_		FastString.headFS
# define _TAIL_		FastString.tailFS
# define _LENGTH_	FastString.lengthFS
# define _PK_		FastString.mkFastString
# define _UNPK_		FastString.unpackFS
# define _APPEND_	`FastString.appendFS`
# define _CONCAT_	FastString.concatFS
#else
# define FAST_STRING String
# define SLIT(x)      (x)
# define _CMP_STRING_ cmpString
# define _NULL_	      null
# define _NIL_	      ""
# define _CONS_	      (:)
# define _HEAD_	      head
# define _TAIL_	      tail
# define _LENGTH_     length
# define _PK_	      (\x->x)
# define _UNPK_	      (\x->x)
# define _SUBSTR_     substr{-from Utils-}
# define _APPEND_     ++
# define _CONCAT_     concat
#endif

#if __HASKELL1__ > 4
# define FMAP fmap
# define ISALPHANUM isAlphaNum
# define IOERROR ioError
# define PSEQ seq
# define SAPPLY $!
#else
# define FMAP map
# define ISALPHANUM isAlphanum
# define IOERROR fail
# define PSEQ (\x y -> y)
# define SAPPLY $
#endif

#endif