[project @ 1999-12-21 13:01:59 by simonmar]
[ghc-hetmet.git] / ghc / interpreter / connect.h
index 5d3f097..ff99e1e 100644 (file)
@@ -8,8 +8,8 @@
  * included in the distribution.
  *
  * $RCSfile: connect.h,v $
- * $Revision: 1.11 $
- * $Date: 1999/10/16 02:17:30 $
+ * $Revision: 1.22 $
+ * $Date: 1999/12/20 16:55:26 $
  * ------------------------------------------------------------------------*/
 
 /* --------------------------------------------------------------------------
@@ -17,6 +17,7 @@
  * ------------------------------------------------------------------------*/
 
 extern Bool   haskell98;                /* TRUE => Haskell 98 compatibility*/
+extern Bool   combined;                 /* TRUE => combined operation      */
 extern Module modulePrelude;
 
 /* --------------------------------------------------------------------------
@@ -58,11 +59,6 @@ extern Name  nameRange;
 extern Name  nameLe,      nameGt;
 extern Name  nameShowsPrec, nameReadsPrec;
 extern Name  nameMult,    namePlus;
-extern Name  nameConCmp,  nameEnRange;
-extern Name  nameEnIndex, nameEnInRng;
-extern Name  nameEnToEn,  nameEnFrEn;
-extern Name  nameEnFrom,  nameEnFrTh;
-extern Name  nameEnFrTo;
 extern Name  nameComp,    nameApp;      /* composition and append          */
 extern Name  nameShowField;             /* display single field            */
 extern Name  nameShowParen;             /* wrap with parens                */
@@ -78,6 +74,9 @@ extern Name  namePrint;                 /* printing primitive              */
 extern Name  nameCreateAdjThunk;        /* f-x-dyn: create adjustor thunk  */
 extern Text  textPrelude;
 extern Text  textNum;                   /* used to process default decls   */
+extern Text  textCcall;                 /* used to process foreign import  */
+extern Text  textStdcall;               /*         ... and foreign export  */
+
 #if    NPLUSK
 extern Text  textPlus;                  /* Used to recognise n+k patterns  */
 #endif
@@ -102,6 +101,7 @@ extern String hugsEdit;                 /* String for editor command       */
 extern String hugsPath;                 /* String for file search path     */
 extern String projectPath;              /* String for project search path  */
 
+extern Type  typeProgIO;               /* For the IO monad, IO a          */
 extern Type  typeArrow;                 /* Builtin type constructors       */
 extern Type  typeList;
 extern Type  typeUnit;
@@ -156,7 +156,7 @@ extern Bool  preludeLoaded;             /* TRUE => prelude has been loaded */
 extern Bool  gcMessages;                /* TRUE => print GC messages       */
 extern Bool  literateScripts;           /* TRUE => default lit scripts     */
 extern Bool  literateErrors;            /* TRUE => report errs in lit scrs */
-extern Bool  optimise;                  /* TRUE => simplify STG            */
+extern Bool  showInstRes;               /* TRUE => show instance resolution */
 
 extern Int   cutoff;                    /* Constraint Cutoff depth         */
 
@@ -167,10 +167,7 @@ extern String preprocessor;             /* preprocessor command            */
 #if DEBUG_CODE
 extern Bool  debugCode;                 /* TRUE => print G-code to screen  */
 #endif
-#if DEBUG_SHOWSC
 extern Bool  debugSC;                  /* TRUE => print SC to screen  */
-extern Void  printSc Args((FILE*, Text, Int, Cell));
-#endif
 extern Bool  kindExpert;                /* TRUE => display kind errors in  */
                                         /*         full detail             */
 extern Bool  allowOverlap;              /* TRUE => allow overlapping insts */
@@ -181,12 +178,19 @@ extern Bool  allowOverlap;              /* TRUE => allow overlapping insts */
 
 extern Void everybody Args((Int));
 
