Changeset 15745

Show
Ignore:
Timestamp:
03/17/07 11:10:25 (20 months ago)
Author:
audreyt
Message:

* Chase the TraitBlocks? change.

Location:
src/Pugs
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/AST.hs

    r15737 r15745  
    392392            xs  -> die ("Cannot coerce to " ++ name) xs 
    393393    , 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 
    405395    } 
    406396    where 
  • src/Pugs/Compile/Pugs.hs

    r15710 r15745  
    181181    compile MkCode{ subBody = Prim _ } = return Str.empty 
    182182    -- XXX - Ew. This signature can't be right. 
    183     compile (MkCode v1 v2 v3 _ v4 v5 v6 v7 v8 v9 v10 _ _ _ _ _ _ _ _ _ _ _ _) = do  
     183    compile (MkCode v1 v2 v3 _ v4 v5 v6 v7 v8 v9 v10 _ _) = do 
    184184        compWith "MkCode" 
    185185            [ compile v1 
  • src/Pugs/Eval.hs

    r15737 r15745  
    15281528    f' v' 
    15291529 
    1530 afterLeave :: VCode -> (VCode -> [VCode]) -> VCode 
     1530afterLeave :: VCode -> (TraitBlocks -> [VCode]) -> VCode 
    15311531afterLeave code@MkCode{ subBody = Syn "block" [Val (VCode code')] } f = 
    15321532    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]) -> VCode 
     1533afterLeave code@MkCode{ subTraitBlocks = blocks } f = code{ subTraitBlocks = blocks{ subLeaveBlocks = subLeaveBlocks blocks ++ f blocks } } 
     1534 
     1535beforeLeave :: VCode -> (TraitBlocks -> [VCode]) -> VCode 
    15361536beforeLeave code@MkCode{ subBody = Syn "block" [Val (VCode code')] } f = 
    15371537    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]) -> VCode 
     1538beforeLeave code@MkCode{ subTraitBlocks = blocks } f = code{ subTraitBlocks = blocks{ subLeaveBlocks = f blocks ++ subLeaveBlocks blocks } } 
     1539 
     1540beforeEnter :: VCode -> (TraitBlocks -> [VCode]) -> VCode 
    15411541beforeEnter code@MkCode{ subBody = Syn "block" [Val (VCode code')] } f = 
    15421542    code{ subBody = Syn "block" [Val (VCode (beforeEnter code' f))] } 
    1543 beforeEnter code f = code{ subEnterBlocks = f code ++ subEnterBlocks code } 
     1543beforeEnter code@MkCode{ subTraitBlocks = blocks } f = code{ subTraitBlocks = blocks{ subEnterBlocks = f blocks ++ subEnterBlocks blocks } } 
    15441544 
    15451545fromCodeExp :: Exp -> Eval VCode 
  • src/Pugs/Monads.hs

    r15737 r15745  
    257257        runBlocks subEnterBlocks 
    258258        action 
    259     runBlocks f = mapM_ (evalExp . Syn "block" . (:[]) . Syn "sub" . (:[]) . Val . castV) (f sub) 
    260     assertBlocks f name = forM_ (f sub) $ \cv -> do 
     259    runBlocks f = mapM_ (evalExp . Syn "block" . (:[]) . Syn "sub" . (:[]) . Val . castV) (f (subTraitBlocks sub)) 
     260    assertBlocks f name = forM_ (f (subTraitBlocks sub)) $ \cv -> do 
    261261        rv <- fromVal =<< (evalExp . Syn "block" . (:[]) . Syn "sub" . (:[]) . Val . castV $ cv) 
    262262        if rv then return () else die (name ++ " assertion failed") (subName sub) 
  • src/Pugs/Parser.hs

    r15737 r15745  
    12801280    (withTraitBlocks:prevLevel) <- gets s_closureTraits 
    12811281    modify $ \state -> state{ s_closureTraits = if null prevLevel then [id] else prevLevel } 
    1282     return $ withTraitBlocks sub 
     1282    return $ sub{ subTraitBlocks = withTraitBlocks (subTraitBlocks sub) } 
    12831283 
    12841284 
  • src/Pugs/Parser/Types.hs

    r15737 r15745  
    138138    , s_outerVars     :: Set Var        -- ^ OUTER symbols we remembers 
    139139                                        
    140     , s_closureTraits :: [VCode -> VCode] 
     140    , s_closureTraits :: [TraitBlocks -> TraitBlocks] 
    141141                                       -- ^ Closure traits: head is this block, tail is all outer blocks 
    142142    }