X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=Flatten.hs;h=cd515859f0879755d9d7f6e704bfb241271d9fbc;hb=472a96af53dd624ba526ab86f250ac8f88a152ef;hp=e550db8b695045a808bc97f6dc570fb15051c8e2;hpb=a07f47bf0b471c935e3e76e814b2f6ebfb298d35;p=matthijs%2Fmaster-project%2Fc%CE%BBash.git diff --git a/Flatten.hs b/Flatten.hs index e550db8..cd51585 100644 --- a/Flatten.hs +++ b/Flatten.hs @@ -23,11 +23,11 @@ dataConAppArgs dc args = where tycount = length $ DataCon.dataConAllTyVars dc -genSignalUses :: +genSignals :: Type.Type - -> FlattenState (SignalUseMap UnnamedSignal) + -> FlattenState (SignalMap UnnamedSignal) -genSignalUses ty = do +genSignals ty = do typeMapToUseMap tymap where -- First generate a map with the right structure containing the types @@ -35,11 +35,11 @@ genSignalUses ty = do typeMapToUseMap :: HsValueMap Type.Type - -> FlattenState (SignalUseMap UnnamedSignal) + -> FlattenState (SignalMap UnnamedSignal) typeMapToUseMap (Single ty) = do - id <- genSignalId - return $ Single (SignalUse id) + id <- genSignalId ty + return $ Single id typeMapToUseMap (Tuple tymaps) = do usemaps <- State.mapM typeMapToUseMap tymaps @@ -53,26 +53,26 @@ flattenFunction :: flattenFunction _ (Rec _) = error "Recursive binders not supported" flattenFunction hsfunc bind@(NonRec var expr) = - FlatFunction args res apps conds + FlatFunction args res apps conds sigs where - init_state = ([], [], 0) + init_state = ([], [], [], 0) (fres, end_state) = State.runState (flattenExpr [] expr) init_state (args, res) = fres - (apps, conds, _) = end_state + (apps, conds, sigs, _) = end_state flattenExpr :: BindMap -> CoreExpr - -> FlattenState ([SignalDefMap UnnamedSignal], (SignalUseMap UnnamedSignal)) + -> FlattenState ([SignalMap UnnamedSignal], (SignalMap UnnamedSignal)) flattenExpr binds lam@(Lam b expr) = do -- Find the type of the binder let (arg_ty, _) = Type.splitFunTy (CoreUtils.exprType lam) -- Create signal names for the binder - defs <- genSignalUses arg_ty + defs <- genSignals arg_ty let binds' = (b, Left defs):binds (args, res) <- flattenExpr binds' expr - return ((useMapToDefMap defs) : args, res) + return (defs : args, res) flattenExpr binds (Var id) = case bind of @@ -114,12 +114,12 @@ flattenExpr binds app@(App _ _) = do -- Check and split each of the arguments let (_, arg_ress) = unzip (zipWith checkArg args flat_args) -- Generate signals for our result - res <- genSignalUses ty + res <- genSignals ty -- Create the function application let app = FApp { appFunc = func, appArgs = arg_ress, - appRes = useMapToDefMap res + appRes = res } addApp app return ([], res) @@ -154,7 +154,7 @@ flattenExpr binds expr@(Case (Var v) b _ alts) = -> Var.Var -- The scrutinee -> CoreBndr -- The binder to bind the scrutinee to -> CoreAlt -- The single alternative - -> FlattenState ( [SignalDefMap UnnamedSignal], SignalUseMap UnnamedSignal) + -> FlattenState ( [SignalMap UnnamedSignal], SignalMap UnnamedSignal) -- See expandExpr flattenSingleAltCaseExpr binds v b alt@(DataAlt datacon, bind_vars, expr) = if not (DataCon.isTupleCon datacon)