+ -- Dunno if the above comment is still meaningful now. JRS 001024.
+
+ do { showPass dflags "CodeOutput"
+ ; let filenm = dopt_OutName dflags
+ ; stub_names <- outputForeignStubs dflags c_code h_code
+ ; case dopt_HscLang dflags of
+ HscInterpreted -> return stub_names
+ HscAsm -> outputAsm dflags filenm flat_abstractC
+ >> return stub_names
+ HscC -> outputC dflags filenm flat_abstractC
+ >> 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 ()
+doOutput filenm io_action
+ = (do handle <- openFile filenm WriteMode
+ io_action handle
+ hClose handle)
+ `catch` (\err -> pprPanic "Failed to open or write code output file"
+ (text filenm))
+\end{code}
+
+
+%************************************************************************
+%* *
+\subsection{C}
+%* *
+%************************************************************************
+
+\begin{code}
+outputC dflags filenm flat_absC
+ = do dumpIfSet_dyn dflags Opt_D_dump_realC "Real C" (dumpRealC flat_absC)
+ header <- readIORef v_HCHeader
+ doOutput filenm $ \ h -> do
+ hPutStr h header
+ writeRealC h flat_absC
+\end{code}
+
+
+%************************************************************************
+%* *
+\subsection{Assembler}
+%* *
+%************************************************************************
+
+\begin{code}
+outputAsm dflags filenm flat_absC
+
+#ifndef OMIT_NATIVE_CODEGEN
+
+ = do ncg_uniqs <- mkSplitUniqSupply 'n'
+ let (stix_final, ncg_output_d) = _scc_ "NativeCodeGen"
+ nativeCodeGen flat_absC ncg_uniqs
+ dumpIfSet_dyn dflags Opt_D_dump_stix "Final stix code" stix_final
+ dumpIfSet_dyn dflags Opt_D_dump_asm "Asm code" ncg_output_d
+ _scc_ "OutputAsm" doOutput filenm ( \f -> printForAsm f ncg_output_d)
+ where
+
+#else /* OMIT_NATIVE_CODEGEN */
+
+ = pprPanic "This compiler was built without a native code generator"
+ (text "Use -fvia-C instead")
+
+#endif
+\end{code}
+