More refactoring
authorIan Lynagh <igloo@earth.li>
Wed, 23 Mar 2011 18:40:28 +0000 (18:40 +0000)
committerIan Lynagh <igloo@earth.li>
Wed, 23 Mar 2011 18:40:28 +0000 (18:40 +0000)
DirectCodegen.hs
Main.hs

index 44c053b..3482fb9 100644 (file)
@@ -70,24 +70,8 @@ splitExt name =
             where
             (restBase, restExt) = splitExt rest
 
-output :: [Flag] -> FilePath -> String -> [Token] -> IO ()
-output flags compiler name toks = do
-
-    (outName, outDir, outBase) <- case [f | Output f <- flags] of
-        [] -> if not (null ext) && last ext == 'c'
-                 then return (dir++base++init ext,  dir, base)
-                 else
-                    if ext == ".hs"
-                       then return (dir++base++"_out.hs", dir, base)
-                       else return (dir++base++".hs",     dir, base)
-              where
-               (dir,  file) = splitName name
-               (base, ext)  = splitExt  file
-        [f] -> let
-            (dir,  file) = splitName f
-            (base, _)    = splitExt file
-            in return (f, dir, base)
-        _ -> onlyOne "output file"
+output :: [Flag] -> FilePath -> FilePath -> FilePath -> FilePath -> String -> [Token] -> IO ()
+output flags compiler outName outDir outBase name toks = do
 
     let cProgName    = outDir++outBase++"_hsc_make.c"
         oProgName    = outDir++outBase++"_hsc_make.o"
diff --git a/Main.hs b/Main.hs
index d3b2893..10f08bc 100644 (file)
--- a/Main.hs
+++ b/Main.hs
@@ -14,7 +14,7 @@
 #include "../../includes/ghcconfig.h"
 #endif
 
-import Control.Monad            ( liftM )
+import Control.Monad            ( liftM, forM_ )
 import Data.List                ( isSuffixOf )
 import System.Console.GetOpt
 
@@ -184,13 +184,25 @@ processFiles flags files usage = do
                       Just path -> return path
         cs  -> return (last cs)
 
-    mapM_ (processFile flags_w_tpl compiler) files
-
-processFile :: [Flag] -> FilePath -> String -> IO ()
-processFile flags compiler name
-  = do let file_name = dosifyPath name
-       toks <- parseFile file_name
-       output flags compiler file_name toks
+    forM_ files (\name -> do
+        (outName, outDir, outBase) <- case [f | Output f <- flags_w_tpl] of
+             [] -> if not (null ext) && last ext == 'c'
+                      then return (dir++base++init ext,  dir, base)
+                      else
+                         if ext == ".hs"
+                            then return (dir++base++"_out.hs", dir, base)
+                            else return (dir++base++".hs",     dir, base)
+                   where
+                    (dir,  file) = splitName name
+                    (base, ext)  = splitExt  file
+             [f] -> let
+                 (dir,  file) = splitName f
+                 (base, _)    = splitExt file
+                 in return (f, dir, base)
+             _ -> onlyOne "output file"
+        let file_name = dosifyPath name
+        toks <- parseFile file_name
+        output flags_w_tpl compiler outName outDir outBase file_name toks)
 
 parseFile :: String -> IO [Token]
 parseFile name