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
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
21 getdecls (Decl n t) = ["#ship " ++ n ++ " : " ++ t]
22 getdecls (Seq es) = concatMap getdecls es
23 getdecls (Par es) = concatMap getdecls es
26 compileDef (Def s _ _ e) =
28 (join "\n" $ getdecls e)++"\n"++
29 (join "\n" $ map show (compile e))