summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-07-01 18:29:09 +0000
committerPaul Phillips <paulp@improving.org>2010-07-01 18:29:09 +0000
commit49344ed1da7c03476de8958e8c7aa224493f4adb (patch)
tree8d6b85f974030acd7f6be36f86c84897b9a64923
parent6a949bb61ce6c3f96c96417f01343e68062bc43a (diff)
downloadscala-49344ed1da7c03476de8958e8c7aa224493f4adb.tar.gz
scala-49344ed1da7c03476de8958e8c7aa224493f4adb.tar.bz2
scala-49344ed1da7c03476de8958e8c7aa224493f4adb.zip
Warded off a parser crash on certain invalid pr...
Warded off a parser crash on certain invalid programs. Closes #3209, no review.
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/Parsers.scala8
-rw-r--r--test/files/neg/bug3209.check4
-rw-r--r--test/files/neg/bug3209.scala2
3 files changed, 10 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
index d42803cf8a..f72e45bd99 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
@@ -2734,10 +2734,10 @@ self =>
topstats() match {
case List(stat @ PackageDef(_, _)) => stat
case stats =>
- val start = stats match {
- case Nil => 0
- case _ => wrappingPos(stats).startOrPoint
- }
+ val start =
+ if (stats forall (_ == EmptyTree)) 0
+ else wrappingPos(stats).startOrPoint
+
makePackaging(start, atPos(start, start, start) { Ident(nme.EMPTY_PACKAGE_NAME) }, stats)
}
}
diff --git a/test/files/neg/bug3209.check b/test/files/neg/bug3209.check
new file mode 100644
index 0000000000..fa50f4ce1d
--- /dev/null
+++ b/test/files/neg/bug3209.check
@@ -0,0 +1,4 @@
+bug3209.scala:2: error: expected start of definition
+package test
+^
+one error found
diff --git a/test/files/neg/bug3209.scala b/test/files/neg/bug3209.scala
new file mode 100644
index 0000000000..d893726659
--- /dev/null
+++ b/test/files/neg/bug3209.scala
@@ -0,0 +1,2 @@
+@javax.annotation.Generated(Array("test"))
+package test \ No newline at end of file