* included in the distribution.
*
* $RCSfile: connect.h,v $
- * $Revision: 1.10 $
- * $Date: 1999/10/15 23:52:00 $
+ * $Revision: 1.22 $
+ * $Date: 1999/12/20 16:55:26 $
* ------------------------------------------------------------------------*/
/* --------------------------------------------------------------------------
* ------------------------------------------------------------------------*/
extern Bool haskell98; /* TRUE => Haskell 98 compatibility*/
+extern Bool combined; /* TRUE => combined operation */
extern Module modulePrelude;
/* --------------------------------------------------------------------------
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 */
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
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;
extern Int defaultLine; /* line in which default defs occur*/
extern List evalDefaults; /* defaults for evaluator */
extern Cell inputExpr; /* evaluator input expression */
+extern Cell inputContext; /* evaluator input expression */
extern Addr inputCode; /* Code for compiled input expr */
extern Int whnfArgs; /* number of args of term in whnf */
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 */
#if DEBUG_CODE
extern Bool debugCode; /* TRUE => print G-code to screen */
#endif
+extern Bool debugSC; /* TRUE => print SC to screen */
extern Bool kindExpert; /* TRUE => display kind errors in */
/* full detail */
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));
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));
extern Type fullExpand Args((Type));
extern Bool isAmbiguous Args((Type));
extern Void ambigError Args((Int,String,Cell,Type));
-extern Void classDefn Args((Int,Cell,Cell));
+extern Void classDefn Args((Int,Cell,List,List));
extern Void instDefn Args((Int,Cell,Cell));
extern Void addTupInst Args((Class,Int));
#if TREX
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));
+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));
extern Void gcRecovered Args((Int));
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 */
# 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 */
/*---------------------------------------------------------------------------
Bool writeRegInt Args((String var, Int val));
#endif
+#define N_INSTALLDIR 200
+extern char installDir[N_INSTALLDIR];
+
/*---------------------------------------------------------------------------
* File operations:
*-------------------------------------------------------------------------*/
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));
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 List typeVarsIn Args((Cell,List,List));
-
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 );