Changeset 8820 for src/Pugs.hs

Show
Ignore:
Timestamp:
01/28/06 02:09:07 (3 years ago)
Author:
audreyt
Message:

* First cut a irb-style line continuation in the interactive

Pugs shell, by waiting for more lines whenever we encounter a
parsefail. Suggested by jvoorhis.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs.hs

    r8491 r8820  
    313313doRunSingle menv opts prog = (`catch` handler) $ do 
    314314    exp     <- makeProper =<< parse 
     315    if exp == Noop then return () else do 
    315316    env     <- theEnv 
    316317    rv      <- runImperatively env (evaluate exp) 
     
    344345        else print 
    345346    makeProper exp = case exp of 
    346         Val err@(VError _ _) -> fail $ pretty err 
     347        Val err@(VError (VStr msg) _) 
     348            | runOptShowPretty opts -> do 
     349--          , "\nunexpected end of input" `isPrefixOf` msg -> do 
     350            cont <- readline "....> " 
     351            case cont of 
     352                Just line   -> do 
     353                    doRunSingle menv opts (prog ++ ('\n':line)) 
     354                    return Noop 
     355                _           -> fail $ pretty err 
     356        Val err@VError{} -> fail $ pretty err 
    347357        _ | runOptSeparately opts -> return exp 
    348358        _ -> return $ makeDumpEnv exp 
     
    353363    makeDumpEnv (Sym x y exp)     = Sym x y   $ makeDumpEnv exp 
    354364    makeDumpEnv exp = Stmts exp (Syn "env" []) 
    355     handler err = if not (isUserError err) then ioError err else do 
     365    handler err | isUserError err = do 
    356366        putStrLn "Internal error while running expression:" 
    357367        putStrLn $ ioeGetErrorString err 
     368                | otherwise = ioError err 
    358369 
    359370runImperatively :: TVar Env -> Eval Val -> IO Val