Changeset 15611 for src/Pugs/AST.hs

Show
Ignore:
Timestamp:
03/12/07 00:07:31 (21 months ago)
Author:
audreyt
Message:

* "our $x" now reuses pad entry for package and lexical vars:

module Main;
our $x;
$x := 123; # also rebinds $Main::x

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/AST.hs

    r15593 r15611  
    1414module Pugs.AST ( 
    1515    evalExp, readCodesFromRef, 
    16     genMultiSym, genSym, genSymScoped, 
     16    genMultiSym, genSym, genSymScoped, genPadEntryScoped, mkPadMutator, 
    1717    strRangeInf, strRange, strInc, 
    1818    mergeStmts, isEmptyParams, 
     
    150150isStaticScope _       = False 
    151151 
    152 -- XXX - SConstant support 
    153 genSymScoped :: MonadSTM m => Scope -> Var -> VRef -> m PadMutator 
    154 genSymScoped scope var ref 
     152genPadEntryScoped :: MonadSTM m => Scope -> VRef -> m PadEntry 
     153genPadEntryScoped scope ref 
    155154    | SConstant <- scope = do 
    156         return (makeEntry $ EntryConstant typ ref) 
     155        return (EntryConstant typ ref) 
    157156    | isStaticScope scope = do 
    158157        tvar    <- liftSTM $ newTVar ref 
    159         return (makeEntry $ EntryStatic typ ref tvar) 
     158        return (EntryStatic typ ref tvar) 
    160159    | otherwise = do 
    161160        tvar    <- liftSTM $ newTVar ref 
    162161        fresh   <- liftSTM $ newTVar True 
    163         return (makeEntry $ EntryLexical typ ref tvar fresh) 
     162        return (EntryLexical typ ref tvar fresh) 
    164163    where 
    165164    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 
     166genSymScoped :: MonadSTM m => Scope -> Var -> VRef -> m PadMutator 
     167genSymScoped scope var ref = do 
     168    entry <- genPadEntryScoped scope ref 
     169    return (mkPadMutator var entry) 
     170 
     171mkPadMutator :: Var -> PadEntry -> PadMutator 
     172mkPadMutator 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) 
    169175 
    170176{-|