[project @ 2000-04-07 16:20:53 by sewardj]
[ghc-hetmet.git] / ghc / interpreter / hugs.c
index b772f0b..fe97ca4 100644 (file)
@@ -9,8 +9,8 @@
  * included in the distribution.
  *
  * $RCSfile: hugs.c,v $
- * $Revision: 1.59 $
- * $Date: 2000/04/05 14:13:58 $
+ * $Revision: 1.63 $
+ * $Date: 2000/04/07 16:20:53 $
  * ------------------------------------------------------------------------*/
 
 #include <setjmp.h>
@@ -244,12 +244,17 @@ String argv[]; {
 #  endif
 
    /* Find out early on if we're in combined mode or not.
-      everybody(PREPREL) needs to know this.
+      everybody(PREPREL) needs to know this.  Also, establish the
+      heap size;
    */ 
    for (i=1; i < argc; ++i) {
       if (strcmp(argv[i], "--")==0) break;
       if (strcmp(argv[i], "-c")==0) combined = FALSE;
       if (strcmp(argv[i], "+c")==0) combined = TRUE;
+
+      if (strncmp(argv[i],"+h",2)==0 ||
+          strncmp(argv[i],"-h",2)==0)
+         setHeapSize(&(argv[i][2]));
    }
 
    everybody(PREPREL);
@@ -497,7 +502,8 @@ String s; {                             /* return FALSE if none found.     */
                        return TRUE;
 #endif
 
-            case 'h' : setHeapSize(s+1);
+            case 'h' : /* don't do anything, since pre-scan of args
+                       will have got it already */
                        return TRUE;
 
             case 'c' :  /* don't do anything, since pre-scan of args
@@ -705,7 +711,7 @@ static Void local set() {               /* change command line options from*/
         do {
             if (!processOption(s)) {
                 ERRMSG(0) "Option string must begin with `+' or `-'"
-                EEND;
+                EEND_NO_LONGJMP;
             }
         } while ((s=readFilename())!=0);
 #if USE_REGISTRY
@@ -942,9 +948,8 @@ static void mgFromList ( List /* of CONID */ modgList )
          usesT = cons(textOf(hd(u)),usesT);
 
       /* artificially give all modules a dependency on Prelude */
-      if (mT != textPrelude && mT != textPrimPrel)
+      if (mT != textPrelude && mT != textPrelPrim)
          usesT = cons(textPrelude,usesT);
-
       adjList = cons(pair(mT,usesT),adjList);
    }
 
@@ -1081,23 +1086,23 @@ static void processModule ( Module m )
             addUnqualImport(zfst(te2),zsnd(te2));
             break;
          case M_TYCON:
-            tyconDefn(zsel14(te2),zsel24(te2),zsel34(te2),zsel44(te2));
+            tyconDefn(intOf(zsel14(te2)),zsel24(te2),zsel34(te2),zsel44(te2));
             break;
          case M_CLASS:
-            classDefn(zsel14(te2),zsel24(te2),zsel34(te2),zsel44(te2));
+            classDefn(intOf(zsel14(te2)),zsel24(te2),zsel34(te2),zsel44(te2));
             break;
          case M_INST:
-            instDefn(zfst3(te2),zsnd3(te2),zthd3(te2));
+            instDefn(intOf(zfst3(te2)),zsnd3(te2),zthd3(te2));
             break;
          case M_DEFAULT:
-            defaultDefn(zfst(te2),zsnd(te2));
+            defaultDefn(intOf(zfst(te2)),zsnd(te2));
             break;
          case M_FOREIGN_IM:
-            foreignImport(zsel15(te2),zsel25(te2),zsel35(te2),
+            foreignImport(intOf(zsel15(te2)),zsel25(te2),zsel35(te2),
                           zsel45(te2),zsel55(te2));
             break;
          case M_FOREIGN_EX:
-            foreignExport(zsel15(te2),zsel25(te2),zsel35(te2),
+            foreignExport(intOf(zsel15(te2)),zsel25(te2),zsel35(te2),
                           zsel45(te2),zsel55(te2));
          case M_VALUE:
             valDefns = cons(te2,valDefns);
@@ -1168,7 +1173,6 @@ static Module parseModuleOrInterface ( ConId mc, Cell modeRequest )
          internal("parseModuleOrInterface");
    }
 
-
    /* Actually do the parsing. */
    if (useSource) {
       module(mod).srcExt = findText(sExt);
@@ -1220,8 +1224,12 @@ static void tryLoadGroup ( Cell grp )
          assert(nonNull(m));
          if (module(m).mode == FM_SOURCE) {
             processModule ( m );
+            module(m).tree = NIL;
          } else {
             processInterfaces ( singleton(snd(grp)) );
+            m = findModule(textOf(snd(grp)));
+            assert(nonNull(m));
+            module(m).tree = NIL;
          }
          break;
       case GRP_REC:
@@ -1235,6 +1243,11 @@ static void tryLoadGroup ( Cell grp )
             }
         }
          processInterfaces ( snd(grp) );
+        for (t = snd(grp); nonNull(t); t=tl(t)) {
+            m = findModule(textOf(hd(t)));
+            assert(nonNull(m));
+            module(m).tree = NIL;
+         }
          break;
       default:
          internal("tryLoadGroup");