From: Nathaniel Wesley Filardo Date: Wed, 19 Jun 2013 03:18:12 +0000 (-0400) Subject: Whoops! Partition rules, then plan as appropriate X-Git-Url: https://hydra-www.ietfng.org/gitweb/?a=commitdiff_plain;h=6fb1b26c54cf667dfe3731ee43d1d303230996d8;p=dyna2 Whoops! Partition rules, then plan as appropriate --- diff --git a/src/Dyna/Main/Driver.hs b/src/Dyna/Main/Driver.hs index a80c9dd..605629a 100644 --- a/src/Dyna/Main/Driver.hs +++ b/src/Dyna/Main/Driver.hs @@ -350,28 +350,29 @@ processFile fileName = bracket openOut hClose go case dcfg_backend ?dcfg of Backend _ be_b be_c be_ddi be_d -> let + (bcrules,fcrules) = partitionEithers + $ map + (\r -> maybe (p r) + (\fa -> if fa `S.member` gbcs + then Left (fa,r) + else Right r) + $ findHeadFA (r_head r) (r_ucruxes r)) + frs + where + p r = (dynacPanic $ "Can't check rule" + <+> (prettySpanLoc (r_span r)) + <+> "for chaining direction") + initializers = map (\(f,mca) -> either (\e -> Left (f,e)) (\(c,a) -> Right (f,c,a)) mca) - $ map (\x -> (x, planInitializer be_b gbcs x)) frs + $ map (\x -> (x, planInitializer be_b gbcs x)) fcrules cInitializers = rights initializers - uPlans = map (\x -> (x, planEachEval be_b gbcs be_c x)) frs + uPlans = map (\x -> (x, planEachEval be_b gbcs be_c x)) fcrules cuPlans = combineUpdatePlans uPlans - bcrules = MA.mapMaybe (\r -> maybe (p r) - (\fa -> if fa `S.member` gbcs - then Just (fa,r) - else Nothing) - $ findHeadFA (r_head r) (r_ucruxes r)) - $ frs - where - p r = (dynacPanic $ "Can't check rule" - <+> (prettySpanLoc (r_span r)) - <+> "for backchaining: no head") - - qPlans = map (\(fa@(f,a),r) -> (fa,r, planBackchain be_b gbcs (f,mkqm a) r)) bcrules