* included in the distribution.
*
* $RCSfile: link.c,v $
- * $Revision: 1.12 $
- * $Date: 1999/11/12 17:32:40 $
+ * $Revision: 1.13 $
+ * $Date: 1999/11/16 17:38:55 $
* ------------------------------------------------------------------------*/
#include "prelude.h"
Type typeFloat;
Type typeDouble;
Type typeStable;
+Type typeThreadId;
+Type typeMVar;
#ifdef PROVIDE_WEAK
Type typeWeak;
#endif
#ifdef PROVIDE_FOREIGN
Type typeForeign;
#endif
-#ifdef PROVIDE_CONCURRENT
-Type typeThreadId;
-Type typeMVar;
-#endif
Type typeList;
Type typeUnit;
Name namePrimSeq;
Name namePrimCatch;
Name namePrimRaise;
+Name namePrimTakeMVar;
Name nameFromTo;
Name nameFromThen;
Name nameMkPrimMutableArray;
Name nameMkPrimMutableByteArray;
Name nameMkStable; /* StablePtr# a -> StablePtr a */
+Name nameMkThreadId; /* ThreadId# -> ThreadId */
+Name nameMkPrimMVar; /* MVar# a -> MVar a */
#ifdef PROVIDE_WEAK
Name nameMkWeak; /* Weak# a -> Weak a */
#endif
#ifdef PROVIDE_FOREIGN
Name nameMkForeign; /* ForeignObj# -> ForeignObj */
#endif
-#ifdef PROVIDE_CONCURRENT
-Name nameMkThreadId; /* ThreadId# -> ThreadId */
-Name nameMkMVar; /* MVar# -> MVar */
-#endif
#ifdef PROVIDE_FOREIGN
typeForeign = linkTycon("ForeignObj");
#endif
-#ifdef PROVIDE_CONCURRENT
typeThreadId = linkTycon("ThreadId");
typeMVar = linkTycon("MVar");
-#endif
-
typeBool = linkTycon("Bool");
typeST = linkTycon("ST");
typeIO = linkTycon("IO");
nameMkRef = addPrimCfunREP(findText("Ref#"),1,0,0);
nameMkPrimMutableArray = addPrimCfunREP(findText("PrimMutableArray#"),1,0,0);
nameMkPrimMutableByteArray = addPrimCfunREP(findText("PrimMutableByteArray#"),1,0,0);
-#ifdef PROVIDE_CONCURRENT
- nameMkThreadId = addPrimCfun(findTextREP("ThreadId#"),1,0,0);
- nameMkMVar = addPrimCfun(findTextREP("MVar#"),1,0,0);
-#endif
+ nameMkThreadId = addPrimCfunREP(findText("ThreadId#"),1,0,0);
+ nameMkPrimMVar = addPrimCfunREP(findText("MVar#"),1,0,0);
+
/* The following primitives are referred to in derived instances and
* hence require types; the following types are a little more general
* than we might like, but they are the closest we can get without a
name(namePrimRaise).type
= primType(MONAD_Id, "E", "a");
+ /* This is a lie. For a more accurate type of primTakeMVar
+ see ghc/interpreter/lib/Prelude.hs.
+ */
+ name(namePrimTakeMVar).type
+ = primType(MONAD_Id, "rbc", "d");
+
for (i=2; i<=NUM_DTUPLES; i++) {/* Add derived instances of tuples */
addTupInst(classEq,i);
addTupInst(classOrd,i);
pFun(namePrimSeq, "primSeq");
pFun(namePrimCatch, "primCatch");
pFun(namePrimRaise, "primRaise");
+ pFun(namePrimTakeMVar, "primTakeMVar");
{
StgVar vv = mkStgVar(NIL,NIL);
Name n = namePrimSeq;
name(n).stgVar = vv;
stgGlobals=cons(pair(n,vv),stgGlobals);
}
-
+ {
+ StgVar vv = mkStgVar(NIL,NIL);
+ Name n = namePrimTakeMVar;
+ name(n).line = 0;
+ name(n).arity = 2;
+ name(n).type = NIL;
+ stgVarInfo(vv) = mkPtr ( asm_BCO_takeMVar() );
+ name(n).stgVar = vv;
+ stgGlobals=cons(pair(n,vv),stgGlobals);
+ }
break;
}
}