on master help sign in
Take correct file path, even if module name is not given
dd8843fEvan Czaplicki
compiler/Compiler.hs+3−3
@@ -19,7 +19,7 @@ import qualified Data.ByteString.Lazy.Char8 as BS
19import qualified Metadata.Prelude as Prelude
19import qualified Metadata.Prelude as Prelude
20import qualified Transform.Canonicalize as Canonical
20import qualified Transform.Canonicalize as Canonical
21import SourceSyntax.Module
21import SourceSyntax.Module
22−import Initialize (buildFromSource, getSortedModuleNames, Interfaces)
22+import Initialize (buildFromSource, getSortedDependencies)
23import Generate.JavaScript (jsModule)
23import Generate.JavaScript (jsModule)
24import Generate.Html (createHtml, JSStyle(..), JSSource(..))
24import Generate.Html (createHtml, JSStyle(..), JSSource(..))
25import Paths_Elm
25import Paths_Elm
@@ -153,7 +153,7 @@ getRuntime flags =
153build :: Flags -> FilePath -> IO ()
153build :: Flags -> FilePath -> IO ()
154build flags rootFile = do
154build flags rootFile = do
155 let noPrelude = no_prelude flags
155 let noPrelude = no_prelude flags
156− files <- if make flags then getSortedModuleNames noPrelude rootFile else return [rootFile]
156+ files <- if make flags then getSortedDependencies noPrelude rootFile else return [rootFile]
157 let ifaces = if noPrelude then Map.empty else Prelude.interfaces
157 let ifaces = if noPrelude then Map.empty else Prelude.interfaces
158 interfaces <- buildFiles flags (length files) ifaces files
158 interfaces <- buildFiles flags (length files) ifaces files
159 js <- foldM appendToOutput "" files
159 js <- foldM appendToOutput "" files
@@ -185,6 +185,6 @@ buildFiles :: Flags -> Int -> Interfaces -> [FilePath] -> IO Interfaces
185buildFiles _ _ interfaces [] = return interfaces
185buildFiles _ _ interfaces [] = return interfaces
186buildFiles flags numModules interfaces (filePath:rest) = do
186buildFiles flags numModules interfaces (filePath:rest) = do
187 interface <- buildFile flags (numModules - length rest) numModules interfaces filePath
187 interface <- buildFile flags (numModules - length rest) numModules interfaces filePath
188− let moduleName = List.intercalate "." (splitDirectories (dropExtensions filePath))
188+ let moduleName = List.intercalate "." . splitDirectories $ dropExtensions filePath
189 interfaces' = Map.insert moduleName interface interfaces
189 interfaces' = Map.insert moduleName interface interfaces
190 buildFiles flags numModules interfaces' rest
190 buildFiles flags numModules interfaces' rest
compiler/Initialize.hs+6−7
@@ -1,4 +1,4 @@
1−module Initialize (buildFromSource, getSortedModuleNames, Interfaces) where
1+module Initialize (buildFromSource, getSortedDependencies) where
2
2
3import Data.Data
3import Data.Data
4import Control.Monad.State
4import Control.Monad.State
@@ -56,11 +56,11 @@ buildFromSource noPrelude interfaces source =
56 return $ metaModule { types = types, exports = exports' }
56 return $ metaModule { types = types, exports = exports' }
57
57
58
58
59−getSortedModuleNames :: Bool -> FilePath -> IO [String]
59+getSortedDependencies :: Bool -> FilePath -> IO [String]
60−getSortedModuleNames noPrelude root =
60+getSortedDependencies noPrelude root =
61 sortDeps =<< readDeps noPrelude root
61 sortDeps =<< readDeps noPrelude root
62
62
63−type Deps = (String, [String])
63+type Deps = (FilePath, String, [String])
64
64
65sortDeps :: [Deps] -> IO [String]
65sortDeps :: [Deps] -> IO [String]
66sortDeps depends =
66sortDeps depends =
@@ -68,8 +68,7 @@ sortDeps depends =
68 then return (concat sccs)
68 then return (concat sccs)
69 else print msg >> mapM print mistakes >> exitFailure
69 else print msg >> mapM print mistakes >> exitFailure
70 where
70 where
71− graph = map (\(name, deps) -> (toFilePath name, name, deps)) depends
72− sccs = map Graph.flattenSCC $ Graph.stronglyConnComp graph
71+ sccs = map Graph.flattenSCC $ Graph.stronglyConnComp depends
73
72
74 mistakes = filter (\scc -> length scc > 1) sccs
73 mistakes = filter (\scc -> length scc > 1) sccs
75 msg = "A cyclical module dependency or was detected in: "
74 msg = "A cyclical module dependency or was detected in: "
@@ -93,7 +92,7 @@ readDeps noPrelude root = evalStateT (go root) Set.empty
93 newDeps = Set.difference (Set.filter (not . isNative) realDeps) seen
92 newDeps = Set.difference (Set.filter (not . isNative) realDeps) seen
94 put (Set.insert name (Set.union newDeps seen))
93 put (Set.insert name (Set.union newDeps seen))
95 rest <- mapM (go . toFilePath) (Set.toList newDeps)
94 rest <- mapM (go . toFilePath) (Set.toList newDeps)
96− return ((name, Set.toList realDeps) : concat rest)
95+ return ((makeRelative "." root, name, Set.toList realDeps) : concat rest)
97
96
98
97
99isNative name = List.isPrefixOf "Native." name
98isNative name = List.isPrefixOf "Native." name