Changeset 15611 for src/Pugs/AST.hs
- Timestamp:
- 03/12/07 00:07:31 (21 months ago)
- Files:
-
- 1 modified
-
src/Pugs/AST.hs (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/AST.hs
r15593 r15611 14 14 module Pugs.AST ( 15 15 evalExp, readCodesFromRef, 16 genMultiSym, genSym, genSymScoped, 16 genMultiSym, genSym, genSymScoped, genPadEntryScoped, mkPadMutator, 17 17 strRangeInf, strRange, strInc, 18 18 mergeStmts, isEmptyParams, … … 150 150 isStaticScope _ = False 151 151 152 -- XXX - SConstant support 153 genSymScoped :: MonadSTM m => Scope -> Var -> VRef -> m PadMutator 154 genSymScoped scope var ref 152 genPadEntryScoped :: MonadSTM m => Scope -> VRef -> m PadEntry 153 genPadEntryScoped scope ref 155 154 | SConstant <- scope = do 156 return ( makeEntry $EntryConstant typ ref)155 return (EntryConstant typ ref) 157 156 | isStaticScope scope = do 158 157 tvar <- liftSTM $ newTVar ref 159 return ( makeEntry $EntryStatic typ ref tvar)158 return (EntryStatic typ ref tvar) 160 159 | otherwise = do 161 160 tvar <- liftSTM $ newTVar ref 162 161 fresh <- liftSTM $ newTVar True 163 return ( makeEntry $EntryLexical typ ref tvar fresh)162 return (EntryLexical typ ref tvar fresh) 164 163 where 165 164 typ = refType ref 166 makeEntry entry 167 | SCodeMulti <- v_sigil var = \(MkPad map) -> MkPad (Map.insertWith (mergePadEntry var) var entry map) 168 | otherwise = \(MkPad map) -> MkPad (Map.insert var entry map) 165 166 genSymScoped :: MonadSTM m => Scope -> Var -> VRef -> m PadMutator 167 genSymScoped scope var ref = do 168 entry <- genPadEntryScoped scope ref 169 return (mkPadMutator var entry) 170 171 mkPadMutator :: Var -> PadEntry -> PadMutator 172 mkPadMutator var entry 173 | SCodeMulti <- v_sigil var = \(MkPad map) -> MkPad (Map.insertWith (mergePadEntry var) var entry map) 174 | otherwise = \(MkPad map) -> MkPad (Map.insert var entry map) 169 175 170 176 {-|
