Skip to content

Commit

Permalink
Merge pull request haskell#142 from haskell/issue-127
Browse files Browse the repository at this point in the history
Issue 127
  • Loading branch information
phadej authored Nov 19, 2021
2 parents fb9aa04 + a07385a commit 5d679ab
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 2 deletions.
1 change: 1 addition & 0 deletions ChangeLog.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

- Add `INLINABLE` pragmas to most overloaded combinators
- Support recent versions of dependencies
- Fix memory leak in `>>=` https://github.com/haskell/parsec/issues/127

### 3.1.14.0

Expand Down
7 changes: 7 additions & 0 deletions parsec.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -128,3 +128,10 @@ test-suite parsec.
ghc-options: -Wcompat -Wnoncanonical-monad-instances -Wnoncanonical-monadfail-instances
else
build-depends: semigroups

test-suite parsec-issue127
default-language: Haskell2010
type: exitcode-stdio-1.0
main-is: issue127.hs
hs-source-dirs: test
build-depends: base, parsec
8 changes: 6 additions & 2 deletions src/Text/Parsec/Prim.hs
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,9 @@ parserBind m k
= ParsecT $ \s cok cerr eok eerr ->
let
-- consumed-okay case for m
mcok x s err =
mcok x s err
| errorIsUnknown err = unParser (k x) s cok cerr cok cerr
| otherwise =
let
-- if (k x) consumes, those go straigt up
pcok = cok
Expand All @@ -335,7 +337,9 @@ parserBind m k
in unParser (k x) s pcok pcerr peok peerr

-- empty-ok case for m
meok x s err =
meok x s err
| errorIsUnknown err = unParser (k x) s cok cerr eok eerr
| otherwise =
let
-- in these cases, (k x) can return as empty
pcok = cok
Expand Down
13 changes: 13 additions & 0 deletions test/issue127.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
module Main (main) where

import Text.Parsec
import System.Environment (getArgs)
import Control.Monad (replicateM_)

main :: IO ()
main = do
n <- getArgs >>= \args -> return $ case args of
arg : _ -> read arg
_ -> 1000000

print $ runParser (replicateM_ n $ return ()) () "test" ""

0 comments on commit 5d679ab

Please # to comment.