Changeset 16488
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/AST.hs
r16415 r16488 19 19 newPackage, newType, newMetaType, typeMacro, isScalarLValue, 20 20 filterPrim, filterUserDefinedPad, typeOfParam, listVal, isImmediateMatchContext, 21 (./), defaultScalarPad, 21 (./), defaultScalarPad, envPosStack, 22 22 23 23 module Pugs.AST.Internals, … … 506 506 defaultScalarPad = mkPad [(varTopic, PELexical anyType defaultScalarRef mempty defaultScalarPadStore)] 507 507 508 envPosStack :: Env -> [Pos] 509 envPosStack env = envPos env : maybe [] envPosStack (envCaller env) 510 -
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))
