[project @ 1999-01-15 17:59:26 by sof]
authorsof <unknown>
Fri, 15 Jan 1999 17:59:27 +0000 (17:59 +0000)
committersof <unknown>
Fri, 15 Jan 1999 17:59:27 +0000 (17:59 +0000)
Added options that 3.xx supported for dumping out selected
chunks of the .hi file to stdout, i.e.,

   -hi-with-imports      = prints out the import 'section' of the .hi file
   -hi-with-declarations = print  out just decls

(Only) useful when working with runstdtest, where we just want
to look at selected portions of the generated interface file.

ghc/driver/ghc-iface.lprl
ghc/driver/ghc.lprl

index 1666b78..02c0793 100644 (file)
@@ -49,9 +49,21 @@ sub postprocessHiFile {
     }
 
     # if we produced an interface file "no matter what",
-    # print what we got on stderr (ToDo: honor -ohi flag)
+    # print what we got on stderr.
     if ( $HiOnStdout ) {
-       system("$Cat $new_hi 1>&2");
+        if ( $HiWith ne '' ) {
+           # output some of the sections
+           local($hi_after)  = "$Tmp_prefix.hi-now";
+
+           foreach $hi ( split(' ',$HiWith) ) { 
+               $HiSection{$hi} = 1; 
+           }
+           &hiSectionsOnly($new_hi, $hi_after);
+
+           system("$Cat $hi_after 1>&2 ; $Rm $hi_after; ");
+       } else {
+            system("$Cat $new_hi 1>&2");
+       }
     } else {
        &run_something("$Cmp -s $hifile_target $new_hi || ( $Rm $hifile_target && $Cp $new_hi $hifile_target )",
           "Replace .$HiSuffix file, if changed");
@@ -77,6 +89,32 @@ sub deUsagifyHi {
 \end{code}
 
 \begin{code}
+sub hiSectionsOnly {
+    local($ifile,$ofile) = @_;
+
+    open(OLDHIF, "< $ifile") || &tidy_up_and_die(1,"Can't open $ifile (read)\n");
+    open(NEWHIF, "> $ofile") || &tidy_up_and_die(1,"Can't open $ofile (write)\n");
+
+    # read up to _usages_ line
+    $_ = <OLDHIF>;
+    while ($_ ne '' ) {
+       if ( /^__export/ && $HiSection {'exports'}           ||
+            /^import /  && $HiSection {'imports'}           ||
+            /^\d+ ([^ ]+ :: |type |data |class |newtype )/  && $HiSection {'declarations'} ||
+            /^instance / && $HiSection {'instances'} ) {
+                    print NEWHIF $_;
+                    $_ = <OLDHIF>;
+        } else {
+          $_ = <OLDHIF>;
+       }
+    }
+
+    close(OLDHIF) || &tidy_up_and_die(1,"Failed reading from $ifile\n");
+    close(NEWHIF) || &tidy_up_and_die(1,"Failed writing to $ofile\n");
+}
+\end{code}
+
+\begin{code}
 sub constructNewHiFile {
     local($hsc_hi,         # The iface info produced by hsc.
          *hifile_target,   # Pre-existing .hi filename (if it exists)
index 5d4bca7..b87d9b3 100644 (file)
@@ -2792,6 +2792,8 @@ arg: while($_ = $Args[0]) {
 
     /^-hi$/             && do { $HiOnStdout = 1; $ProduceHi = '-hifile='; next arg; };
     # _do_ generate an interface; usually used as: -noC -hi
+    /^-hi-with-(.*)$/    && do { $HiOnStdout = 1; $HiWith .= " $1" ; $ProduceHi = '-hifile='; next arg; };
+    # limit ourselves to outputting a particular section.
 
     /^-nohi$/      && do { $ProduceHi = '-nohifile='; next arg; };
     # don't generate an interface (even if generating C)