[project @ 2001-01-17 15:11:04 by simonmar]
[ghc-hetmet.git] / ghc / interpreter / link.c
index 5ef79e4..7e405d0 100644 (file)
@@ -9,16 +9,16 @@
  * included in the distribution.
  *
  * $RCSfile: link.c,v $
- * $Revision: 1.53 $
- * $Date: 2000/03/22 18:14:22 $
+ * $Revision: 1.60 $
+ * $Date: 2000/04/27 16:35:29 $
  * ------------------------------------------------------------------------*/
 
-#include "prelude.h"
+#include "hugsbasictypes.h"
 #include "storage.h"
 #include "connect.h"
 #include "errors.h"
-#include "Assembler.h"                  /* for asmPrimOps and AsmReps      */
 #include "Rts.h"                        /* to make Prelude.h palatable     */
+#include "Assembler.h"                  /* for asmPrimOps and AsmReps      */
 #include "Prelude.h"                    /* for fixupRTStoPreludeRefs       */
 
 
@@ -188,11 +188,11 @@ Name namePlus;
 Name nameMult;
 Name nameMFail;
 Type typeOrdering;
+Module modulePrelPrim;
 Module modulePrelude;
 Name nameMap;
 Name nameMinus;
 
-
 /* --------------------------------------------------------------------------
  * Frequently used type skeletons:
  * ------------------------------------------------------------------------*/
@@ -228,7 +228,7 @@ static Tycon linkTycon( String s )
        tc = findTyconInAnyModule(findText(s));
        if (nonNull(tc)) return tc;
     }
-fprintf(stderr, "frambozenvla!  unknown tycon %s\n", s );
+FPrintf(stderr, "frambozenvla!  unknown tycon %s\n", s );
 return NIL;
     ERRMSG(0) "Prelude does not define standard type \"%s\"", s
     EEND;
@@ -242,7 +242,7 @@ static Class linkClass( String s )
        cc = findClassInAnyModule(findText(s));
        if (nonNull(cc)) return cc;
     }   
-fprintf(stderr, "frambozenvla!  unknown class %s\n", s );
+FPrintf(stderr, "frambozenvla!  unknown class %s\n", s );
 return NIL;
     ERRMSG(0) "Prelude does not define standard class \"%s\"", s
     EEND;
@@ -256,7 +256,7 @@ static Name linkName( String s )
        n = findNameInAnyModule(findText(s));
        if (nonNull(n)) return n;
     }   
-fprintf(stderr, "frambozenvla!  unknown  name %s\n", s );
+FPrintf(stderr, "frambozenvla!  unknown  name %s\n", s );
 return NIL;
     ERRMSG(0) "Prelude does not define standard name \"%s\"", s
     EEND;
