From 628eaa5aca0117823327571a1384f0d717fd7b4e Mon Sep 17 00:00:00 2001 From: Aleksandar Prokopec Date: Fri, 4 May 2012 10:46:29 +0200 Subject: Fix for si-5018. Methods keySet, values and withDefault now return serializable collections. --- test/pending/run/t5018.scala | 34 ---------------------------------- 1 file changed, 34 deletions(-) delete mode 100644 test/pending/run/t5018.scala (limited to 'test/pending/run') diff --git a/test/pending/run/t5018.scala b/test/pending/run/t5018.scala deleted file mode 100644 index 30c0d5ac94..0000000000 --- a/test/pending/run/t5018.scala +++ /dev/null @@ -1,34 +0,0 @@ - - - -import java.io._ -import collection._ - - - -object Test { - - def serializeDeserialize[T <: AnyRef](obj: T) = { - val buffer = new ByteArrayOutputStream - val out = new ObjectOutputStream(buffer) - out.writeObject(obj) - val in = new ObjectInputStream(new ByteArrayInputStream(buffer.toByteArray)) - in.readObject.asInstanceOf[T] - } - - def main(args: Array[String]) { - val values = mutable.Map(1 -> 1).values - assert(serializeDeserialize(values) == values) - - val keyset = mutable.Map(1 -> 1).keySet - assert(serializeDeserialize(keyset) == keyset) - - val imkeyset = immutable.Map(1 -> 1).keySet - assert(serializeDeserialize(imkeyset) == imkeyset) - - val defaultmap = immutable.Map(1 -> 1).withDefaultValue(1) - assert(serializeDeserialize(defaultmap) == defaultmap) - } - -} - -- cgit v1.2.3 From 37c157c91f9240b562faa437dbda18bcb435e0ee Mon Sep 17 00:00:00 2001 From: Aleksandar Prokopec Date: Fri, 4 May 2012 17:50:39 +0200 Subject: Fixes SI-5514. The acceptIf and acceptMatch parsers now check for end of input. Review by moors. --- .../scala/util/parsing/combinator/Parsers.scala | 6 ++-- test/files/run/t5514.check | 19 ++++++++++++ test/files/run/t5514.scala | 35 ++++++++++++++++++++++ test/pending/run/t5514.scala | 35 ---------------------- 4 files changed, 58 insertions(+), 37 deletions(-) create mode 100644 test/files/run/t5514.check create mode 100644 test/files/run/t5514.scala delete mode 100644 test/pending/run/t5514.scala (limited to 'test/pending/run') 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) } diff --git a/test/files/run/t5514.check b/test/files/run/t5514.check new file mode 100644 index 0000000000..c68f7c9029 --- /dev/null +++ b/test/files/run/t5514.check @@ -0,0 +1,19 @@ +constructed reader: 10 +constructed reader: 9 +constructed reader: 8 +constructed reader: 7 +constructed reader: 6 +constructed reader: 5 +constructed reader: 4 +constructed reader: 3 +constructed reader: 2 +constructed reader: 1 +constructed reader: 0 +[0.0] parsed: List(s10, s9, s8, s7, s6, s5, s4, s3, s2, s1) +constructed reader: 10 +constructed reader: 9 +constructed reader: 8 +constructed reader: 7 +constructed reader: 6 +constructed reader: 5 +[0.0] parsed: List(s10, s9, s8, s7, s6) \ No newline at end of file diff --git a/test/files/run/t5514.scala b/test/files/run/t5514.scala new file mode 100644 index 0000000000..efd5ba6cb9 --- /dev/null +++ b/test/files/run/t5514.scala @@ -0,0 +1,35 @@ + + + +import scala.io.Source +import scala.util.parsing.combinator.Parsers +import scala.util.parsing.input.Reader +import scala.util.parsing.input.Position + + + +class DemoReader(n: Int) extends Reader[String] { + def atEnd = n == 0 + def first = if (n >= 0) "s" + n else throw new IllegalArgumentException("No more input.") + def rest = new DemoReader(n - 1) + def pos = new Position { + def line = 0 + def column = 0 + def lineContents = first + } + println("constructed reader: " + n) +} + + +object Test extends App with Parsers { + type Elem = String + def startsWith(prefix: String) = acceptIf(_ startsWith prefix)("Error: " + _) + + val resrep = startsWith("s").*(new DemoReader(10)) + Console println resrep + + val resrep5 = repN(5, startsWith("s"))(new DemoReader(10)) + Console println resrep5 +} + + diff --git a/test/pending/run/t5514.scala b/test/pending/run/t5514.scala deleted file mode 100644 index eacad21cd8..0000000000 --- a/test/pending/run/t5514.scala +++ /dev/null @@ -1,35 +0,0 @@ - - - -import scala.io.Source -import scala.util.parsing.combinator.Parsers -import scala.util.parsing.input.Reader -import scala.util.parsing.input.Position - - - -object DemoApp extends App { - val parsers = new DemoParsers - val reader = new DemoReader(10) - val result = parsers.startsWith("s").*(reader) - Console println result -} - - -class DemoReader(n: Int) extends Reader[String] { - def atEnd = n == 0 - def first = "s" + n - def rest = new DemoReader(n - 1) - def pos = new Position { - def line = 0 - def column = 0 - def lineContents = first - } - println("reader: " + n) -} - - -class DemoParsers extends Parsers { - type Elem = String - def startsWith(prefix: String) = acceptIf(_ startsWith prefix)("Error: " + _) -} -- cgit v1.2.3