@@ -70,21 +70,21 @@ type Interface = String
70buildFile :: Flags -> Int -> Int -> FilePath -> IO Interface
70buildFile :: Flags -> Int -> Int -> FilePath -> IO Interface
71buildFile flags moduleNum numModules filePath =
71buildFile flags moduleNum numModules filePath =
72 do compiled <- alreadyCompiled
72 do compiled <- alreadyCompiled
73− if compiled then getInterface else compile
73+ if compiled then readFile elmo else compile
76 file :: String -> FilePath
76 file :: String -> FilePath
77 file ext = output_directory flags </> replaceExtension filePath ext
77 file ext = output_directory flags </> replaceExtension filePath ext
79− interface :: FilePath
79+ elmo :: FilePath
80− interface = file "elmi"
80+ elmo = file "elmo"
82 alreadyCompiled :: IO Bool
82 alreadyCompiled :: IO Bool
83 alreadyCompiled = do
83 alreadyCompiled = do
84− exists <- doesFileExist interface
84+ exists <- doesFileExist elmo
85 if not exists then return False
85 if not exists then return False
86 else do tsrc <- getModificationTime filePath
86 else do tsrc <- getModificationTime filePath
87− tint <- getModificationTime interface
87+ tint <- getModificationTime elmo
88 return (tsrc < tint)
88 return (tsrc < tint)
90 number :: String
90 number :: String
@@ -97,19 +97,16 @@ buildFile flags moduleNum numModules filePath =
97 compile = do
97 compile = do
98 putStrLn (number ++ " Compiling " ++ name)
98 putStrLn (number ++ " Compiling " ++ name)
99 source <- readFile filePath
99 source <- readFile filePath
100− (inter,obj) <-
100+ (interface,obj) <-
101 if takeExtension filePath == ".js" then return ("",source) else
101 if takeExtension filePath == ".js" then return ("",source) else
102 case buildFromSource (no_prelude flags) source of
102 case buildFromSource (no_prelude flags) source of
103 Left err -> putStrLn err >> exitFailure
103 Left err -> putStrLn err >> exitFailure
104+ Right modul -> do exs <- exportInfo modul
104− Right modul -> return (show modul, jsModule modul)
105+ return (exs, jsModule modul)
105 createDirectoryIfMissing True (output_directory flags)
106 createDirectoryIfMissing True (output_directory flags)
106− writeFile interface inter
107+ writeFile elmo obj
107− writeFile (file "elmo") obj
108− return inter
108+ return obj
110− getInterface :: IO Interface
114getRuntime :: Flags -> IO FilePath
111getRuntime :: Flags -> IO FilePath
115getRuntime flags =
112getRuntime flags =
@@ -153,3 +150,9 @@ buildFiles flags numModules interfaces (filePath:rest) = do
153 let moduleName = intercalate "." (splitDirectories (dropExtensions filePath))
150 let moduleName = intercalate "." (splitDirectories (dropExtensions filePath))
154 interfaces' = Map.insert moduleName interface interfaces
151 interfaces' = Map.insert moduleName interface interfaces
155 buildFiles flags numModules interfaces' rest
152 buildFiles flags numModules interfaces' rest
155+exportInfo :: Module -> IO String
156+exportInfo (Module names ims exs stmts) =