@@ -296,7 +296,11 @@ Void linkPreludeTC(void) {              /* Hook to tycons and classes in   */
     if (!initialised) {
         Int i;
         initialised = TRUE;
-        setCurrModule(modulePrelude);
+       if (combined) {
+         setCurrModule(modulePrelude);
+       } else {
+         setCurrModule(modulePrelPrim);
+       }
 
         typeChar                 = linkTycon("Char");
         typeInt                  = linkTycon("Int");
@@ -405,7 +409,11 @@ Void linkPreludeCM(void) {              /* Hook to cfuns and mfuns in      */
         Int i;
         initialised = TRUE;
 
-        setCurrModule(modulePrelude);
+       if (combined) {
+         setCurrModule(modulePrelude);
+       } else {
+         setCurrModule(modulePrelPrim);
+       }
 
         /* constructors */
         nameFalse        = linkName("False");
@@ -448,7 +456,11 @@ Void linkPrimNames ( void ) {        /* Hook to names defined in Prelude */
     if (!initialised) {
         initialised = TRUE;
 
-        setCurrModule(modulePrelude);
+       if (combined) {
+         setCurrModule(modulePrelude);
+       } else {
+         setCurrModule(modulePrelPrim);
+       }
 
         /* primops */
         nameMkIO           = linkName("hugsprimMkIO");
@@ -532,7 +544,7 @@ Int what; {
            Module modulePrelBase = findModule(findText("PrelBase"));
            assert(nonNull(modulePrelBase));
           /* fprintf(stderr, "linkControl(POSTPREL)\n"); */
-           setCurrModule(modulePrelude);
+          setCurrModule(modulePrelude);
            linkPreludeTC();
            linkPreludeCM();
            linkPrimNames();
@@ -682,7 +694,7 @@ assert(nonNull(namePMFail));
                */
                modulePrelBase = findModule(findText("PrelBase"));
                module(modulePrelBase).objectExtraNames 
-                  = singleton(findText("libHS_cbits"));
+                  = singleton(findText("libHSstd_cbits"));
 
                setCurrModule(modulePrelBase);
                pFun(nameId,             "id");
@@ -691,14 +703,14 @@ assert(nonNull(namePMFail));
            } else {
                fixupRTStoPreludeRefs(NULL);
 
-               modulePrelude = //newModule(textPrelude);
-                               findFakeModule(textPrelude);
-               setCurrModule(modulePrelude);
+               modulePrelPrim = findFakeModule(textPrelPrim);
+               modulePrelude = findFakeModule(textPrelude);
+               setCurrModule(modulePrelPrim);
         
                for (i=0; i<NUM_TUPLES; ++i) {
                    if (i != 1) addTupleTycon(i);
                }
-               setCurrModule(modulePrelude);
+               setCurrModule(modulePrelPrim);
 
                typeArrow = addPrimTycon(findText("(->)"),
                                         pair(STAR,pair(STAR,STAR)),
@@ -761,46 +773,36 @@ assert(nonNull(namePMFail));
                pFun(namePrimRaise,      "primRaise");
                pFun(namePrimTakeMVar,   "primTakeMVar");
                {
-                  StgVar vv = mkStgVar(NIL,NIL);
-                  Name n = namePrimSeq;
-                  name(n).line = 0;
-                  name(n).arity = 1;
-                  name(n).type = NIL;
-                  vv = mkStgVar(NIL,NIL);
-                  stgVarInfo(vv) = mkPtr ( asm_BCO_seq() );
-                  name(n).stgVar = vv;
-                  stgGlobals=cons(pair(n,vv),stgGlobals);
-                  namePrimSeq = n;
+                  Name n          = namePrimSeq;
+                  name(n).line    = 0;
+                  name(n).arity   = 1;
+                  name(n).type    = NIL;
+                  name(n).closure = mkCPtr ( asm_BCO_seq() );
+                  addToCodeList ( modulePrelPrim, n );
                }
                {
-                  StgVar vv = mkStgVar(NIL,NIL);
-                  Name n = namePrimCatch;
-                  name(n).line = 0;
-                  name(n).arity = 2;
-                  name(n).type = NIL;
-                  stgVarInfo(vv) = mkPtr ( asm_BCO_catch() );
-                  name(n).stgVar = vv;
-                  stgGlobals=cons(pair(n,vv),stgGlobals);
+                  Name n          = namePrimCatch;
+                  name(n).line    = 0;
+                  name(n).arity   = 2;
+                  name(n).type    = NIL;
+                  name(n).closure = mkCPtr ( asm_BCO_catch() );
+                  addToCodeList ( modulePrelPrim, n );
                }
                {
-                  StgVar vv = mkStgVar(NIL,NIL);
-                  Name n = namePrimRaise;
-                  name(n).line = 0;
-                  name(n).arity = 1;
-                  name(n).type = NIL;
-                  stgVarInfo(vv) = mkPtr ( asm_BCO_raise() );
-                  name(n).stgVar = vv;
-                  stgGlobals=cons(pair(n,vv),stgGlobals);
+                  Name n          = namePrimRaise;
+                  name(n).line    = 0;
+                  name(n).arity   = 1;
+                  name(n).type    = NIL;
+                  name(n).closure = mkCPtr ( asm_BCO_raise() );
+                  addToCodeList ( modulePrelPrim, n );
                }
                {
-                  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);
+                  Name n          = namePrimTakeMVar;
+                  name(n).line    = 0;
+                  name(n).arity   = 2;
+                  name(n).type    = NIL;
+                  name(n).closure = mkCPtr ( asm_BCO_takeMVar() );
+                  addToCodeList ( modulePrelPrim, n );
                }
           }
            break;
@@ -808,5 +810,4 @@ assert(nonNull(namePMFail));
 }
 #undef pFun
 
-//#include "fooble.c"
 /*-------------------------------------------------------------------------*/