Changeset 16488 for src/Pugs/Prim.hs
- Timestamp:
- 05/21/07 21:51:00 (18 months ago)
- Files:
-
- 1 modified
-
src/Pugs/Prim.hs (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Prim.hs
r16487 r16488 379 379 return $ VBool True 380 380 op1 "die" = \v -> do 381 v' <- fromVal $! v382 env <- ask383 retShift $! VError (errmsg $! v') (collectPos (Just env))381 v' <- fromVal $! v 382 poss <- asks envPosStack 383 retShift $! VError (errmsg $! v') poss 384 384 where 385 385 errmsg VUndef = VStr "Died" … … 389 389 errmsg (VList [x]) = x 390 390 errmsg x = x 391 collectPos Nothing = []392 collectPos (Just env) = (envPos env:collectPos (envCaller env))393 391 op1 "warn" = \v -> do 394 392 strs <- fromVal v 395 393 errh <- readVar $ cast "$*ERR" 396 env <- ask397 op2 "IO::say" errh $ VList [ VStr $ pretty (VError (errmsg strs) (collectPos (Just env))) ]394 poss <- asks envPosStack 395 op2 "IO::say" errh $ VList [ VStr $ pretty (VError (errmsg strs) poss) ] 398 396 where 399 397 errmsg "" = VStr "Warning: something's wrong" 400 398 errmsg x = VStr x 401 collectPos Nothing = []402 collectPos (Just env) = (envPos env:collectPos (envCaller env))403 399 op1 "fail" = op1 "fail_" -- XXX - to be replaced by Prelude later 404 400 op1 "fail_" = \v -> do 405 401 throw <- fromVal =<< readVar (cast "$*FAIL_SHOULD_DIE") 406 402 if throw then op1 "die" (errmsg v) else do 407 pos <- asks envPos408 let die = retShift $ VError (errmsg v) [pos]403 poss <- asks envPosStack 404 let die = retShift $ VError (errmsg v) poss 409 405 dieThunk = VRef . thunkRef $ MkThunk die (mkType "Failure") 410 406 op1Return (retControl (ControlLeave (<= SubRoutine) 0 dieThunk))
