on master help sign in
Strip out code made irrelevant by Canonicalizer
115773fEvan Czaplicki
compiler/Build/Source.hs+10−39
@@ -2,57 +2,28 @@
2module Build.Source (build) where
2module Build.Source (build) where
3
3
4import qualified Data.Map as Map
4import qualified Data.Map as Map
5−import System.FilePath as FP
6import Text.PrettyPrint (Doc)
5import Text.PrettyPrint (Doc)
7
6
8−import AST.Declaration
9import AST.Module
7import AST.Module
10−import qualified AST.Expression.General as Expr
11−import qualified AST.Pattern as Pattern
12−import qualified AST.Type as Type
13import qualified Parse.Parse as Parse
8import qualified Parse.Parse as Parse
14import qualified Metadata.Prelude as Prelude
9import qualified Metadata.Prelude as Prelude
15import qualified Transform.Check as Check
10import qualified Transform.Check as Check
16−import qualified Transform.SortDefinitions as SD
17import qualified Type.Inference as TI
11import qualified Type.Inference as TI
18−import qualified Transform.Declaration as TcDecl
19import qualified Transform.Canonicalize as Canonical
12import qualified Transform.Canonicalize as Canonical
20
13
21−build :: Bool -> Interfaces -> String -> Either [Doc] MetadataModule
14+build :: Bool -> Interfaces -> String -> Either [Doc] CanonicalModule
22build noPrelude interfaces source =
15build noPrelude interfaces source =
23− do let add = Prelude.add noPrelude
24− infixes = Map.fromList . map (\(assoc,lvl,op) -> (op,(lvl,assoc)))
16+ do let infixes = Map.fromList . map (\(assoc,lvl,op) -> (op,(lvl,assoc)))
25 . concatMap iFixities $ Map.elems interfaces
17 . concatMap iFixities $ Map.elems interfaces
26
18
27− Module names exs ims decls <- do
19+ validModule <- do
28− modul@(Module _ _ _ decls) <- add `fmap` Parse.program infixes source
20+ modul <- Prelude.add noPrelude `fmap` Parse.program infixes source
29− case Check.mistakes decls of
21+ case Check.mistakes (body modul) of
30− [] -> return modul
22+ [] -> return modul
31− ms -> Left ms
23+ ms -> Left ms
32
24
33− let exports'
25+ canonicalModule <- Canonical.module' interfaces validModule
34− | null exs =
35− let get = Pattern.boundVarList in
36− concat [ get pattern | Definition (Expr.Definition pattern _ _) <- decls ] ++
37− concat [ map fst ctors | Datatype _ _ ctors <- decls ] ++
38− [ name | TypeAlias name _ (Type.Record _ _) <- decls ]
39− | otherwise = exs
40
26
41− metaModule <- Canonical.metadataModule interfaces $
27+ types <- TI.infer interfaces canonicalModule
42− MetadataModule
43− { names = names
44− , path = FP.joinPath names
45− , exports = exports'
46− , imports = ims
47− -- reorder AST into strongly connected components
48− , program = SD.sortDefs . Expr.dummyLet $ TcDecl.toExpr decls
49− , types = Map.empty
50− , datatypes = [ (name,vars,ctors) | Datatype name vars ctors <- decls ]
51− , fixities = [ (assoc,level,op) | Fixity assoc level op <- decls ]
52− , aliases = [ (name,tvs,tipe) | TypeAlias name tvs tipe <- decls ]
53− , ports = [ portName port | Port port <- decls ]
54− }
55
28
56− types <- TI.infer interfaces metaModule
57−
58− return $ metaModule { types = types }
29+ return $ canonicalModule { body = (body canonicalModule) { types = types } }