[project @ 2001-03-23 16:36:20 by simonmar]
[ghc-hetmet.git] / ghc / compiler / main / CodeOutput.lhs
index 3335b89..3ff665e 100644 (file)
@@ -9,6 +9,7 @@ module CodeOutput( codeOutput ) where
 #include "HsVersions.h"
 
 #ifndef OMIT_NATIVE_CODEGEN
+import UniqSupply      ( mkSplitUniqSupply )
 import AsmCodeGen      ( nativeCodeGen )
 #endif
 
@@ -19,6 +20,7 @@ import IlxGen         ( ilxGen )
 import JavaGen         ( javaGen )
 import qualified PrintJava
 
+import DriverState     ( v_HCHeader )
 import TyCon           ( TyCon )
 import Id              ( Id )
 import CoreSyn         ( CoreBind )
@@ -32,9 +34,9 @@ import ErrUtils               ( dumpIfSet_dyn, showPass )
 import Outputable
 import CmdLineOpts     ( DynFlags, HscLang(..), dopt_OutName )
 import TmpFiles                ( newTempName )
-import UniqSupply      ( mkSplitUniqSupply )
 
-import IO              ( IOMode(..), hClose, openFile, Handle )
+import IOExts
+import IO
 \end{code}
 
 
@@ -73,6 +75,10 @@ codeOutput dflags mod_name tycons core_binds stg_binds
                               >> return stub_names
              HscJava        -> outputJava dflags filenm mod_name tycons core_binds
                               >> return stub_names
+#ifdef ILX
+            HscILX         -> outputIlx dflags filenm mod_name tycons stg_binds
+                              >> return stub_names
+#endif
        }
 
 doOutput :: String -> (Handle -> IO ()) -> IO ()
@@ -94,7 +100,10 @@ doOutput filenm io_action
 \begin{code}
 outputC dflags filenm flat_absC
   = do dumpIfSet_dyn dflags Opt_D_dump_realC "Real C" (dumpRealC flat_absC)
-       doOutput filenm (\ h -> writeRealC h flat_absC)
+       header <- readIORef v_HCHeader
+       doOutput filenm $ \ h -> do
+         hPutStr h header
+         writeRealC h flat_absC
 \end{code}
 
 
@@ -146,6 +155,22 @@ outputJava dflags filenm mod tycons core_binds
 
 %************************************************************************
 %*                                                                     *
+\subsection{Ilx}
+%*                                                                     *
+%************************************************************************
+
+\begin{code}
+#ifdef ILX
+outputIlx dflags filename mod tycons stg_binds
+  =  doOutput filename (\ f -> printForC f pp_ilx)
+  where
+    pp_ilx = ilxGen mod tycons stg_binds
+#endif
+\end{code}
+
+
+%************************************************************************
+%*                                                                     *
 \subsection{Foreign import/export}
 %*                                                                     *
 %************************************************************************