-#define RESET   1               /* reset subsystem                         */
-#define MARK    2               /* mark parts of graph in use by subsystem */
-#define INSTALL 3               /* install subsystem (executed once only)  */
-#define EXIT    4               /* Take action immediately before exit()   */
-#define BREAK   5               /* Take action after program break         */
-#define GCDONE  6               /* Restore subsystem invariantss after GC  */
+
+#define RESET    1            /* reset subsystem                           */
+#define MARK     2            /* mark parts of graph in use by subsystem   */
+#define PREPREL  3            /* do startup actions before Prelude loading */
+#define POSTPREL 4            /* do startup actions after Prelude loading  */
+#define EXIT     5            /* Take action immediately before exit()     */
+#define BREAK    6            /* Take action after program break           */
+#define GCDONE   7            /* Restore subsystem invariantss after GC    */
+
+/* PREPREL was formerly called INSTALL.  POSTPREL doesn't have an analogy
+   in the old Hugs. 
+*/
+
 
 typedef long   Target;
 extern  Void   setGoal          Args((String, Target));
@@ -203,7 +207,9 @@ extern  Void   projInput        Args((String));
 extern  Void   stringInput      Args((String));
 extern  Void   parseScript      Args((String,Long));
 extern  Void   parseExp         Args((Void));
+#if EXPLAIN_INSTANCE_RESOLUTION
 extern  Void   parseContext     Args((Void));
+#endif
 extern  String readFilename     Args((Void));
 extern  String readLine         Args((Void));
 extern  Syntax defaultSyntax    Args((Text));
@@ -234,6 +240,7 @@ extern  Void   addTupInst       Args((Class,Int));
 extern  Inst   addRecShowInst   Args((Class,Ext));
 extern  Inst   addRecEqInst     Args((Class,Ext));
 #endif
+extern  List   typeVarsIn      Args((Cell,List,List,List));
 extern  List   oclose          Args((List,List));
 extern  List   zonkTyvarsIn    Args((Type,List));
 extern  Type   zonkTyvar       Args((Int));
@@ -241,6 +248,9 @@ extern  Type   zonkType             Args((Type,Int));
 extern  Void   primDefn         Args((Cell,List,Cell));
 extern  Void   defaultDefn      Args((Int,List));
 extern  Void   checkExp         Args((Void));
+#if EXPLAIN_INSTANCE_RESOLUTION
+extern  Void   checkContext    Args((Void));
+#endif
 extern  Void   checkDefns       Args((Void));
 extern  Bool   h98Pred          Args((Bool,Cell));
 extern  Cell   h98Context       Args((Bool,List));
@@ -300,6 +310,12 @@ extern  Void   gcCStack         Args((Void));
 extern  Void   needPrims        Args((Int)); 
 extern  List   calcFunDepsPreds Args((List));
 extern  Inst   findInstFor      Args((Cell,Int));
+#if MULTI_INST
+extern  List   findInstsFor     Args((Cell,Int));
+#endif
+
+extern Void ppScripts ( Void );
+extern Void ppModules ( Void );
 
 extern Type primType( Int /*AsmMonad*/ monad, String a_kinds, String r_kinds );
 #define aVar            mkOffset(0)     /* Simple skeleton for type var    */
@@ -326,8 +342,26 @@ extern Bool  broken;                    /* indicates interrupt received    */
 #  define ctrlbrk(bh) 
 #  define allowBreak()  kbhit()
 #else /* !HUGS_FOR_WINDOWS */
