cdbf292cb8384637819545439469613f03c2400d
[fleet.git] / src / edu / berkeley / fleet / f0 / Compile.lhs
1 \begin{code}
2 module Compile where
3 import SBP
4 import Types
5 import Util
6 import Fleet
7
8 compile :: Expr -> [Inst]
9 compile (Decl _ _)      = []
10 compile (Seq s)         = error "bleh"
11 compile (Par e)         = concatMap compile e
12 compile (Move 1 s [d])    = [ (move s) { m_dest=(Just d) }, (accept d) ]
13 compile (Move 1 s d)      = [itake s]++sends++recvs
14  where
15    sends = map (\x -> ((send   s) { m_dest=(Just x) })) d
16    recvs = map (\x -> ((accept x) )) d
17 compile (Literal 0 lit ds) =  concatMap (\d -> [ ILiteral lit d, (accept d) {m_count=0} ]) ds
18 compile (Literal 1 lit ds) =  concatMap (\d -> [ ILiteral lit d, (accept d)             ]) ds
19 compile (Literal n lit ds) =  concatMap (\d -> [ ILiteral lit d, (accept d) {m_count=n} ]) ds
20
21 getdecls (Decl n t) = ["#ship " ++ n ++ " : " ++ t]
22 getdecls (Seq es)   = concatMap getdecls es
23 getdecls (Par es)   = concatMap getdecls es
24 getdecls _          = []
25
26 compileDef (Def s _ _ e) =
27     "// " ++ s ++ "\n" ++
28     (join "\n" $ getdecls e)++"\n"++
29     (join "\n" $ map show (compile e))
30 \end{code}