| 76 | | ('O':'K':' ':sizeStr) -> do |
| 77 | | size <- readIO sizeStr |
| 78 | | rv <- sequence (replicate size (hGetChar out)) |
| 79 | | ln <- hGetLine out |
| 80 | | return $ rv ++ ln |
| 81 | | _ -> do |
| 82 | | errMsg <- hGetContents err |
| 83 | | rv <- waitForProcess pid |
| 84 | | writeIORef _ParrotInterp Nothing |
| 85 | | let msg | null errMsg = show rv |
| 86 | | | otherwise = errMsg |
| 87 | | fail $ "*** Running external 'parrot' failed:\n" ++ msg |
| | 76 | ('O':'K':' ':sizeStr) -> do |
| | 77 | size <- readIO sizeStr |
| | 78 | rv <- sequence (replicate size (hGetChar out)) |
| | 79 | ln <- hGetLine out |
| | 80 | return $ rv ++ ln |
| | 81 | _ -> do |
| | 82 | errMsg <- hGetContents err |
| | 83 | rv <- waitForProcess pid |
| | 84 | writeIORef _ParrotInterp Nothing |
| | 85 | let msg | null errMsg = show rv |
| | 86 | | otherwise = errMsg |
| | 87 | fail $ "*** Running external 'parrot' failed:\n" ++ msg |
| 98 | | Just interp@(_, _, _, pid) -> do |
| 99 | | gone <- getProcessExitCode pid |
| 100 | | if isNothing gone then return interp else do |
| 101 | | writeIORef _ParrotInterp Nothing |
| 102 | | initPGE path |
| 103 | | Nothing -> do |
| 104 | | cmd <- findParrot |
| 105 | | interp <- runInteractiveProcess cmd ["run_pge.pir"] (Just path) Nothing |
| 106 | | writeIORef _ParrotInterp (Just interp) |
| 107 | | return interp |
| | 98 | Just interp@(_, _, _, pid) -> do |
| | 99 | gone <- getProcessExitCode pid |
| | 100 | if isNothing gone then return interp else do |
| | 101 | writeIORef _ParrotInterp Nothing |
| | 102 | initPGE path |
| | 103 | Nothing -> do |
| | 104 | cmd <- findParrot |
| | 105 | interp <- runInteractiveProcess cmd ["run_pge.pir"] (Just path) Nothing |
| | 106 | writeIORef _ParrotInterp (Just interp) |
| | 107 | return interp |