diff options
author | Aleksandar Prokopec <axel22@gmail.com> | 2012-05-04 17:50:39 +0200 |
---|---|---|
committer | Aleksandar Prokopec <axel22@gmail.com> | 2012-05-04 18:51:34 +0200 |
commit | 37c157c91f9240b562faa437dbda18bcb435e0ee (patch) | |
tree | 0066203b1d8ba729d5de27eb324ea4a922148cee /src | |
parent | f146d5826fc335ee1ca9c285d69086a7475cb71e (diff) | |
download | scala-37c157c91f9240b562faa437dbda18bcb435e0ee.tar.gz scala-37c157c91f9240b562faa437dbda18bcb435e0ee.tar.bz2 scala-37c157c91f9240b562faa437dbda18bcb435e0ee.zip |
Fixes SI-5514.
The acceptIf and acceptMatch parsers now check for end of input.
Review by moors.
Diffstat (limited to 'src')
-rw-r--r-- | src/library/scala/util/parsing/combinator/Parsers.scala | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/library/scala/util/parsing/combinator/Parsers.scala b/src/library/scala/util/parsing/combinator/Parsers.scala index e5458f89af..17e032e7ab 100644 --- a/src/library/scala/util/parsing/combinator/Parsers.scala +++ b/src/library/scala/util/parsing/combinator/Parsers.scala @@ -596,7 +596,8 @@ trait Parsers { * @return A parser for elements satisfying p(e). */ def acceptIf(p: Elem => Boolean)(err: Elem => String): Parser[Elem] = Parser { in => - if (p(in.first)) Success(in.first, in.rest) + if (in.atEnd) Failure("end of input", in) + else if (p(in.first)) Success(in.first, in.rest) else Failure(err(in.first), in) } @@ -614,7 +615,8 @@ trait Parsers { * applying `f` to it to produce the result. */ def acceptMatch[U](expected: String, f: PartialFunction[Elem, U]): Parser[U] = Parser{ in => - if (f.isDefinedAt(in.first)) Success(f(in.first), in.rest) + if (in.atEnd) Failure("end of input", in) + else if (f.isDefinedAt(in.first)) Success(f(in.first), in.rest) else Failure(expected+" expected", in) } |