X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FsimplCore%2FSimplify.lhs;h=866b2d4fcaf2a85ed25d35b328ae207df6437711;hb=78260da4deee97a866ba83f8d73a8284b371f405;hp=07bd02c08a6568a6bd20a67c96cf1e0ef3ebd4ed;hpb=1d2f5511ad8f33a4702ee7670193a525e9a9d757;p=ghc-hetmet.git diff --git a/compiler/simplCore/Simplify.lhs b/compiler/simplCore/Simplify.lhs index 07bd02c..866b2d4 100644 --- a/compiler/simplCore/Simplify.lhs +++ b/compiler/simplCore/Simplify.lhs @@ -13,7 +13,6 @@ import SimplMonad import Type hiding ( substTy, extendTvSubst ) import SimplEnv import SimplUtils -import Literal ( mkStringLit ) import MkId ( rUNTIME_ERROR_ID ) import Id import Var @@ -26,7 +25,7 @@ import NewDemand ( isStrictDmd ) import PprCore ( pprParendExpr, pprCoreExpr ) import CoreUnfold ( mkUnfolding, callSiteInline, CallCtxt(..) ) import CoreUtils -import Rules ( lookupRule ) +import Rules ( lookupRule, getRules ) import BasicTypes ( isMarkedStrict ) import CostCentre ( currentCCS ) import TysPrim ( realWorldStatePrimTy ) @@ -1034,12 +1033,13 @@ completeCall env var cont -- is recursive, and hence a loop breaker: -- foldr k z (build g) = g k z -- So it's up to the programmer: rules can cause divergence - ; rules <- getRules + ; rule_base <- getSimplRules ; let in_scope = getInScope env + rules = getRules rule_base var maybe_rule = case activeRule dflags env of Nothing -> Nothing -- No rules apply Just act_fn -> lookupRule act_fn in_scope - rules var args + var args rules ; case maybe_rule of { Just (rule, rule_rhs) -> do tick (RuleFired (ru_name rule)) @@ -1263,7 +1263,7 @@ rebuildCase env scrut case_bndr alts cont -- inaccessible. So we simply put an error case here instead. pprTrace "mkCase: null alts" (ppr case_bndr <+> ppr scrut) $ let res_ty' = contResultType env' (substTy env' (coreAltsType alts)) dup_cont - lit = Lit (mkStringLit "Impossible alternative") + lit = mkStringLit "Impossible alternative" in return (env', mkApps (Var rUNTIME_ERROR_ID) [Type res_ty', lit]) else do