packages feed

ruler-0.4.0.0: src/ARule/ElimWildcAssign.cag

-- $Id: Ruler.ag 231 2005-06-07 14:39:41Z atze $

-------------------------------------------------------------------------
-- Optimisation: Elimination of assignments to wildcard
-------------------------------------------------------------------------

%%[1 hs module (ARule.ElimWildcAssign)
%%]

%%[1 hs export (arlElimWild)
%%]

%%[1 hs import (qualified Data.Map as Map, Common, Expr.Expr, ARule.ARule)
%%]

%%[1 ag import ({Expr/AbsSynAG}, {ARule/AbsSynAG})
%%]

%%[1 ag
WRAPPER  AGARuleItf
%%]

%%[1 hs

arlElimWild :: ARule -> ARule
arlElimWild rl
  = replEw_Syn_AGARuleItf r2
  where r1 = sem_AGARuleItf (AGARuleItf_AGItf rl)
        r2 = wrap_AGARuleItf r1
                (Inh_AGARuleItf)
%%]

-------------------------------------------------------------------------
-- Replica
-------------------------------------------------------------------------

%%[1 ag
ATTR AllARule AllExpr [ | | replEw: SELF ]
ATTR AGARuleItf [ | | replEw: ARule ]
ATTR AEqns AEqn [ | | replEwEqns USE {++} {[]}: {[AEqn]} ]

SEM AEqn
  | Eqn             lhs     .   replEwEqns  =   case @dest.replEw of
                                                  AEqnDest_One ANm_Wild -> []
                                                  _                     -> [@replEw]
  | * - Eqn         lhs     .   replEwEqns  =   [@replEw]

SEM ARule
  | Rule            lhs     .   replEw      =   ARule_Rule @ndNmL @rlNm @info @eqns.replEwEqns

%%]