Changeset 15448 for src/Pugs/Eval.hs
- Timestamp:
- 03/05/07 08:45:23 (21 months ago)
- Files:
-
- 1 modified
-
src/Pugs/Eval.hs (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Eval.hs
r15425 r15448 308 308 309 309 -- 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 310 reduceStmts this@(App (Var var) _ _) _ | var == varReturn = reduce this 311 reduceStmts this@(Ann _ (App (Var var) _ _)) _ | var == varReturn = reduce this 312 313 reduceStmts this (Syn "continuation" []) = do 314 val <- reduce this 315 trapVal val . callCC $ \cc -> do 316 env <- ask 317 return . VControl $ ControlContinuation env val cc 312 318 313 319 reduceStmts this rest = do 314 320 let withCxt = case this of 315 App (Var var) _ _ | var == cast "&yield"-> id316 Ann _ (App (Var var) _ _) | var == cast "&yield"-> id321 App (Var var) _ _ | var == varYield -> id 322 Ann _ (App (Var var) _ _) | var == varYield -> id 317 323 _ -> enterContext cxtVoid 318 324 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) 324 326 325 327 reducePrag :: [Pragma] -> Exp -> Eval Val … … 327 329 local (\e -> e{ envPragmas = prag }) $ do 328 330 evalExp exp 331 332 varYield :: Var 333 varYield = cast "&yield" 334 335 varReturn :: Var 336 varReturn = cast "&return" 329 337 330 338 {-|
