2 /* --------------------------------------------------------------------------
3 * Configuration options
5 * Copyright (c) The University of Nottingham and Yale University, 1994-1997.
6 * All rights reserved. See NOTICE for details and conditions of use etc...
7 * Hugs version 1.4, December 1997
9 * $RCSfile: options.h,v $
11 * $Date: 2000/03/22 18:17:12 $
12 * ------------------------------------------------------------------------*/
15 /* --------------------------------------------------------------------------
16 * Hugs paths and directories
17 * ------------------------------------------------------------------------*/
19 /* Define this as the default setting of HUGSPATH.
20 * Value may contain string "{Hugs}" (for which we will substitute the
21 * value of HUGSDIR) and should be either colon-separated (Unix)
22 * or semicolon-separated (Macintosh, Windows, DOS). Escape
23 * characters in the path string are interpreted according to normal
24 * Haskell conventions.
26 * This value can be overridden from the command line by setting the
27 * HUGSFLAGS environment variable or by storing an appropriate value
28 * for HUGSFLAGS in the registry (Win32 only). In all cases, use a
29 * string of the form -P"...".
33 /* The directory name which is substituted for the string "{Hugs}"
34 * in a path variable. This normally points to where the Hugs libraries
35 * are installed - ie so that the file HUGSDIR/lib/Prelude.hs exists
37 * "/usr/local/lib/hugs"
38 * "/usr/homes/JFHaskell/hugs"
41 * This value is ignored on Windows and Macintosh versions since
42 * it is assumed that the binary is installed in HUGSDIR.
44 * This value cannot be overridden from the command line or by using
45 * environment variables. This isn't quite as limiting as you'd think
46 * since you can always choose _not_ to use the {Hugs} variable - however,
47 * it's obviously _nicer_ to have it set correctly.
54 /* --------------------------------------------------------------------------
55 * User interface options
56 * ------------------------------------------------------------------------*/
58 /* Define if you want filenames to be converted to normal form by:
59 * o replacing relative pathnames with absolute pathnames and
60 * eliminating .. and . where possible.
61 * o converting to lower case (only in case-insensitive filesystems)
63 #define PATH_CANONICALIZATION 0
65 /* Define if you want the small startup banner.
67 #define SMALL_BANNER 0
70 /* --------------------------------------------------------------------------
72 * ------------------------------------------------------------------------*/
74 /* Define if T-REX; Typed Rows and EXtension should be enabled */
75 /* Doesn't work in current system - I don't know what the primops do */
78 /* Implicit Parameters */
81 /* Multi-instance resolution */
85 /* --------------------------------------------------------------------------
87 * ------------------------------------------------------------------------*/
94 #define CHAR_MASK 0xff
96 #define MINIMUMHEAP 19000
98 #define DEFAULTHEAP 1000000 /*350000*/
100 #define TEXT_SIZE 100000
102 #define NUM_TYVARS 4000
103 #define NUM_STACK 16000
104 #define NUM_DTUPLES 5
106 #define MAXPOSINT 0x7fffffff
107 #define MINNEGINT (-MAXPOSINT-1)
108 #define MAXHUGSWORD 0xffffffffU
110 #define minRecovery 1000
111 #define bitsPerWord 32
115 /* Should quantifiers be displayed in error messages.
116 * Warning: not consistently used.
118 #define DISPLAY_QUANTIFIERS 0
120 /* Flags to determine which raw representations and operations are available
122 * o if you turn everything on, you might end up with more then 256
123 * bytecodes: check the value of i_ccall (the lst bytecode) to check
124 * (JRS), 22apr99: I don't think any of the #undef'd ones will work
125 * without attention. However, standard Haskell 98 is supported
126 * is supported without needing them.
130 #define PROVIDE_STABLE 1
131 #define PROVIDE_FOREIGN 1
132 #define PROVIDE_COERCE 1
133 #define PROVIDE_PTREQUALITY 1
134 #define PROVIDE_CONCURRENT 1
136 /* Enable a crude profiler which counts BCO entries, bytes allocated
137 and bytecode insns executed on a per-fn basis. Used for assessing
138 the effect of the simplifier/optimiser.
140 #undef CRUDE_PROFILING
142 /* Turn bytecode interpreter support on/off.
144 #define INTERPRETER 1
146 /* Turn on debugging output and some sanity checks
150 /* NB: LAZY_BLACKHOLING has been moved up to Stg.h where both Hugs and GHC can see it,
151 * and EAGER_BLACKHOLING has been introduced also. KSW 1999-01.
154 /* Turn miniinterpreter on/off.
156 * The mininterpreter is portable but slow - if you turn it off,
157 * you'll probably need to provide some assembly language support
158 * for your architecture.
160 #define USE_MINIINTERPRETER 1
162 /* Turn registerisation on/off.
164 * If you turn this off, you'll probably need to provide some
165 * assembly language support for your architecture.
170 /* Define if :xplain should be enabled */
171 #define EXPLAIN_INSTANCE_RESOLUTION 0
174 /* Define if you want to run Haskell code through a preprocessor
176 * Note that the :reload command doesn't know about any dependencies
177 * introduced by using #include so you must :load (not :reload) if
178 * you change any #included files (such as configuration files).
180 #define USE_PREPROCESSOR 1
182 /* Define if you want to time every evaluation.
184 * Timing is included in the Hugs distribution for the purpose of benchmarking
185 * the Hugs interpreter, comparing its performance across a variety of
186 * different machines, and with other systems for similar languages.
188 * It would be somewhat foolish to try to use the timings produced in this
189 * way for any other purpose. In particular, using timings to compare the
190 * performance of different versions of an algorithm is likely to give very
191 * misleading results. The current implementation of Hugs as an interpreter,
192 * without any significant optimizations, means that there are much more
193 * significant overheads than can be accounted for by small variations in
196 /* #undef WANT_TIMER */
199 /* --------------------------------------------------------------------------
202 * These options are mostly used for developing/debugging the system.
203 * Since they turn off required parts of the Haskell language, you'll
204 * probably need to modify Prelude.hs and the libraries if you change
206 * ------------------------------------------------------------------------*/
208 /* Define if single-element dictionaries are implemented by newtype.
209 * Should be turned on. Mostly used to make it easier to find which
210 * bits of code implement this optimisation and as a way of documenting
213 #define USE_NEWTYPE_FOR_DICTS 1
215 /* Define if strings should be represented as normal C strings.
216 * Note that this doesn't work if the string contains '\0'
217 * and makes persistence problematic.
218 * Intended as a stop-gap measure until mutable byte arrays are available.
220 #define USE_ADDR_FOR_STRINGS 1
223 /* --------------------------------------------------------------------------
224 * Experimental features
225 * These are likely to disappear/change in future versions and should not
226 * be used by most people..
227 * ------------------------------------------------------------------------*/
229 /* In a plain Hugs system, most signals (SIGBUS, SIGTERM, etc) indicate
230 * some kind of error in Hugs - or maybe a stack overflow. Rather than
231 * just crash, Hugs catches these errors and returns to the main loop.
232 * It does this by calling a function "panic" which longjmp's back to the
234 * If you're developing a GreenCard library, this may not be the right
235 * behaviour - it's better if Hugs leaves them for your debugger to
236 * catch rather than trapping them and "panicking".
241 /* ----------------------------------------------------------------------- */