module Flatten where
import CoreSyn
import qualified Type
+import qualified Name
import qualified TyCon
+import qualified Maybe
import qualified CoreUtils
import qualified Control.Monad.State as State
type SignalUseMap = HsValueMap SignalUse
type SignalDefMap = HsValueMap SignalDef
+useMapToDefMap :: SignalUseMap -> SignalDefMap
+useMapToDefMap (Single (SignalUse u)) = Single (SignalDef u)
+useMapToDefMap (Tuple uses) = Tuple (map useMapToDefMap uses)
+
type SignalId = Int
data SignalUse = SignalUse {
sigUseId :: SignalId
-- Create signal names for the binder
defs <- genSignalUses arg_ty
let binds' = (b, Left defs):binds
- flattenExpr binds' expr
+ (args, res) <- flattenExpr binds' expr
+ return ((useMapToDefMap defs) : args, res)
+
+flattenExpr binds (Var id) =
+ case bind of
+ Left sig_use -> return ([], sig_use)
+ Right _ -> error "Higher order functions not supported."
+ where
+ bind = Maybe.fromMaybe
+ (error $ "Argument " ++ Name.getOccString id ++ "is unknown")
+ (lookup id binds)
flattenExpr _ _ = do
return ([], Tuple [])