+ do {
+ outputForeignStubs c_code h_code ;
+ case opt_OutputLanguage of {
+ Nothing -> return () -- No -olang=xxx flag; so no-op
+ ; Just "asm" -> outputAsm flat_abstractC ncg_uniqs
+ ; Just "C" -> outputC flat_abstractC
+ ; Just "java" -> outputJava mod_name tycons core_binds
+ ; Just foo -> pprPanic "Don't understand output language" (quotes (text foo))
+ } }
+
+
+doOutput :: (Handle -> IO ()) -> IO ()
+doOutput io_action
+ = (do handle <- openFile opt_OutputFile WriteMode
+ io_action handle
+ hClose handle)
+ `catch` (\err -> pprPanic "Failed to open or write code output file" (text opt_OutputFile))
+\end{code}
+
+
+%************************************************************************
+%* *
+\subsection{C}
+%* *
+%************************************************************************
+
+\begin{code}
+outputC flat_absC
+ = do
+ dumpIfSet opt_D_dump_realC "Real C" (dumpRealC flat_absC)
+ doOutput (\ h -> writeRealC h flat_absC)
+\end{code}
+
+
+%************************************************************************
+%* *
+\subsection{Assembler}
+%* *
+%************************************************************************
+
+\begin{code}
+outputAsm flat_absC ncg_uniqs
+#ifndef OMIT_NATIVE_CODEGEN
+
+ = do dumpIfSet opt_D_dump_stix "Final stix code" stix_final
+ dumpIfSet opt_D_dump_asm "Asm code" ncg_output_d
+ doOutput ( \f -> printForAsm f ncg_output_d)
+ where
+ (stix_final, ncg_output_d) = nativeCodeGen flat_absC ncg_uniqs
+
+#else /* OMIT_NATIVE_CODEGEN */