Changeset 16487 for src/Pugs/Prim.hs

Show
Ignore:
Timestamp:
05/21/07 21:40:31 (18 months ago)
Author:
audreyt
Message:

* Per dduncan++'s request, make "die" and "warn" output stack trace.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Prim.hs

    r16379 r16487  
    379379    return $ VBool True 
    380380op1 "die" = \v -> do 
    381     pos <- asks envPos 
    382381    v'  <- fromVal $! v 
    383     retShift $! VError (errmsg $! v') [pos] 
     382    env <- ask 
     383    retShift $! VError (errmsg $! v') (collectPos (Just env)) 
    384384    where 
    385385    errmsg VUndef      = VStr "Died" 
     
    389389    errmsg (VList [x]) = x 
    390390    errmsg x           = x 
     391    collectPos Nothing    = [] 
     392    collectPos (Just env) = (envPos env:collectPos (envCaller env)) 
    391393op1 "warn" = \v -> do 
    392394    strs <- fromVal v 
    393395    errh <- readVar $ cast "$*ERR" 
    394     pos  <- asks envPos 
    395     op2 "IO::say" errh $ VList [ VStr $ pretty (VError (errmsg strs) [pos]) ] 
     396    env  <- ask 
     397    op2 "IO::say" errh $ VList [ VStr $ pretty (VError (errmsg strs) (collectPos (Just env))) ] 
    396398    where 
    397399    errmsg "" = VStr "Warning: something's wrong" 
    398400    errmsg x  = VStr x 
     401    collectPos Nothing    = [] 
     402    collectPos (Just env) = (envPos env:collectPos (envCaller env)) 
    399403op1 "fail" = op1 "fail_" -- XXX - to be replaced by Prelude later 
    400404op1 "fail_" = \v -> do