Changeset 15745
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/AST.hs
r15737 r15745 392 392 xs -> die ("Cannot coerce to " ++ name) xs 393 393 , subCont = Nothing 394 , subPreBlocks = [] 395 , subPostBlocks = [] 396 , subFirstBlocks = [] 397 , subLastBlocks = [] 398 , subNextBlocks = [] 399 , subKeepBlocks = [] 400 , subUndoBlocks = [] 401 , subEnterBlocks = [] 402 , subLeaveBlocks = [] 403 , subControlBlocks = [] 404 , subCatchBlocks = [] 394 , subTraitBlocks = emptyTraitBlocks 405 395 } 406 396 where -
src/Pugs/Compile/Pugs.hs
r15710 r15745 181 181 compile MkCode{ subBody = Prim _ } = return Str.empty 182 182 -- XXX - Ew. This signature can't be right. 183 compile (MkCode v1 v2 v3 _ v4 v5 v6 v7 v8 v9 v10 _ _ _ _ _ _ _ _ _ _ _ _) = do183 compile (MkCode v1 v2 v3 _ v4 v5 v6 v7 v8 v9 v10 _ _) = do 184 184 compWith "MkCode" 185 185 [ compile v1 -
src/Pugs/Eval.hs
r15737 r15745 1528 1528 f' v' 1529 1529 1530 afterLeave :: VCode -> ( VCode-> [VCode]) -> VCode1530 afterLeave :: VCode -> (TraitBlocks -> [VCode]) -> VCode 1531 1531 afterLeave code@MkCode{ subBody = Syn "block" [Val (VCode code')] } f = 1532 1532 code{ subBody = Syn "block" [Val (VCode (afterLeave code' f))] } 1533 afterLeave code f = code{ subLeaveBlocks = subLeaveBlocks code ++ f code}1534 1535 beforeLeave :: VCode -> ( VCode-> [VCode]) -> VCode1533 afterLeave code@MkCode{ subTraitBlocks = blocks } f = code{ subTraitBlocks = blocks{ subLeaveBlocks = subLeaveBlocks blocks ++ f blocks } } 1534 1535 beforeLeave :: VCode -> (TraitBlocks -> [VCode]) -> VCode 1536 1536 beforeLeave code@MkCode{ subBody = Syn "block" [Val (VCode code')] } f = 1537 1537 code{ subBody = Syn "block" [Val (VCode (afterLeave code' f))] } 1538 beforeLeave code f = code{ subLeaveBlocks = f code ++ subLeaveBlocks code}1539 1540 beforeEnter :: VCode -> ( VCode-> [VCode]) -> VCode1538 beforeLeave code@MkCode{ subTraitBlocks = blocks } f = code{ subTraitBlocks = blocks{ subLeaveBlocks = f blocks ++ subLeaveBlocks blocks } } 1539 1540 beforeEnter :: VCode -> (TraitBlocks -> [VCode]) -> VCode 1541 1541 beforeEnter code@MkCode{ subBody = Syn "block" [Val (VCode code')] } f = 1542 1542 code{ subBody = Syn "block" [Val (VCode (beforeEnter code' f))] } 1543 beforeEnter code f = code{ subEnterBlocks = f code ++ subEnterBlocks code}1543 beforeEnter code@MkCode{ subTraitBlocks = blocks } f = code{ subTraitBlocks = blocks{ subEnterBlocks = f blocks ++ subEnterBlocks blocks } } 1544 1544 1545 1545 fromCodeExp :: Exp -> Eval VCode -
src/Pugs/Monads.hs
r15737 r15745 257 257 runBlocks subEnterBlocks 258 258 action 259 runBlocks f = mapM_ (evalExp . Syn "block" . (:[]) . Syn "sub" . (:[]) . Val . castV) (f sub)260 assertBlocks f name = forM_ (f sub) $ \cv -> do259 runBlocks f = mapM_ (evalExp . Syn "block" . (:[]) . Syn "sub" . (:[]) . Val . castV) (f (subTraitBlocks sub)) 260 assertBlocks f name = forM_ (f (subTraitBlocks sub)) $ \cv -> do 261 261 rv <- fromVal =<< (evalExp . Syn "block" . (:[]) . Syn "sub" . (:[]) . Val . castV $ cv) 262 262 if rv then return () else die (name ++ " assertion failed") (subName sub) -
src/Pugs/Parser.hs
r15737 r15745 1280 1280 (withTraitBlocks:prevLevel) <- gets s_closureTraits 1281 1281 modify $ \state -> state{ s_closureTraits = if null prevLevel then [id] else prevLevel } 1282 return $ withTraitBlocks sub1282 return $ sub{ subTraitBlocks = withTraitBlocks (subTraitBlocks sub) } 1283 1283 1284 1284 -
src/Pugs/Parser/Types.hs
r15737 r15745 138 138 , s_outerVars :: Set Var -- ^ OUTER symbols we remembers 139 139 140 , s_closureTraits :: [ VCode -> VCode]140 , s_closureTraits :: [TraitBlocks -> TraitBlocks] 141 141 -- ^ Closure traits: head is this block, tail is all outer blocks 142 142 }
