on master help sign in
Handle --no-prelude flag in the Metadata.Prelude module rather than distributed across many modules
9ff2622Evan Czaplicki
compiler/Build/Source.hs+1−1
@@ -26,7 +26,7 @@ import qualified Transform.Canonicalize as Canonical
26
26
27build :: Bool -> Interfaces -> String -> Either [Doc] MetadataModule
27build :: Bool -> Interfaces -> String -> Either [Doc] MetadataModule
28build noPrelude interfaces source =
28build noPrelude interfaces source =
29− do let add = if noPrelude then id else Prelude.add
29+ do let add = Prelude.add noPrelude
30 infixes = Map.fromList . map (\(assoc,lvl,op) -> (op,(lvl,assoc)))
30 infixes = Map.fromList . map (\(assoc,lvl,op) -> (op,(lvl,assoc)))
31 . concatMap iFixities $ Map.elems interfaces
31 . concatMap iFixities $ Map.elems interfaces
32
32
compiler/Compiler.hs+1−1
@@ -31,7 +31,7 @@ compileArgs flags =
31build :: Flag.Flags -> FilePath -> IO ()
31build :: Flag.Flags -> FilePath -> IO ()
32build flags rootFile =
32build flags rootFile =
33 do let noPrelude = Flag.no_prelude flags
33 do let noPrelude = Flag.no_prelude flags
34− builtIns <- if noPrelude then return Map.empty else Prelude.interfaces
34+ builtIns <- Prelude.interfaces noPrelude
35
35
36 files <- if Flag.make flags
36 files <- if Flag.make flags
37 then getSortedDependencies (Flag.src_dir flags) builtIns rootFile
37 then getSortedDependencies (Flag.src_dir flags) builtIns rootFile
compiler/Elm/Internal/Utils.hs+1−1
@@ -21,7 +21,7 @@ compile source =
21
21
22{-# NOINLINE interfaces #-}
22{-# NOINLINE interfaces #-}
23interfaces :: M.Interfaces
23interfaces :: M.Interfaces
24−interfaces = unsafePerformIO $ Prelude.interfaces
24+interfaces = unsafePerformIO $ Prelude.interfaces False
25
25
26-- |This function extracts the module name of a given source program.
26-- |This function extracts the module name of a given source program.
27moduleName :: String -> Maybe String
27moduleName :: String -> Maybe String
compiler/Metadata/Prelude.hs+7−5
@@ -13,10 +13,10 @@ import qualified Data.ByteString.Lazy as BS
13
13
14import qualified InterfaceSerialization as IS
14import qualified InterfaceSerialization as IS
15
15
16−add :: Module def -> Module def
16+add :: Bool -> Module def -> Module def
17−add (Module name exs ims decls) = Module name exs (customIms ++ ims) decls
17+add noPrelude (Module name exs ims decls) = Module name exs (customIms ++ ims) decls
18 where
18 where
19− customIms = concatMap addModule prelude
19+ customIms = if noPrelude then [] else concatMap addModule prelude
20
20
21 addModule (n, method) = case lookup n ims of
21 addModule (n, method) = case lookup n ims of
22 Nothing -> [(n, method)]
22 Nothing -> [(n, method)]
@@ -30,8 +30,10 @@ prelude = text ++ map (\n -> (n, Hiding [])) modules
30 modules = [ "Basics", "Signal", "List", "Maybe", "Time", "Prelude"
30 modules = [ "Basics", "Signal", "List", "Maybe", "Time", "Prelude"
31 , "Graphics.Element", "Color", "Graphics.Collage" ]
31 , "Graphics.Element", "Color", "Graphics.Collage" ]
32
32
33−interfaces :: IO Interfaces
33+interfaces :: Bool -> IO Interfaces
34+interfaces noPrelude =
34−interfaces = safeReadDocs =<< Path.getDataFileName "interfaces.data"
35+ do ifaces <- safeReadDocs =<< Path.getDataFileName "interfaces.data"
36+ return $ if noPrelude then Map.empty else ifaces
35
37
36safeReadDocs :: FilePath -> IO Interfaces
38safeReadDocs :: FilePath -> IO Interfaces
37safeReadDocs name =
39safeReadDocs name =