summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@epfl.ch>2012-07-20 14:54:05 -0700
committerAdriaan Moors <adriaan.moors@epfl.ch>2012-07-20 14:54:05 -0700
commit15fba6bd2eb45ca47e975ef033aaf20136d71c67 (patch)
tree4c4582657e095e8fb711af2c23ef6e0ae61a3233
parentb0742ebacb5fb5982baa1096ad12457d9b14124e (diff)
parent32fd97df41bb2e99018f024f41b06490e41bd7ad (diff)
downloadscala-15fba6bd2eb45ca47e975ef033aaf20136d71c67.tar.gz
scala-15fba6bd2eb45ca47e975ef033aaf20136d71c67.tar.bz2
scala-15fba6bd2eb45ca47e975ef033aaf20136d71c67.zip
Merge pull request #924 from hubertp/2.10.x-issue/5385
Fix for SI-5385.
-rw-r--r--src/partest/scala/tools/partest/DirectTest.scala5
-rw-r--r--src/reflect/scala/reflect/internal/util/SourceFile.scala24
-rw-r--r--src/reflect/scala/tools/nsc/io/VirtualFile.scala2
-rw-r--r--test/files/neg/t4069.check2
-rw-r--r--test/files/neg/t4584.check7
-rw-r--r--test/files/neg/unicode-unterminated-quote.check5
-rw-r--r--test/files/run/t5385.check8
-rw-r--r--test/files/run/t5385.scala16
8 files changed, 55 insertions, 14 deletions
diff --git a/src/partest/scala/tools/partest/DirectTest.scala b/src/partest/scala/tools/partest/DirectTest.scala
index 4e7f36bdc9..5b4e1b4b25 100644
--- a/src/partest/scala/tools/partest/DirectTest.scala
+++ b/src/partest/scala/tools/partest/DirectTest.scala
@@ -38,7 +38,8 @@ abstract class DirectTest extends App {
// new compiler
def newCompiler(args: String*): Global = {
val settings = newSettings((CommandLineParser tokenize extraSettings) ++ args.toList)
- new Global(settings)
+ if (settings.Yrangepos.value) new Global(settings) with interactive.RangePositions
+ else new Global(settings)
}
def newSources(sourceCodes: String*) = sourceCodes.toList.zipWithIndex map {
case (src, idx) => new BatchSourceFile("newSource" + (idx + 1), src)
@@ -69,7 +70,7 @@ abstract class DirectTest extends App {
/** Constructor/main body **/
try show()
- catch { case t => println(t) ; t.printStackTrace ; sys.exit(1) }
+ catch { case t => println(t.getMessage) ; t.printStackTrace ; sys.exit(1) }
/** Debugger interest only below this line **/
protected def isDebug = (sys.props contains "partest.debug") || (sys.env contains "PARTEST_DEBUG")
diff --git a/src/reflect/scala/reflect/internal/util/SourceFile.scala b/src/reflect/scala/reflect/internal/util/SourceFile.scala
index 7c80ddd37d..df4a3336c3 100644
--- a/src/reflect/scala/reflect/internal/util/SourceFile.scala
+++ b/src/reflect/scala/reflect/internal/util/SourceFile.scala
@@ -102,17 +102,21 @@ class ScriptSourceFile(underlying: BatchSourceFile, content: Array[Char], overri
}
/** a file whose contents do not change over time */
-class BatchSourceFile(val file : AbstractFile, val content: Array[Char]) extends SourceFile {
-
+class BatchSourceFile(val file : AbstractFile, val content0: Array[Char]) extends SourceFile {
def this(_file: AbstractFile) = this(_file, _file.toCharArray)
def this(sourceName: String, cs: Seq[Char]) = this(new VirtualFile(sourceName), cs.toArray)
def this(file: AbstractFile, cs: Seq[Char]) = this(file, cs.toArray)
- override def equals(that : Any) = that match {
- case that : BatchSourceFile => file.path == that.file.path && start == that.start
- case _ => false
- }
- override def hashCode = file.path.## + start.##
+ // If non-whitespace tokens run all the way up to EOF,
+ // positions go wrong because the correct end of the last
+ // token cannot be used as an index into the char array.
+ // The least painful way to address this was to add a
+ // newline to the array.
+ val content = (
+ if (content0.length == 0 || !content0.last.isWhitespace)
+ content0 :+ '\n'
+ else content0
+ )
val length = content.length
def start = 0
def isSelfContained = true
@@ -158,4 +162,10 @@ class BatchSourceFile(val file : AbstractFile, val content: Array[Char]) extends
lastLine = findLine(0, lines.length, lastLine)
lastLine
}
+
+ override def equals(that : Any) = that match {
+ case that : BatchSourceFile => file.path == that.file.path && start == that.start
+ case _ => false
+ }
+ override def hashCode = file.path.## + start.##
}
diff --git a/src/reflect/scala/tools/nsc/io/VirtualFile.scala b/src/reflect/scala/tools/nsc/io/VirtualFile.scala
index b9a946598c..805bc04165 100644
--- a/src/reflect/scala/tools/nsc/io/VirtualFile.scala
+++ b/src/reflect/scala/tools/nsc/io/VirtualFile.scala
@@ -55,7 +55,7 @@ class VirtualFile(val name: String, override val path: String) extends AbstractF
}
}
- def container: AbstractFile = unsupported
+ def container: AbstractFile = NoAbstractFile
/** Is this abstract file a directory? */
def isDirectory: Boolean = false
diff --git a/test/files/neg/t4069.check b/test/files/neg/t4069.check
index 91bf882cec..08e937bdfe 100644
--- a/test/files/neg/t4069.check
+++ b/test/files/neg/t4069.check
@@ -12,5 +12,5 @@ t4069.scala:4: error: I encountered a '}' where I didn't expect one, maybe this
^
t4069.scala:10: error: '}' expected but eof found.
}
-^
+ ^
5 errors found
diff --git a/test/files/neg/t4584.check b/test/files/neg/t4584.check
index 060160d76a..419f5704b1 100644
--- a/test/files/neg/t4584.check
+++ b/test/files/neg/t4584.check
@@ -1,4 +1,7 @@
-t4584.scala:1: error: incomplete unicode escape
+t4584.scala:1: error: error in unicode escape
+class A { val /u2
+ ^
+t4584.scala:1: error: illegal character '/uffff'
class A { val /u2
^
-one error found
+two errors found
diff --git a/test/files/neg/unicode-unterminated-quote.check b/test/files/neg/unicode-unterminated-quote.check
index fc5caa6d7e..5085505fb4 100644
--- a/test/files/neg/unicode-unterminated-quote.check
+++ b/test/files/neg/unicode-unterminated-quote.check
@@ -1,4 +1,7 @@
unicode-unterminated-quote.scala:2: error: unclosed string literal
val x = /u0022
^
-one error found
+unicode-unterminated-quote.scala:2: error: '}' expected but eof found.
+ val x = /u0022
+ ^
+two errors found
diff --git a/test/files/run/t5385.check b/test/files/run/t5385.check
new file mode 100644
index 0000000000..1df74fcfb5
--- /dev/null
+++ b/test/files/run/t5385.check
@@ -0,0 +1,8 @@
+[0:9] class Azz
+[0:9] class Bzz
+[0:9] class Czz
+[0:9] class Dzz
+[0:11] class Ezz
+[0:11] class Fzz
+[0:13] class Gzz
+[0:13] class Hzz
diff --git a/test/files/run/t5385.scala b/test/files/run/t5385.scala
new file mode 100644
index 0000000000..b803897e71
--- /dev/null
+++ b/test/files/run/t5385.scala
@@ -0,0 +1,16 @@
+import scala.tools.partest._
+
+object Test extends CompilerTest {
+ import global._
+ override def extraSettings = super.extraSettings + " -Yrangepos"
+ override def sources = List(
+ "class Azz", "class Bzz ", "class Czz ", "class Dzz\n",
+ "class Ezz{}", "class Fzz{} ", "class Gzz { }", "class Hzz { } "
+ )
+ def check(source: String, unit: CompilationUnit) {
+ unit.body foreach {
+ case cdef: ClassDef => println("%-15s class %s".format(cdef.pos.show, cdef.name))
+ case _ =>
+ }
+ }
+}