- doalt alt@(DEFAULT, [], expr) = return ([], alt)
+ doalt alt@(DEFAULT, [], expr) = do
+ local_var <- Trans.lift $ is_local_var expr
+ repr <- isRepr expr
+ -- Extract any expressions that is not a local var already and is
+ -- representable (to prevent loops with inlinenonrep).
+ (exprbinding_maybe, expr') <- if (not local_var) && repr
+ then do
+ id <- Trans.lift $ mkBinderFor expr "caseval"
+ -- We don't flag a change here, since casevalsimpl will do that above
+ -- based on Just we return here.
+ return (Just (id, expr), Var id)
+ else
+ -- Don't simplify anything else
+ return (Nothing, expr)
+ let newalt = (DEFAULT, [], expr')
+ let bindings = Maybe.catMaybes [exprbinding_maybe]
+ return (bindings, newalt)