[project @ 1999-11-25 10:19:15 by sewardj]
[ghc-hetmet.git] / ghc / interpreter / connect.h
1 /* --------------------------------------------------------------------------
2  * Connections between components of the Hugs system
3  *
4  * The Hugs 98 system is Copyright (c) Mark P Jones, Alastair Reid, the
5  * Yale Haskell Group, and the Oregon Graduate Institute of Science and
6  * Technology, 1994-1999, All rights reserved.  It is distributed as
7  * free software under the license in the file "License", which is
8  * included in the distribution.
9  *
10  * $RCSfile: connect.h,v $
11  * $Revision: 1.18 $
12  * $Date: 1999/11/25 10:19:15 $
13  * ------------------------------------------------------------------------*/
14
15 /* --------------------------------------------------------------------------
16  * Standard data:
17  * ------------------------------------------------------------------------*/
18
19 extern Bool   haskell98;                /* TRUE => Haskell 98 compatibility*/
20 extern Module modulePrelude;
21
22 /* --------------------------------------------------------------------------
23  * Primitive constructor functions 
24  * ------------------------------------------------------------------------*/
25
26 extern Name  nameFalse, nameTrue;
27 extern Name  nameNil,   nameCons;
28 extern Name  nameJust,  nameNothing;
29 extern Name  nameLeft,  nameRight;
30 extern Name  nameUnit;
31
32 extern Name  nameLT,      nameEQ;
33 extern Name  nameGT;
34 extern Name  nameFst,     nameSnd;      /* standard combinators            */
35 extern Name  nameId,      nameOtherwise;
36 extern Name  nameNegate,  nameFlip;     /* primitives reqd for parsing     */
37 extern Name  nameFrom,    nameFromThen;
38 extern Name  nameFromTo,  nameFromThenTo;
39 extern Name  nameFatbar,  nameFail;     /* primitives reqd for translation */
40 extern Name  nameIf,      nameSel;
41 extern Name  nameCompAux;
42 extern Name  namePmInt,   namePmFlt;    /* primitives for pattern matching */
43 extern Name  namePmInteger;
44 #if NPLUSK
45 extern Name  namePmNpk,   namePmSub;    /* primitives for (n+k) patterns   */
46 #endif
47 extern Name  nameError;                 /* For runtime error messages      */
48 extern Name  nameUndefined;             /* A generic undefined value       */
49 extern Name  nameBlackHole;             /* For GC-detected black hole      */
50 extern Name  nameInd;                   /* For dict indirection            */
51 extern Name  nameAnd,     nameOr;       /* For optimisation of && and ||   */
52 extern Name  nameFromInt, nameFromDouble;/*coercion of numerics            */
53 extern Name  nameFromInteger;
54 extern Name  nameEq,      nameCompare;  /* names used for deriving         */
55 extern Name  nameMinBnd,  nameMaxBnd;
56 extern Name  nameIndex,   nameInRange;
57 extern Name  nameRange;
58 extern Name  nameLe,      nameGt;
59 extern Name  nameShowsPrec, nameReadsPrec;
60 extern Name  nameMult,    namePlus;
61 extern Name  nameConCmp,  nameEnRange;
62 extern Name  nameEnIndex, nameEnInRng;
63 extern Name  nameEnToEn,  nameEnFrEn;
64 extern Name  nameEnFrom,  nameEnFrTh;
65 extern Name  nameEnFrTo;
66 extern Name  nameComp,    nameApp;      /* composition and append          */
67 extern Name  nameShowField;             /* display single field            */
68 extern Name  nameShowParen;             /* wrap with parens                */
69 extern Name  nameReadField;             /* read single field               */
70 extern Name  nameReadParen;             /* unwrap from parens              */
71 extern Name  nameLex;                   /* lexer                           */
72 extern Name  nameRangeSize;             /* calculate size of index range   */
73 extern Class classMonad;                /* Monads                          */
74 extern Name  nameReturn,  nameBind;     /* for translating monad comps     */
75 extern Name  nameMFail;
76 extern Name  nameListMonad;             /* builder function for List Monad */
77 extern Name  namePrint;                 /* printing primitive              */
78 extern Name  nameCreateAdjThunk;        /* f-x-dyn: create adjustor thunk  */
79 extern Text  textPrelude;
80 extern Text  textNum;                   /* used to process default decls   */
81 extern Text  textCcall;                 /* used to process foreign import  */
82 extern Text  textStdcall;               /*         ... and foreign export  */
83
84 #if    NPLUSK
85 extern Text  textPlus;                  /* Used to recognise n+k patterns  */
86 #endif
87 #if TREX
88 extern Name  nameNoRec;                 /* The empty record                */
89 extern Type  typeNoRow;                 /* The empty row                   */
90 extern Type  typeRec;                   /* Record formation                */
91 extern Kind  extKind;                   /* Kind of extension, *->row->row  */
92 extern Name  nameRecExt;                /* Extend a record                 */
93 extern Name  nameRecBrk;                /* Break a record                  */
94 extern Name  nameAddEv;                 /* Addition of evidence values     */
95 extern Name  nameRecSel;                /* Select a record                 */
96 extern Name  nameRecShw;                /* Show a record                   */
97 extern Name  nameShowRecRow;            /* Used to output rows             */
98 extern Name  nameRecEq;                 /* Compare records                 */
99 extern Name  nameEqRecRow;              /* Used to compare rows            */
100 extern Name  nameInsFld;                /* Field insertion routine         */
101 #endif
102
103 extern String repeatStr;                /* Repeat last command string      */
104 extern String hugsEdit;                 /* String for editor command       */
105 extern String hugsPath;                 /* String for file search path     */
106 extern String projectPath;              /* String for project search path  */
107
108 extern Type  typeProgIO;                /* For the IO monad, IO a          */
109 extern Type  typeArrow;                 /* Builtin type constructors       */
110 extern Type  typeList;
111 extern Type  typeUnit;
112
113 #define fn(from,to)  ap(ap(typeArrow,from),to)  /* make type: from -> to   */
114
115 extern List  stdDefaults;               /* List of standard default types  */
116
117 extern Class classEq;                   /* `standard' classes              */
118 extern Class classOrd;
119 extern Class classShow;
120 extern Class classRead;
121 extern Class classIx;
122 extern Class classEnum;
123 extern Class classBounded;
124
125 extern Class classReal;                 /* `numeric' classes               */
126 extern Class classIntegral;
127 extern Class classRealFrac;
128 extern Class classRealFloat;
129 extern Class classFractional;
130 extern Class classFloating;
131 extern Class classNum;
132
133 extern Cell  *CStackBase;               /* pointer to base of C stack      */
134
135 extern List  tyconDefns;                /* list of type constructor defns  */
136 extern List  typeInDefns;               /* list of synonym restrictions    */
137 extern List  valDefns;                  /* list of value definitions       */
138 extern List  classDefns;                /* list of class definitions       */
139 extern List  instDefns;                 /* list of instance definitions    */
140 extern List  selDefns;                  /* list of selector lists          */
141 extern List  genDefns;                  /* list of generated defns         */
142 extern List  primDefns;                 /* list of primitive definitions   */
143 extern List  unqualImports;             /* unqualified import list         */
144 extern List  defaultDefns;              /* default definitions (if any)    */
145 extern Int   defaultLine;               /* line in which default defs occur*/
146 extern List  evalDefaults;              /* defaults for evaluator          */
147 extern Cell  inputExpr;                 /* evaluator input expression      */
148 extern Cell  inputContext;              /* evaluator input expression      */
149 extern Addr  inputCode;                 /* Code for compiled input expr    */
150
151 extern Int   whnfArgs;                  /* number of args of term in whnf  */
152 extern Cell  whnfHead;                  /* head of term in whnf            */
153 extern Int   whnfInt;                   /* integer value of term in whnf   */
154 extern Float whnfFloat;                 /* float value of term in whnf     */
155 extern Long  numCells;                  /* number of cells allocated       */
156 extern Int   numGcs;                    /* number of garbage collections   */
157 extern Bool  broken;                    /* indicates interrupt received    */
158 extern Bool  preludeLoaded;             /* TRUE => prelude has been loaded */
159
160 extern Bool  gcMessages;                /* TRUE => print GC messages       */
161 extern Bool  literateScripts;           /* TRUE => default lit scripts     */
162 extern Bool  literateErrors;            /* TRUE => report errs in lit scrs */
163 extern Bool  showInstRes;               /* TRUE => show instance resolution */
164
165 extern Int   cutoff;                    /* Constraint Cutoff depth         */
166
167 #if USE_PREPROCESSOR
168 extern String preprocessor;             /* preprocessor command            */
169 #endif
170
171 #if DEBUG_CODE
172 extern Bool  debugCode;                 /* TRUE => print G-code to screen  */
173 #endif
174 #if DEBUG_SHOWSC
175 extern Bool  debugSC;                   /* TRUE => print SC to screen  */
176 extern Void  printSc Args((FILE*, Text, Int, Cell));
177 #endif
178 extern Bool  kindExpert;                /* TRUE => display kind errors in  */
179                                         /*         full detail             */
180 extern Bool  allowOverlap;              /* TRUE => allow overlapping insts */
181
182 /* --------------------------------------------------------------------------
183  * Function prototypes etc...
184  * ------------------------------------------------------------------------*/
185
186 extern Void everybody Args((Int));
187
188 #define RESET   1               /* reset subsystem                         */
189 #define MARK    2               /* mark parts of graph in use by subsystem */
190 #define INSTALL 3               /* install subsystem (executed once only)  */
191 #define EXIT    4               /* Take action immediately before exit()   */
192 #define BREAK   5               /* Take action after program break         */
193 #define GCDONE  6               /* Restore subsystem invariantss after GC  */
194
195 typedef long   Target;
196 extern  Void   setGoal          Args((String, Target));
197 extern  Void   soFar            Args((Target));
198 extern  Void   done             Args((Void));
199 extern  String fromEnv          Args((String,String));
200 extern  Bool   chase            Args((List));
201
202 extern  Void   storage          Args((Int));
203
204 extern  Void   input            Args((Int));
205 extern  Void   consoleInput     Args((String));
206 extern  Void   projInput        Args((String));
207 extern  Void   stringInput      Args((String));
208 extern  Void   parseScript      Args((String,Long));
209 extern  Void   parseExp         Args((Void));
210 #if EXPLAIN_INSTANCE_RESOLUTION
211 extern  Void   parseContext     Args((Void));
212 #endif
213 extern  String readFilename     Args((Void));
214 extern  String readLine         Args((Void));
215 extern  Syntax defaultSyntax    Args((Text));
216 extern  Syntax syntaxOf         Args((Name));
217 extern  String unlexChar        Args((Char,Char));
218 extern  Void   printString      Args((String));
219
220 extern  Void   substitution     Args((Int));
221 extern  Void   optimiser        Args((Int));
222
223 extern  Void   staticAnalysis   Args((Int));
224 extern  Void   startModule      Args((Cell));
225 extern  Void   setExportList    Args((List));
226 extern  Void   setExports       Args((List));
227 extern  Void   addQualImport    Args((Text,Text));
228 extern  Void   addUnqualImport  Args((Text,List));
229
230 extern  Void   tyconDefn        Args((Int,Cell,Cell,Cell));
231 extern  Void   setTypeIns       Args((List));
232 extern  Void   clearTypeIns     Args((Void));
233 extern  Type   fullExpand       Args((Type));
234 extern  Bool   isAmbiguous      Args((Type));
235 extern  Void   ambigError       Args((Int,String,Cell,Type));
236 extern  Void   classDefn        Args((Int,Cell,List,List));
237 extern  Void   instDefn         Args((Int,Cell,Cell));
238 extern  Void   addTupInst       Args((Class,Int));
239 #if TREX
240 extern  Inst   addRecShowInst   Args((Class,Ext));
241 extern  Inst   addRecEqInst     Args((Class,Ext));
242 #endif
243 extern  List   typeVarsIn       Args((Cell,List,List,List));
244 extern  List   oclose           Args((List,List));
245 extern  List   zonkTyvarsIn     Args((Type,List));
246 extern  Type   zonkTyvar        Args((Int));
247 extern  Type   zonkType         Args((Type,Int));
248 extern  Void   primDefn         Args((Cell,List,Cell));
249 extern  Void   defaultDefn      Args((Int,List));
250 extern  Void   checkExp         Args((Void));
251 #if EXPLAIN_INSTANCE_RESOLUTION
252 extern  Void   checkContext     Args((Void));
253 #endif
254 extern  Void   checkDefns       Args((Void));
255 extern  Bool   h98Pred          Args((Bool,Cell));
256 extern  Cell   h98Context       Args((Bool,List));
257 extern  Void   h98CheckCtxt     Args((Int,String,Bool,List,Inst));
258 extern  Void   h98CheckType     Args((Int,String,Cell,Type));
259 extern  Void   h98DoesntSupport Args((Int,String));
260
261 extern  Void   typeChecker      Args((Int));
262 extern  Type   typeCheckExp     Args((Bool));
263 extern  Void   typeCheckDefns   Args((Void));
264 extern  Cell   provePred        Args((Kinds,List,Cell));
265 extern  List   simpleContext    Args((List,Int));
266 extern  Cell   rhsExpr          Args((Cell));
267 extern  Int    rhsLine          Args((Cell));
268 extern  Bool   isProgType       Args((List,Type));
269 extern  Cell   superEvid        Args((Cell,Class,Class));
270 extern  Void   linkPreludeTC    Args((Void));
271 extern  Void   linkPreludeCM    Args((Void));
272
273 extern  Void   compiler         Args((Int));
274 extern  Void   compileDefns     Args((Void));
275 extern  Void   compileExp       Args((Void));
276 extern  Bool   failFree         Args((Cell));
277 extern  Int    discrArity       Args((Cell));
278
279 extern  Addr   codeGen          Args((Name,Int,Cell));
280 extern  Void   implementCfun    Args((Name,List));
281 #if TREX
282 extern  Name   implementRecShw  Args((Text,Cell));
283 extern  Name   implementRecEq   Args((Text,Cell));
284 #endif
285 extern  Void   addCfunTable     Args((Tycon));
286 extern  Name   succCfun         Args((Name));
287 extern  Name   nextCfun         Args((Name,Name));
288 extern  Name   cfunByNum        Args((Name,Int));
289 extern  Void   unwind           Args((Cell));
290 extern  Void   run              Args((Addr,StackPtr));
291
292 extern  Void   eval             Args((Cell));
293 extern  Cell   evalWithNoError  Args((Cell));
294 extern  Void   evalFails        Args((StackPtr));
295
296 extern  Void   abandon          Args((String,Cell));
297 extern  Void   outputString     Args((FILE *));
298 extern  Void   dialogue         Args((Cell));
299 #define consChar(c) ap(nameCons,mkChar(c))
300
301 extern  Int    shellEsc         Args((String));
302 extern  Int    getTerminalWidth Args((Void));
303 extern  Void   normalTerminal   Args((Void));
304 extern  Void   noechoTerminal   Args((Void));
305 extern  Int    readTerminalChar Args((Void));
306 extern  Void   gcStarted        Args((Void));
307 extern  Void   gcScanning       Args((Void));
308 extern  Void   gcRecovered      Args((Int));
309 extern  Void   gcCStack         Args((Void));
310 extern  Void   needPrims        Args((Int)); 
311 extern  List   calcFunDepsPreds Args((List));
312 extern  Inst   findInstFor      Args((Cell,Int));
313 #if MULTI_INST
314 extern  List   findInstsFor     Args((Cell,Int));
315 #endif
316
317 extern Type primType( Int /*AsmMonad*/ monad, String a_kinds, String r_kinds );
318 #define aVar            mkOffset(0)     /* Simple skeleton for type var    */
319
320 /*-------------------------------------------------------------------------*/
321
322 /*---------------------------------------------------------------------------
323  * Interrupting execution (signals, allowBreak):
324  *-------------------------------------------------------------------------*/
325
326 extern Bool breakOn      Args((Bool));
327
328 extern Bool  broken;                    /* indicates interrupt received    */
329
330 #ifndef SIGBREAK /* Sigh, not defined in cygwin32 beta release 16 */
331 # define SIGBREAK 21
332 #endif
333
334 /* allowBreak: call to allow user to interrupt computation
335  * ctrlbrk:    set control break handler
336  */
337
338 #if HUGS_FOR_WINDOWS
339 #  define ctrlbrk(bh) 
340 #  define allowBreak()  kbhit()
341 #else /* !HUGS_FOR_WINDOWS */
342 # if HAVE_SIGPROCMASK
343 #  include <signal.h>
344 #  define ctrlbrk(bh)   { sigset_t mask; \
345                           signal(SIGINT,bh); \
346                           sigemptyset(&mask); \
347                           sigaddset(&mask, SIGINT); \
348                           sigprocmask(SIG_UNBLOCK, &mask, NULL); \
349                         }
350 # else
351 #  define ctrlbrk(bh)   signal(SIGINT,bh)
352 # endif
353 #if SYMANTEC_C
354 extern int time_release;
355 extern int allow_break_count;
356 # define allowBreak()   if (time_release !=0 && \
357                             (++allow_break_count % time_release) == 0) \
358                             ProcessEvent();
359 #else
360 # define allowBreak()  if (broken) { broken=FALSE; sigRaise(breakHandler); }
361 #endif
362 #endif /* !HUGS_FOR_WINDOWS */
363
364 /*---------------------------------------------------------------------------
365  * Environment variables and the registry
366  *-------------------------------------------------------------------------*/
367
368 /* On Win32 we can use the registry to supplement info in environment 
369  * variables.
370  */
371 /* AJG: Commented out for now for development */
372 /* #define USE_REGISTRY (HAVE_WINDOWS_H && !__MSDOS__) */
373
374 #ifdef USE_REGISTRY
375 Bool    writeRegString Args((String var, String val));
376 String  readRegString  Args((String var, String def));
377 Int     readRegInt     Args((String var, Int def));
378 Bool    writeRegInt    Args((String var, Int val));
379 #endif
380
381 #define N_INSTALLDIR 200
382 extern char installDir[N_INSTALLDIR];
383
384 /*---------------------------------------------------------------------------
385  * File operations:
386  *-------------------------------------------------------------------------*/
387
388 #if HAVE_UNISTD_H
389 # include <sys/types.h>
390 # include <unistd.h>
391 #elif !HUGS_FOR_WINDOWS
392 extern int      chdir      Args((const char*));
393 #endif
394
395 #if HAVE_STDLIB_H
396 # include <stdlib.h>
397 #else
398 extern int      system     Args((const char *));
399 extern double   atof       Args((const char *));
400 extern void     exit       Args((int));
401 #endif
402
403 #ifndef FILENAME_MAX       /* should already be defined in an ANSI compiler*/
404 #define FILENAME_MAX 256
405 #else
406 #if     FILENAME_MAX < 256
407 #undef  FILENAME_MAX
408 #define FILENAME_MAX 256
409 #endif
410 #endif
411
412 /* Hack, hack: if you have dos.h, you probably have a DOS filesystem */
413 #define DOS_FILENAMES              HAVE_DOS_H
414 /* ToDo: can we replace this with a feature test? */
415 #define MAC_FILENAMES              SYMANTEC_C
416
417 #define CASE_INSENSITIVE_FILENAMES (DOS_FILENAMES | RISCOS)
418
419 #if CASE_INSENSITIVE_FILENAMES
420 # if HAVE_STRCASECMP
421 #  define filenamecmp(s1,s2) strcasecmp(s1,s2)
422 # elif HAVE__STRICMP
423 #  define filenamecmp(s1,s2) _stricmp(s1,s2)
424 # elif HAVE_STRICMP
425 #  define filenamecmp(s1,s2) stricmp(s1,s2)
426 # elif HAVE_STRCMPI
427 #  define filenamecmp(s1,s2) strcmpi(s1,s2)
428 # endif
429 #else
430 # define filenamecmp(s1,s2) strcmp(s1,s2)
431 #endif
432
433 /*---------------------------------------------------------------------------
434  * Pipe-related operations:
435  *
436  * On Windows, many standard Unix names acquire a leading underscore.
437  * Irritating, but easy to work around.
438  *-------------------------------------------------------------------------*/
439
440 #if !defined(HAVE_POPEN) && defined(HAVE__POPEN)
441 #define popen(x,y) _popen(x,y)
442 #endif
443 #if !defined(HAVE_PCLOSE) && defined(HAVE__PCLOSE)
444 #define pclose(x) _pclose(x)
445 #endif
446
447 /*---------------------------------------------------------------------------
448  * Bit manipulation:
449  *-------------------------------------------------------------------------*/
450
451 #define bitArraySize(n)    ((n)/bitsPerWord + 1)
452 #define placeInSet(n)      ((-(n)-1)>>wordShift)
453 #define maskInSet(n)       (1<<((-(n)-1)&wordMask))
454
455 /*---------------------------------------------------------------------------
456  * Function prototypes for code in machdep.c
457  *-------------------------------------------------------------------------*/
458
459 extern  String findMPathname    Args((String,String,String));
460 extern  String findPathname     Args((String,String));
461
462 extern  Int    shellEsc         Args((String));
463 extern  Int    getTerminalWidth Args((Void));
464 extern  Void   normalTerminal   Args((Void));
465 extern  Void   noechoTerminal   Args((Void));
466 extern  Int    readTerminalChar Args((Void));
467 extern  Void   gcStarted        Args((Void));
468 extern  Void   gcScanning       Args((Void));
469 extern  Void   gcRecovered      Args((Int));
470 extern  Void   gcCStack         Args((Void));
471
472 /*-------------------------------------------------------------------------*/
473
474 extern Type typeInt64;
475 extern Type typeWord;
476 extern Type typeFloat;
477 extern Type typePrimArray;
478 extern Type typePrimByteArray;
479 extern Type typeRef;
480 extern Type typePrimMutableArray;
481 extern Type typePrimMutableByteArray;
482 extern Type typeStable;
483 extern Type typeWeak;
484 extern Type typeIO;
485 extern Type typeForeign;
486 extern Type typeMVar;
487 extern Type typeThreadId;
488 extern Type typeException;
489 extern Type typeIO;
490 extern Type typeST;
491
492 extern  Void   foreignImport    Args((Cell,Text,Pair,Cell,Cell));
493 extern List  foreignImports;            /* foreign import declarations     */
494 extern  Void   implementForeignImport Args((Name));
495 extern  Void   foreignExport   Args((Cell,Text,Cell,Cell,Cell));
496 extern List  foreignExports;            /* foreign export declarations     */
497 extern  Void   implementForeignExport Args((Name));
498
499 extern List diVars;
500 extern Int  diNum;
501
502 Int     userArity           Args((Name));
503
504
505 extern List    deriveEq            Args((Tycon));
506 extern List    deriveOrd           Args((Tycon));
507 extern List    deriveEnum          Args((Tycon));
508 extern List    deriveIx            Args((Tycon));
509 extern List    deriveShow          Args((Tycon));
510 extern List    deriveRead          Args((Cell));
511 extern List    deriveBounded       Args((Tycon));
512 extern List    checkPrimDefn       Args((Triple));
513
514 extern Bool  typeMatches        Args((Type,Type));
515 extern  Void   evalExp           Args((Void));
516 extern  Void   linkControl      Args((Int));
517 extern  Void   deriveControl    Args((Int));
518 extern  Void   translateControl Args((Int));
519 extern  Void   codegen          Args((Int));
520 extern  Void   machdep          Args((Int));
521
522 extern Void linkPreludeNames(void);
523
524 extern  Kind  starToStar;                /* Type -> Type                    */
525 extern Type  boundPair;                 /* (mkOffset(0),mkOffset(0))       */
526 extern        Type typeOrdering;
527
528 extern  Type   conToTagType     Args((Tycon));
529 extern  Type   tagToConType     Args((Tycon));
530
531 #define BOGUS(k) (-9000000-(k))
532
533 extern Void putChr  Args((Int));
534 extern Void putStr  Args((String));
535 extern Void putInt  Args((Int));
536 extern Void putPtr  Args((Ptr));
537
538 extern Void unlexCharConst Args((Cell));
539 extern FILE *outputStream;             /* current output stream            */
540 extern Int  outColumn;                 /* current output column number     */
541
542 extern Void unlexStrConst  Args((Text));
543 extern Void unlexVar       Args((Text));
544 extern List offsetTyvarsIn          Args((Type,List));
545
546 extern List cfunSfuns;                  /* List of (Cfun,[SelectorVar])    */
547
548 extern Void  interface        Args((Int));
549
550 extern Void getFileSize       Args((String, Long *));
551
552 extern Void loadInterface     Args((String,Long));
553
554 extern Void openGHCIface      Args((Text));
555 extern Void loadSharedLib     Args((String));
556 extern Void addGHCImports     Args((Int,Text,List));
557 extern Void addGHCExports     Args((Cell,List));
558 extern Void addGHCVar         Args((Int,Text,Type));
559 extern Void addGHCSynonym     Args((Int,Cell,List,Type));
560 extern Void addGHCDataDecl    Args((Int,List,Cell,List,List));
561 extern Void addGHCNewType     Args((Int,List,Cell,List,Cell));
562 extern Void addGHCClass       Args((Int,List,Cell,List,List));
563 extern Void addGHCInstance    Args((Int,List,Pair,Text));
564 extern Void finishInterfaces  Args((Void));
565
566 extern Void hi_o_namesFromSrcName Args((String,String*,String* oName));
567 extern Void parseInterface        Args((String,Long));
568
569
570 #define SMALL_INLINE_SIZE 9
571
572
573 // nasty hack, but seems an easy to convey the object name
574 // and size to openGHCIface
575 char nameObj[FILENAME_MAX+1];
576 int  sizeObj;
577