brought in node-folding function from master branch
authorNorman Ramsey <nr@cs.tufts.edu>
Fri, 23 Apr 2010 19:46:32 +0000 (15:46 -0400)
committerNorman Ramsey <nr@cs.tufts.edu>
Fri, 23 Apr 2010 19:46:32 +0000 (15:46 -0400)
accounted for changes in block representation.

src/Compiler/Hoopl/XUtil.hs

index 7b74833..06a82c6 100644 (file)
@@ -43,15 +43,20 @@ foldNodes f = graph
           block :: forall e x . Block n e x -> a -> a
           lift  :: forall thing ex . (thing -> a -> a) -> (MaybeO ex thing -> a -> a)
 
-          graph GNil             = id
-          graph (GUnit b)        = block b
-          graph (GMany e b x)    = lift block e . body b . lift block x
-          block (BUnit node)     = f node
-          block (b1 `BCat` b2)   = block b1 . block b2
-          body (BodyEmpty)       = id
-          body (BodyUnit b)      = block b
-          body (b1 `BodyCat` b2) = body b1 . body b2
-          lift _ NothingO        = id
-          lift f (JustO thing)   = f thing
+          graph GNil              = id
+          graph (GUnit b)         = block b
+          graph (GMany e b x)     = lift block e . body b . lift block x
+          block (BFirst  node)    = f node
+          block (BMiddle node)    = f node
+          block (BLast   node)    = f node
+          block (b1 `BCat`    b2) = block b1 . block b2
+          block (b1 `BClosed` b2) = block b1 . block b2
+          block (b1 `BHead` n)    = block b1 . f n
+          block (n `BTail` b2)    = f n . block b2
+          body (BodyEmpty)        = id
+          body (BodyUnit b)       = block b
+          body (b1 `BodyCat` b2)  = body b1 . body b2
+          lift _ NothingO         = id
+          lift f (JustO thing)    = f thing