Changeset 15448 for src/Pugs/Eval.hs

Show
Ignore:
Timestamp:
03/05/07 08:45:23 (21 months ago)
Author:
audreyt
Message:

* Pugs.Eval, Pugs.hs: In the interactive shell, statements are

now executed in item context instead of void context, to catch
some of the surprising return values.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Eval.hs

    r15425 r15448  
    308308 
    309309-- XXX - Hack to get context propagating to "return" 
    310 reduceStmts this@(App (Var var) _ _) _ | var == cast "&return" = reduce this 
    311 reduceStmts this@(Ann _ (App (Var var) _ _)) _ | var == cast "&return" = reduce this 
     310reduceStmts this@(App (Var var) _ _) _ | var == varReturn = reduce this 
     311reduceStmts this@(Ann _ (App (Var var) _ _)) _ | var == varReturn = reduce this 
     312 
     313reduceStmts this (Syn "continuation" []) = do 
     314    val <- reduce this 
     315    trapVal val . callCC $ \cc -> do 
     316        env <- ask 
     317        return . VControl $ ControlContinuation env val cc 
    312318 
    313319reduceStmts this rest = do 
    314320    let withCxt = case this of 
    315             App (Var var) _ _         | var == cast "&yield" -> id 
    316             Ann _ (App (Var var) _ _) | var == cast "&yield" -> id 
     321            App (Var var) _ _         | var == varYield -> id 
     322            Ann _ (App (Var var) _ _) | var == varYield -> id 
    317323            _  -> enterContext cxtVoid 
    318324    val <- withCxt (reduce this) 
    319     trapVal val $ case rest of 
    320         Syn "continuation" []   -> callCC $ \cc -> do 
    321             env <- ask 
    322             return . VControl $ ControlContinuation env val cc 
    323         _                       -> reduce rest 
     325    trapVal val (reduce rest) 
    324326 
    325327reducePrag :: [Pragma] -> Exp -> Eval Val 
     
    327329    local (\e -> e{ envPragmas = prag }) $ do 
    328330        evalExp exp 
     331 
     332varYield :: Var 
     333varYield = cast "&yield" 
     334 
     335varReturn :: Var 
     336varReturn = cast "&return" 
    329337 
    330338{-|