Make flattenExpr return signal definitions for arguments.
authorMatthijs Kooijman <m.kooijman@student.utwente.nl>
Mon, 9 Feb 2009 15:00:01 +0000 (16:00 +0100)
committerMatthijs Kooijman <m.kooijman@student.utwente.nl>
Mon, 9 Feb 2009 15:00:28 +0000 (16:00 +0100)
This makes the "wire" example be flattened properly.

Flatten.hs

index 52316eca08a97dd07d0cfff45e555c3ab0c17aff..598c8c6050df46cba753bb97351aff4abf4c559a 100644 (file)
@@ -44,6 +44,10 @@ data FlatFunction = FlatFunction {
 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
@@ -167,7 +171,8 @@ flattenExpr binds lam@(Lam b expr) = do
   -- 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