packages feed

shuffle-0.1.1.0: src/UHC/Shuffle/AspectExprEval.ag

-------------------------------------------------------------------------
-- Evaluation of AspectExpr, given a set of AspectRef
-------------------------------------------------------------------------

MODULE {UHC.Shuffle.AspectExprEval} {aspexpIsAccepted}
{
import qualified Data.Set as Set
import qualified Data.Map as Map
import UHC.Shuffle.AspectExpr
}

INCLUDE "AspectExprAbsSyn.ag"

WRAPPER AGAspectExprItf

{
wrapAGAspectExpr_T :: AspectRefReqd -> T_AGAspectExprItf -> Syn_AGAspectExprItf
wrapAGAspectExpr_T givenRefs d
  = wrap_AGAspectExprItf d
      (Inh_AGAspectExprItf
         { givenRefs_Inh_AGAspectExprItf = givenRefs
         })

wrapAspectExpr :: AspectRefReqd -> AspectExpr -> Syn_AGAspectExprItf
wrapAspectExpr givenRefs d = wrapAGAspectExpr_T givenRefs (sem_AGAspectExprItf (AGAspectExprItf_AGItf d))

aspexpIsAccepted :: AspectRefReqd -> AspectExpr -> Bool
aspexpIsAccepted givenRefs d
  = (isAccepted_Syn_AGAspectExprItf r)
  where r = wrapAspectExpr givenRefs d
}

-------------------------------------------------------------------------
-- CRef subst in AspectExpr
-------------------------------------------------------------------------

ATTR AspectExpr AGAspectExprItf [ givenRefs: AspectRefReqd | | isAccepted: Bool ]

SEM AspectExpr
  | True        lhs         .   isAccepted  =   True
  | Requires    lhs         .   isAccepted  =   @asp `Set.member` @lhs.givenRefs
  | Or          lhs         .   isAccepted  =   @asp1.isAccepted || @asp2.isAccepted
  | And         lhs         .   isAccepted  =   @asp1.isAccepted && @asp2.isAccepted
  | Not         lhs         .   isAccepted  =   not @asp.isAccepted