summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2011-07-03 22:01:46 +0000
committerPaul Phillips <paulp@improving.org>2011-07-03 22:01:46 +0000
commitf34c836cb67ed4c03b03218dff0a048466cbf13f (patch)
tree85762cb8af6fc79b703bb15a0918b32f2f44130a /src
parent552d7aa113dfda5c33c909b4a7874799a7ff1a3e (diff)
downloadscala-f34c836cb67ed4c03b03218dff0a048466cbf13f.tar.gz
scala-f34c836cb67ed4c03b03218dff0a048466cbf13f.tar.bz2
scala-f34c836cb67ed4c03b03218dff0a048466cbf13f.zip
Looking forward to working positions.
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/interpreter/IMain.scala15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/interpreter/IMain.scala b/src/compiler/scala/tools/nsc/interpreter/IMain.scala
index 467805fe36..dd147d7fff 100644
--- a/src/compiler/scala/tools/nsc/interpreter/IMain.scala
+++ b/src/compiler/scala/tools/nsc/interpreter/IMain.scala
@@ -467,15 +467,20 @@ class IMain(val settings: Settings, protected val out: JPrintWriter) extends Imp
else {
// The position of the last tree
val lastpos0 = earliestPosition(trees.last)
- // Oh boy, the parser throws away parens so "(2+2)" is mispositioned.
- // So until we can fix the parser we'll have to go trawling.
- val adjustment = ((content take lastpos0).reverse takeWhile { ch =>
- ch.isWhitespace || ch == '('
- }).length
+ // Oh boy, the parser throws away parens so "(2+2)" is mispositioned,
+ // with increasingly hard to decipher positions as we move on to "() => 5",
+ // (x: Int) => x + 1, and more. So I abandon attempts to finesse and just
+ // look for semicolons and newlines, which I'm sure is also buggy.
+ val (raw1, raw2) = content splitAt lastpos0
+ repldbg("[raw] " + raw1 + " <---> " + raw2)
+
+ val adjustment = (raw1.reverse takeWhile (ch => (ch != ';') && (ch != '\n'))).size
val lastpos = lastpos0 - adjustment
// the source code split at the laboriously determined position.
val (l1, l2) = content splitAt lastpos
+ repldbg("[adj] " + l1 + " <---> " + l2)
+
val prefix = if (l1.trim == "") "" else l1 + ";\n"
// Note to self: val source needs to have this precise structure so that
// error messages print the user-submitted part without the "val res0 = " part.