[project @ 2000-03-10 17:30:36 by lewie]
[ghc-hetmet.git] / ghc / interpreter / connect.h
index 426d84c..1976c9f 100644 (file)
@@ -8,8 +8,8 @@
  * included in the distribution.
  *
  * $RCSfile: connect.h,v $
- * $Revision: 1.13 $
- * $Date: 1999/10/26 17:27:41 $
+ * $Revision: 1.26 $
+ * $Date: 2000/03/10 17:30:36 $
  * ------------------------------------------------------------------------*/
 
 /* --------------------------------------------------------------------------
@@ -17,6 +17,7 @@
  * ------------------------------------------------------------------------*/
 
 extern Bool   haskell98;                /* TRUE => Haskell 98 compatibility*/
+extern Bool   combined;                 /* TRUE => combined operation      */
 extern Module modulePrelude;
 
 /* --------------------------------------------------------------------------
@@ -41,9 +42,7 @@ extern Name  nameIf,      nameSel;
 extern Name  nameCompAux;
 extern Name  namePmInt,   namePmFlt;    /* primitives for pattern matching */
 extern Name  namePmInteger;
-#if NPLUSK
 extern Name  namePmNpk,   namePmSub;    /* primitives for (n+k) patterns   */
-#endif
 extern Name  nameError;                 /* For runtime error messages      */
 extern Name  nameUndefined;             /* A generic undefined value       */
 extern Name  nameBlackHole;             /* For GC-detected black hole      */
@@ -58,11 +57,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                */
@@ -80,10 +74,8 @@ 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
+
 #if TREX
 extern Name  nameNoRec;                 /* The empty record                */
 extern Type  typeNoRow;                 /* The empty row                   */
@@ -105,6 +97,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;
@@ -160,7 +153,6 @@ 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  showInstRes;               /* TRUE => show instance resolution */
-extern Bool  optimise;                  /* TRUE => simplify STG            */
 
 extern Int   cutoff;                    /* Constraint Cutoff depth         */
 
@@ -171,10 +163,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 */
@@ -185,12 +174,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));
@@ -207,7 +203,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));
@@ -238,6 +236,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));
@@ -245,6 +244,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));
@@ -272,10 +274,6 @@ extern  Int    discrArity       Args((Cell));
 
 extern  Addr   codeGen          Args((Name,Int,Cell));
 extern  Void   implementCfun    Args((Name,List));
-#if TREX
-extern  Name   implementRecShw  Args((Text,Cell));
-extern  Name   implementRecEq   Args((Text,Cell));
-#endif
 extern  Void   addCfunTable     Args((Tycon));
 extern  Name   succCfun         Args((Name));
 extern  Name   nextCfun         Args((Name,Name));
@@ -304,6 +302,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    */
@@ -369,6 +373,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:
  *-------------------------------------------------------------------------*/
@@ -507,7 +514,7 @@ extern  Void   translateControl Args((Int));
 extern  Void   codegen          Args((Int));
 extern  Void   machdep          Args((Int));
 
-extern Void linkPreludeNames(void);
+extern Void linkPrimitiveNames(void);
 
 extern  Kind  starToStar;                /* Type -> Type                    */
 extern Type  boundPair;                 /* (mkOffset(0),mkOffset(0))       */
@@ -529,38 +536,34 @@ 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 Bool  processInterfaces  Args((Void));
+extern void  ifLinkConstrItbl ( Name n );
 
-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 Void hi_o_namesFromSrcName Args((String,String*,String* oName));
-extern Void parseInterface        Args((String,Long));
+extern List /* of ZTriple(I_INTERFACE, 
+                          Text--name of obj file, 
+                          Int--size of obj file) */
+             ifaces_outstanding;
 
 
-#define SMALL_INLINE_SIZE 9
+extern Void hi_o_namesFromSrcName Args((String,String*,String* oName));
+extern Cell parseInterface        Args((String,Long));
 
+extern String getExtraObjectInfo ( String primaryObjectName,
+                                   String extraFileName,
+                                   Int*   extraFileSize );
 
-// nasty hack, but seems an easy to convey the object name
-// and size to openGHCIface
-char nameObj[FILENAME_MAX+1];
-int  sizeObj;
+extern Name         newDSel             Args((Class,Int));
+extern Int          visitClass          Args((Class));
 
+extern Kind  simpleKind         Args((Int));