projects
/
matthijs
/
master-project
/
cλash.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Support binding the scrutinee of a Case expression.
[matthijs/master-project/cλash.git]
/
Flatten.hs
diff --git
a/Flatten.hs
b/Flatten.hs
index 74b3232a338640a1372d120ce164b6b388be6b12..8c4c7ab51ba2e3f536f97e5b3001dde863ebb396 100644
(file)
--- a/
Flatten.hs
+++ b/
Flatten.hs
@@
-268,11
+268,12
@@
flattenExpr binds expr@(Case scrut b _ alts) = do
-- TODO: Special casing for higher order functions
-- Flatten the scrutinee
(_, res) <- flattenExpr binds scrut
-- TODO: Special casing for higher order functions
-- Flatten the scrutinee
(_, res) <- flattenExpr binds scrut
+ -- Put the scrutinee in the BindMap
+ let binds' = (b, Left res) : binds
case alts of
case alts of
- -- TODO include b in the binds list
- [alt] -> flattenSingleAltCaseExpr binds res b alt
+ [alt] -> flattenSingleAltCaseExpr binds' res b alt
-- Reverse the alternatives, so the __DEFAULT alternative ends up last
-- Reverse the alternatives, so the __DEFAULT alternative ends up last
- otherwise -> flattenMultipleAltCaseExpr binds res b (reverse alts)
+ otherwise -> flattenMultipleAltCaseExpr binds
'
res b (reverse alts)
where
flattenSingleAltCaseExpr ::
BindMap
where
flattenSingleAltCaseExpr ::
BindMap