Skip to content

Commit d91ed85

Browse files
author
Amal Elshihaby
committed
Fix bug in repeatedly parsing scala#34
1 parent 45ed52f commit d91ed85

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

src/main/scala/scala/util/parsing/combinator/Parsers.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -436,9 +436,9 @@ trait Parsers {
436436

437437
/** Returns a parser that repeatedly parses what this parser parses.
438438
*
439-
* @return rep(this)
439+
* @return rep1(this)
440440
*/
441-
def * = rep(this)
441+
def * = rep1(this)
442442

443443
/** Returns a parser that repeatedly parses what this parser parses,
444444
* interleaved with the `sep` parser. The `sep` parser specifies how
@@ -884,7 +884,7 @@ trait Parsers {
884884
if (in1.atEnd)
885885
s
886886
else
887-
lastNoSuccessVar.value filterNot { _.next.pos < in1.pos } getOrElse Failure("end of input expected", in1)
887+
lastNoSuccessVar.value filterNot { _.next.pos < in1.pos } getOrElse Failure("end of input expected", in1)
888888
case ns => lastNoSuccessVar.value.getOrElse(ns)
889889
}
890890
}

src/test/scala/scala/util/parsing/combinator/JavaTokenParsersTest.scala

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,28 @@ class JavaTokenParsersTest {
5555
parseFailure("with space", 6)
5656
}
5757

58+
@Test
59+
def repeatedlyParsesTest: Unit = {
60+
object TestTokenParser extends JavaTokenParsers
61+
import TestTokenParser._
62+
val p = ident ~ "(?i)AND".r.*
63+
64+
val parseResult = parseAll(p, "start start")
65+
parseResult match {
66+
case e @ Failure(message, next) =>
67+
assertEquals(next.pos.column, 7)
68+
assert(message.endsWith("string matching regex `(?i)AND' expected but `s' found"))
69+
case _ => sys.error(parseResult.toString)
70+
}
71+
72+
val parseResult2 = parseAll(p, "start AND AND")
73+
parseResult2 match {
74+
case Success(r, _) =>
75+
assertEquals("start", r._1)
76+
assertEquals("AND AND", r._2.mkString(" "))
77+
case _ => sys.error(parseResult.toString)
78+
}
79+
}
80+
81+
5882
}

0 commit comments

Comments
 (0)