summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMiles Sabin <miles@milessabin.com>2009-10-19 18:30:07 +0000
committerMiles Sabin <miles@milessabin.com>2009-10-19 18:30:07 +0000
commit2bdd20d023c842472139abf995543d2dda5c28d5 (patch)
tree51ba4bafc36ebbcdea43e13082293ce7e58c7d4f /src
parent6dae27f35a329c89df3432922cde6db680910392 (diff)
downloadscala-2bdd20d023c842472139abf995543d2dda5c28d5.tar.gz
scala-2bdd20d023c842472139abf995543d2dda5c28d5.tar.bz2
scala-2bdd20d023c842472139abf995543d2dda5c28d5.zip
Fix and test for #1674; we aren't supposed to b...
Fix and test for #1674; we aren't supposed to be validating positions if there are syntax errors ... ensure that's so; we are supposed to be validating positions when -Yide-debug is set ... ensure that's so.
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/Main.scala1
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/Parsers.scala6
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/SyntaxAnalyzer.scala2
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Analyzer.scala2
4 files changed, 8 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/Main.scala b/src/compiler/scala/tools/nsc/Main.scala
index 91129d5fb8..253eebfd0d 100644
--- a/src/compiler/scala/tools/nsc/Main.scala
+++ b/src/compiler/scala/tools/nsc/Main.scala
@@ -50,6 +50,7 @@ object Main extends AnyRef with EvalLoop {
reporter.info(null, versionMsg, true)
else if (command.settings.Yidedebug.value) {
command.settings.Xprintpos.value = true
+ command.settings.Yrangepos.value = true
val compiler = new interactive.Global(command.settings, reporter)
import compiler.{ reporter => _, _ }
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
index 8f94c64a4e..c2cb2128ee 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
@@ -549,7 +549,11 @@ self =>
val opinfo = opstack.head
opstack = opstack.tail
val opPos = r2p(opinfo.offset, opinfo.offset, opinfo.offset+opinfo.operator.length)
- top = atPos(opinfo.operand.pos.startOrPoint, opinfo.offset) {
+ val lPos = opinfo.operand.pos
+ val start = if (lPos.isDefined) lPos.startOrPoint else opPos.startOrPoint
+ val rPos = top.pos
+ val end = if (rPos.isDefined) rPos.endOrPoint else opPos.endOrPoint
+ top = atPos(start, opinfo.offset, end) {
makeBinop(isExpr, opinfo.operand, opinfo.operator, top, opPos)
}
}
diff --git a/src/compiler/scala/tools/nsc/ast/parser/SyntaxAnalyzer.scala b/src/compiler/scala/tools/nsc/ast/parser/SyntaxAnalyzer.scala
index b3673f0b82..ab848b6b48 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/SyntaxAnalyzer.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/SyntaxAnalyzer.scala
@@ -25,7 +25,7 @@ abstract class SyntaxAnalyzer extends SubComponent with Parsers with MarkupParse
if (unit.source.file.name.endsWith(".java")) new JavaUnitParser(unit).parse()
else if (!global.reporter.incompleteHandled) new UnitParser(unit).smartParse()
else new UnitParser(unit).parse()
- if (global.settings.Yrangepos.value) global.validatePositions(unit.body)
+ if (global.settings.Yrangepos.value && !global.reporter.hasErrors) global.validatePositions(unit.body)
}
}
}
diff --git a/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala b/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala
index acef0154b2..ef3b7afa95 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala
@@ -55,7 +55,7 @@ trait Analyzer extends AnyRef
def apply(unit: CompilationUnit) {
try {
unit.body = newTyper(rootContext(unit)).typed(unit.body)
- if (global.settings.Yrangepos.value) global.validatePositions(unit.body)
+ if (global.settings.Yrangepos.value && !global.reporter.hasErrors) global.validatePositions(unit.body)
for (workItem <- unit.toCheck) workItem()
} finally {
unit.toCheck.clear()