summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksandar Prokopec <axel22@gmail.com>2012-05-04 17:50:39 +0200
committerAleksandar Prokopec <axel22@gmail.com>2012-05-04 18:51:34 +0200
commit37c157c91f9240b562faa437dbda18bcb435e0ee (patch)
tree0066203b1d8ba729d5de27eb324ea4a922148cee /src
parentf146d5826fc335ee1ca9c285d69086a7475cb71e (diff)
downloadscala-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.scala6
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)
}