-#  define ctrlbrk(bh)   signal(SIGINT,bh); signal(SIGBREAK,bh)
-#  define allowBreak()  if (broken) { broken=FALSE; sigRaise(breakHandler); }
+# if HAVE_SIGPROCMASK
+#  include <signal.h>
+#  define ctrlbrk(bh)  { sigset_t mask; \
+                         signal(SIGINT,bh); \
+                         sigemptyset(&mask); \
+                         sigaddset(&mask, SIGINT); \
+                         sigprocmask(SIG_UNBLOCK, &mask, NULL); \
+                       }
+# else
+#  define ctrlbrk(bh)  signal(SIGINT,bh)
+# endif
+#if SYMANTEC_C
+extern int time_release;
+extern int allow_break_count;
+# define allowBreak()  if (time_release !=0 && \
+                           (++allow_break_count % time_release) == 0) \
+                           ProcessEvent();
+#else
+# define allowBreak()  if (broken) { broken=FALSE; sigRaise(breakHandler); }
+#endif
 #endif /* !HUGS_FOR_WINDOWS */
 
 /*---------------------------------------------------------------------------
@@ -347,6 +381,9 @@ Int         readRegInt     Args((String var, Int def));
 Bool   writeRegInt    Args((String var, Int val));
 #endif
 
+#define N_INSTALLDIR 200
+extern char installDir[N_INSTALLDIR];
+
 /*---------------------------------------------------------------------------
  * File operations:
  *-------------------------------------------------------------------------*/
@@ -455,10 +492,10 @@ extern Type typeException;
 extern Type typeIO;
 extern Type typeST;
 
-extern  Void   foreignImport    Args((Cell,Pair,Cell,Cell));
+extern  Void   foreignImport    Args((Cell,Text,Pair,Cell,Cell));
 extern List  foreignImports;            /* foreign import declarations     */
 extern  Void   implementForeignImport Args((Name));
-extern  Void   foreignExport   Args((Cell,Cell,Cell,Cell));
+extern  Void   foreignExport   Args((Cell,Text,Cell,Cell,Cell));
 extern List  foreignExports;            /* foreign export declarations     */
 extern  Void   implementForeignExport Args((Name));
 
@@ -507,38 +544,27 @@ extern Int  outColumn;                 /* current output column number     */
 
 extern Void unlexStrConst  Args((Text));
 extern Void unlexVar       Args((Text));
+extern Void unlexVarStr    Args((String));
 extern List offsetTyvarsIn          Args((Type,List));
 
-extern Void optimiseTopBinds  Args((List));
 extern List cfunSfuns;                  /* List of (Cfun,[SelectorVar])    */
 
 extern Void  interface        Args((Int));
 
 extern Void getFileSize       Args((String, Long *));
 
-extern Void loadInterface     Args((String,Long));
+extern ZPair readInterface      Args((String,Long));
+extern Void  processInterfaces  Args((Void));
 
-extern Void openGHCIface      Args((Text));
-extern Void loadSharedLib     Args((String));
-extern Void addGHCImports     Args((Int,Text,List));
-extern Void addGHCExports     Args((Cell,List));
-extern Void addGHCVar         Args((Int,Text,Type));
-extern Void addGHCSynonym     Args((Int,Cell,List,Type));
-extern Void addGHCDataDecl    Args((Int,List,Cell,List,List));
-extern Void addGHCNewType     Args((Int,List,Cell,List,Cell));
-extern Void addGHCClass       Args((Int,List,Cell,List,List));
-extern Void addGHCInstance    Args((Int,List,Pair,Text));
-extern Void finishInterfaces  Args((Void));
+extern List /* of ZTriple(I_INTERFACE, 
+                          Text--name of obj file, 
+                          Int--size of obj file) */
+             ifaces_outstanding;
 
-extern Void hi_o_namesFromSrcName Args((String,String*,String* oName));
-extern Void parseInterface        Args((String,Long));
 
+extern Void hi_o_namesFromSrcName Args((String,String*,String* oName));
+extern Cell parseInterface        Args((String,Long));
 
-#define SMALL_INLINE_SIZE 9
-
-
-// nasty hack, but seems an easy to convey the object name
-// and size to openGHCIface
-char nameObj[FILENAME_MAX+1];
-int  sizeObj;
-
+extern String getExtraObjectInfo ( String primaryObjectName,
+                                   String extraFileName,
+                                   Int*   extraFileSize );