summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/scala/tools/nsc/FatalError.scala4
-rw-r--r--src/compiler/scala/tools/nsc/Global.scala35
-rw-r--r--src/compiler/scala/tools/nsc/ScriptRunner.scala2
-rw-r--r--src/compiler/scala/tools/nsc/ast/TreeBrowsers.scala2
-rw-r--r--src/compiler/scala/tools/nsc/ast/TreeGen.scala2
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala48
-rw-r--r--src/compiler/scala/tools/nsc/backend/icode/CheckerError.scala2
-rw-r--r--src/compiler/scala/tools/nsc/backend/icode/Checkers.scala2
-rw-r--r--src/compiler/scala/tools/nsc/backend/icode/GenICode.scala3
-rw-r--r--src/compiler/scala/tools/nsc/backend/icode/TypeKinds.scala2
-rw-r--r--src/compiler/scala/tools/nsc/backend/icode/analysis/CompleteLattice.scala2
-rw-r--r--src/compiler/scala/tools/nsc/backend/icode/analysis/CopyPropagation.scala4
-rw-r--r--src/compiler/scala/tools/nsc/backend/icode/analysis/LubException.scala (renamed from src/compiler/scala/tools/nsc/backend/icode/analysis/LubError.scala)2
-rw-r--r--src/compiler/scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala2
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala6
-rw-r--r--src/compiler/scala/tools/nsc/backend/msil/GenMSIL.scala6
-rw-r--r--src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala4
-rw-r--r--src/compiler/scala/tools/nsc/backend/opt/DeadCodeElimination.scala1
-rw-r--r--src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala6
-rw-r--r--src/compiler/scala/tools/nsc/interactive/CompilerControl.scala18
-rw-r--r--src/compiler/scala/tools/nsc/interactive/Global.scala32
-rw-r--r--src/compiler/scala/tools/nsc/interactive/RangePositions.scala4
-rw-r--r--src/compiler/scala/tools/nsc/io/AbstractFile.scala3
-rw-r--r--src/compiler/scala/tools/nsc/io/VirtualDirectory.scala11
-rw-r--r--src/compiler/scala/tools/nsc/io/VirtualFile.scala13
-rw-r--r--src/compiler/scala/tools/nsc/io/ZipArchive.scala11
-rw-r--r--src/compiler/scala/tools/nsc/javac/JavaParsers.scala2
-rw-r--r--src/compiler/scala/tools/nsc/matching/MatchSupport.scala1
-rw-r--r--src/compiler/scala/tools/nsc/models/SemanticTokens.scala10
-rw-r--r--src/compiler/scala/tools/nsc/reporters/ConsoleReporter.scala15
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Definitions.scala2
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Scopes.scala2
-rw-r--r--src/compiler/scala/tools/nsc/symtab/StdNames.scala2
-rw-r--r--src/compiler/scala/tools/nsc/symtab/SymbolTable.scala2
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Symbols.scala12
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Types.scala33
-rw-r--r--src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala3
-rw-r--r--src/compiler/scala/tools/nsc/symtab/clr/TypeParser.scala2
-rw-r--r--src/compiler/scala/tools/nsc/transform/AddInterfaces.scala2
-rw-r--r--src/compiler/scala/tools/nsc/transform/Erasure.scala20
-rw-r--r--src/compiler/scala/tools/nsc/transform/LiftCode.scala4
-rw-r--r--src/compiler/scala/tools/nsc/transform/UnCurry.scala8
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Contexts.scala2
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/DeVirtualize.scala2
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Infer.scala4
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala13
-rw-r--r--src/compiler/scala/tools/nsc/util/CommandLineParser.scala4
-rw-r--r--src/compiler/scala/tools/nsc/util/WorkScheduler.scala14
48 files changed, 179 insertions, 207 deletions
diff --git a/src/compiler/scala/tools/nsc/FatalError.scala b/src/compiler/scala/tools/nsc/FatalError.scala
index 7bc1bc52d8..aee083fa14 100644
--- a/src/compiler/scala/tools/nsc/FatalError.scala
+++ b/src/compiler/scala/tools/nsc/FatalError.scala
@@ -6,7 +6,9 @@
package scala.tools.nsc
-case class FatalError(msg: String) extends Exception(msg)
+import scala.util.control.ControlThrowable
+
+case class FatalError(msg: String) extends Throwable(msg) with ControlThrowable
class MissingRequirementError(val req: String) extends FatalError(req + " not found.")
diff --git a/src/compiler/scala/tools/nsc/Global.scala b/src/compiler/scala/tools/nsc/Global.scala
index 92c72b1549..bf75c8d121 100644
--- a/src/compiler/scala/tools/nsc/Global.scala
+++ b/src/compiler/scala/tools/nsc/Global.scala
@@ -154,29 +154,26 @@ class Global(var settings: Settings, var reporter: Reporter) extends SymbolTable
if (settings.log contains phase.name) inform("[log " + phase + "] " + msg)
}
- class ErrorWithPosition(val pos: Int, val error: Throwable) extends Error
-
- def tryWith[T](pos: Int, body: => T): T = try {
- body
- } catch {
- case e : ErrorWithPosition => throw e
- case te: TypeError => throw te
- case e : Error => throw new ErrorWithPosition(pos, e)
- case e : RuntimeException => throw new ErrorWithPosition(pos, e)
- }
+ class ThrowableWithPosition(val pos: Int, val error: Throwable) extends Throwable
+
+ def tryWith[T](pos: Int, body: => T): T =
+ try body
+ catch {
+ case e : ThrowableWithPosition => throw e
+ case te: TypeError => throw te
+ case e : RuntimeException => throw new ThrowableWithPosition(pos, e)
+ }
- def catchWith[T](source : SourceFile, body : => T) : T = try {
- body
- } catch {
- case e : ErrorWithPosition =>
- logError("POS: " + source.dbg(e.pos), e)
- throw e.error
- }
+ def catchWith[T](source : SourceFile, body : => T) : T =
+ try body
+ catch {
+ case e : ThrowableWithPosition =>
+ logError("POS: " + source.dbg(e.pos), e)
+ throw e.error
+ }
def logError(msg: String, t: Throwable): Unit = ()
- def abort(msg: String) = throw new Error(msg)
-
// ------------ File interface -----------------------------------------
private val reader: SourceReader = {
diff --git a/src/compiler/scala/tools/nsc/ScriptRunner.scala b/src/compiler/scala/tools/nsc/ScriptRunner.scala
index 7be39aa27c..51e85eaf95 100644
--- a/src/compiler/scala/tools/nsc/ScriptRunner.scala
+++ b/src/compiler/scala/tools/nsc/ScriptRunner.scala
@@ -112,7 +112,7 @@ object ScriptRunner
jar.close
}
catch {
- case _: Error => jarFile.delete() // XXX what errors to catch?
+ case _: Exception => jarFile.delete()
}
}
diff --git a/src/compiler/scala/tools/nsc/ast/TreeBrowsers.scala b/src/compiler/scala/tools/nsc/ast/TreeBrowsers.scala
index 42428c7d8f..eaad12c0ed 100644
--- a/src/compiler/scala/tools/nsc/ast/TreeBrowsers.scala
+++ b/src/compiler/scala/tools/nsc/ast/TreeBrowsers.scala
@@ -680,7 +680,7 @@ abstract class TreeBrowsers {
toDocument(thistpe) :/: ", " :/:
toDocument(supertpe) ::")"))
case _ =>
- throw new Error("Unknown case: " + t.toString() +", "+ t.getClass)
+ Predef.error("Unknown case: " + t.toString() +", "+ t.getClass)
}
}
diff --git a/src/compiler/scala/tools/nsc/ast/TreeGen.scala b/src/compiler/scala/tools/nsc/ast/TreeGen.scala
index 104e00a03d..ccb60bc886 100644
--- a/src/compiler/scala/tools/nsc/ast/TreeGen.scala
+++ b/src/compiler/scala/tools/nsc/ast/TreeGen.scala
@@ -98,7 +98,7 @@ abstract class TreeGen
mkAttributedQualifier(firstStable.get)
case _ =>
- throw new Error("bad qualifier: " + tpe)
+ abort("bad qualifier: " + tpe)
}
/** Builds a reference to given symbol with given stable prefix. */
diff --git a/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala b/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala
index 53fc6542b2..e918489446 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala
@@ -9,7 +9,7 @@ package ast.parser
import scala.collection.mutable
import mutable.{ Buffer, ArrayBuffer, ListBuffer, HashMap }
-import scala.util.control.ControlException
+import scala.util.control.ControlThrowable
import scala.tools.nsc.util.{SourceFile,CharArrayReader}
import scala.xml.{ Text, TextBuffer }
import scala.xml.Utility.{ isNameStart, isNameChar, isSpace }
@@ -35,15 +35,15 @@ trait MarkupParsers
{
self: Parsers =>
- case object MissingEndTagException extends RuntimeException with ControlException {
+ case object MissingEndTagControl extends ControlThrowable {
override def getMessage = "start tag was here: "
}
- case object ConfusedAboutBracesException extends RuntimeException with ControlException {
+ case object ConfusedAboutBracesControl extends ControlThrowable {
override def getMessage = " I encountered a '}' where I didn't expect one, maybe this tag isn't closed <"
}
- case object TruncatedXML extends RuntimeException with ControlException {
+ case object TruncatedXMLControl extends ControlThrowable {
override def getMessage = "input ended while parsing XML"
}
@@ -63,9 +63,9 @@ trait MarkupParsers
val eof = false
- def truncatedError(msg: String): Nothing = throw TruncatedXML
+ def truncatedError(msg: String): Nothing = throw TruncatedXMLControl
def xHandleError(that: Char, msg: String) =
- if (ch == SU) throw TruncatedXML
+ if (ch == SU) throw TruncatedXMLControl
else reportSyntaxError(msg)
var input : CharArrayReader = _
@@ -92,11 +92,11 @@ trait MarkupParsers
private def errorBraces() = {
reportSyntaxError("in XML content, please use '}}' to express '}'")
- throw ConfusedAboutBracesException
+ throw ConfusedAboutBracesControl
}
def errorNoEnd(tag: String) = {
reportSyntaxError("expected closing tag of " + tag)
- throw MissingEndTagException
+ throw MissingEndTagControl
}
/** checks whether next character starts a Scala block, if yes, skip it.
@@ -137,7 +137,7 @@ trait MarkupParsers
nextch
xEmbeddedExpr
case SU =>
- throw TruncatedXML
+ throw TruncatedXMLControl
case _ =>
errorAndResult("' or \" delimited attribute value or '{' scala-expr '}' expected", Literal(Constant("<syntax-error>")))
}
@@ -307,23 +307,21 @@ trait MarkupParsers
}
/** Some try/catch/finally logic used by xLiteral and xLiteralPattern. */
- private def xLiteralCommon(f: () => Tree, ifTruncated: Exception => Unit): Tree =
- try f()
+ private def xLiteralCommon(f: () => Tree, ifTruncated: String => Unit): Tree = {
+ try return f()
catch {
- case ex: RuntimeException =>
- ex match {
- case c @ TruncatedXML =>
- ifTruncated(c)
- case c @ (MissingEndTagException | ConfusedAboutBracesException) =>
- parser.syntaxError(debugLastPos, c.getMessage + debugLastElem + ">")
- case _: ArrayIndexOutOfBoundsException =>
- parser.syntaxError(debugLastPos, "missing end tag in XML literal for <%s>" format debugLastElem)
- case _ => throw ex
- }
- EmptyTree
+ case c @ TruncatedXMLControl =>
+ ifTruncated(c.getMessage)
+ case c @ (MissingEndTagControl | ConfusedAboutBracesControl) =>
+ parser.syntaxError(debugLastPos, c.getMessage + debugLastElem + ">")
+ case _: ArrayIndexOutOfBoundsException =>
+ parser.syntaxError(debugLastPos, "missing end tag in XML literal for <%s>" format debugLastElem)
}
finally parser.in resume Tokens.XMLSTART
+ EmptyTree
+ }
+
/** Use a lookahead parser to run speculative body, and return the first char afterward. */
private def charComingAfter(body: => Unit): Char = {
input = input.lookaheadReader
@@ -361,7 +359,7 @@ trait MarkupParsers
ts(0)
}
},
- ex => parser.incompleteInputError(ex.getMessage)
+ msg => parser.incompleteInputError(msg)
)
/** @see xmlPattern. resynchronizes after successful parse
@@ -377,7 +375,7 @@ trait MarkupParsers
tree
}
},
- ex => parser.syntaxError(curOffset, ex.getMessage)
+ msg => parser.syntaxError(curOffset, msg)
)
def escapeToScala[A](op: => A, kind: String) = {
@@ -436,7 +434,7 @@ trait MarkupParsers
assert(!xEmbeddedBlock, "problem with embedded block")
case SU =>
- throw TruncatedXML
+ throw TruncatedXMLControl
case _ => // text
appendText(r2p(start1, start1, curOffset), ts, xText)
diff --git a/src/compiler/scala/tools/nsc/backend/icode/CheckerError.scala b/src/compiler/scala/tools/nsc/backend/icode/CheckerError.scala
index 1e6b8abafc..9d102eef28 100644
--- a/src/compiler/scala/tools/nsc/backend/icode/CheckerError.scala
+++ b/src/compiler/scala/tools/nsc/backend/icode/CheckerError.scala
@@ -9,5 +9,5 @@ package scala.tools.nsc
package backend
package icode
-class CheckerError(s: String) extends Exception(s)
+class CheckerException(s: String) extends Exception(s)
diff --git a/src/compiler/scala/tools/nsc/backend/icode/Checkers.scala b/src/compiler/scala/tools/nsc/backend/icode/Checkers.scala
index cbbd92a69b..63ccb12495 100644
--- a/src/compiler/scala/tools/nsc/backend/icode/Checkers.scala
+++ b/src/compiler/scala/tools/nsc/backend/icode/Checkers.scala
@@ -151,7 +151,7 @@ abstract class Checkers {
else if (s2 eq emptyStack) s1
else {
if (s1.length != s2.length)
- throw new CheckerError("Incompatible stacks: " + s1 + " and " + s2 + " in " + method + " at entry to block: " + bl);
+ throw new CheckerException("Incompatible stacks: " + s1 + " and " + s2 + " in " + method + " at entry to block: " + bl);
new TypeStack((s1.types, s2.types).zipped map lub)
}
}
diff --git a/src/compiler/scala/tools/nsc/backend/icode/GenICode.scala b/src/compiler/scala/tools/nsc/backend/icode/GenICode.scala
index 35a5f80d1f..e13c72a8a5 100644
--- a/src/compiler/scala/tools/nsc/backend/icode/GenICode.scala
+++ b/src/compiler/scala/tools/nsc/backend/icode/GenICode.scala
@@ -836,8 +836,7 @@ abstract class GenICode extends SubComponent {
generatedType = l.kind
} catch {
case ex: MatchError =>
- throw new Error("symbol " + tree.symbol +
- " does not exist in " + ctx.method)
+ abort("symbol " + tree.symbol + " does not exist in " + ctx.method)
}
}
}
diff --git a/src/compiler/scala/tools/nsc/backend/icode/TypeKinds.scala b/src/compiler/scala/tools/nsc/backend/icode/TypeKinds.scala
index d83659f477..4b53a5e2ae 100644
--- a/src/compiler/scala/tools/nsc/backend/icode/TypeKinds.scala
+++ b/src/compiler/scala/tools/nsc/backend/icode/TypeKinds.scala
@@ -138,7 +138,7 @@ trait TypeKinds { self: ICodes =>
(b.isReferenceType || b.isArrayType))
toTypeKind(lub0(a.toType, b.toType))
else
- throw new CheckerError("Incompatible types: " + a + " with " + b)
+ throw new CheckerException("Incompatible types: " + a + " with " + b)
}
}
diff --git a/src/compiler/scala/tools/nsc/backend/icode/analysis/CompleteLattice.scala b/src/compiler/scala/tools/nsc/backend/icode/analysis/CompleteLattice.scala
index c26030cdb6..95f4418759 100644
--- a/src/compiler/scala/tools/nsc/backend/icode/analysis/CompleteLattice.scala
+++ b/src/compiler/scala/tools/nsc/backend/icode/analysis/CompleteLattice.scala
@@ -40,7 +40,7 @@ trait CompleteLattice {
def lub(xs: List[Elem], exceptional: Boolean): Elem = try {
if (xs == Nil) bottom else xs reduceLeft lub2(exceptional)
} catch {
- case e: LubError =>
+ case e: LubException =>
Console.println("Lub on blocks: " + xs)
throw e
}
diff --git a/src/compiler/scala/tools/nsc/backend/icode/analysis/CopyPropagation.scala b/src/compiler/scala/tools/nsc/backend/icode/analysis/CopyPropagation.scala
index d71fa8420d..1fbbc10c3d 100644
--- a/src/compiler/scala/tools/nsc/backend/icode/analysis/CopyPropagation.scala
+++ b/src/compiler/scala/tools/nsc/backend/icode/analysis/CopyPropagation.scala
@@ -184,14 +184,14 @@ abstract class CopyPropagation {
if (exceptional) exceptionHandlerStack
else {
// if (a.stack.length != b.stack.length)
-// throw new LubError(a, b, "Invalid stacks in states: ");
+// throw new LubException(a, b, "Invalid stacks in states: ");
(a.stack, b.stack).zipped map { (v1, v2) =>
if (v1 == v2) v1 else Unknown
}
}
/* if (a.stack.length != b.stack.length)
- throw new LubError(a, b, "Invalid stacks in states: ");
+ throw new LubException(a, b, "Invalid stacks in states: ");
val resStack = List.map2(a.stack, b.stack) { (v1, v2) =>
if (v1 == v2) v1 else Unknown
}
diff --git a/src/compiler/scala/tools/nsc/backend/icode/analysis/LubError.scala b/src/compiler/scala/tools/nsc/backend/icode/analysis/LubException.scala
index ae0991f60a..0474d12a8b 100644
--- a/src/compiler/scala/tools/nsc/backend/icode/analysis/LubError.scala
+++ b/src/compiler/scala/tools/nsc/backend/icode/analysis/LubException.scala
@@ -8,6 +8,6 @@
package scala.tools.nsc
package backend.icode.analysis
-class LubError(a: Any, b: Any, msg: String) extends Exception {
+class LubException(a: Any, b: Any, msg: String) extends Exception {
override def toString() = "Lub error: " + msg + a + b
}
diff --git a/src/compiler/scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala b/src/compiler/scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala
index 132e85f6d3..858512c9b1 100644
--- a/src/compiler/scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala
+++ b/src/compiler/scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala
@@ -52,7 +52,7 @@ abstract class TypeFlowAnalysis {
else if ((s1 eq exceptionHandlerStack) || (s2 eq exceptionHandlerStack)) Predef.error("merging with exhan stack")
else {
// if (s1.length != s2.length)
-// throw new CheckerError("Incompatible stacks: " + s1 + " and " + s2);
+// throw new CheckerException("Incompatible stacks: " + s1 + " and " + s2);
new TypeStack((s1.types, s2.types).zipped map icodes.lub)
}
}
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
index 16f87bd024..0b5028980e 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
@@ -1015,7 +1015,7 @@ abstract class GenJVM extends SubComponent {
varsInBlock.clear
for (instr <- b) {
- class CompilationError(msg: String) extends Error {
+ class CompilationException(msg: String) extends Exception(msg) {
override def toString: String = {
msg +
"\nCurrent method: " + method +
@@ -1025,7 +1025,7 @@ abstract class GenJVM extends SubComponent {
method.dump
}
}
- def assert(cond: Boolean, msg: String) = if (!cond) throw new CompilationError(msg);
+ def assert(cond: Boolean, msg: String) = if (!cond) throw new CompilationException(msg)
instr match {
case THIS(clasz) =>
@@ -1840,7 +1840,7 @@ abstract class GenJVM extends SubComponent {
def assert(cond: Boolean, msg: => String) = if (!cond) {
method.dump
- throw new Error(msg + "\nMethod: " + method)
+ abort(msg + "\nMethod: " + method)
}
def assert(cond: Boolean) { assert(cond, "Assertion failed.") }
diff --git a/src/compiler/scala/tools/nsc/backend/msil/GenMSIL.scala b/src/compiler/scala/tools/nsc/backend/msil/GenMSIL.scala
index 4177cddd3f..c7b1fc1dd8 100644
--- a/src/compiler/scala/tools/nsc/backend/msil/GenMSIL.scala
+++ b/src/compiler/scala/tools/nsc/backend/msil/GenMSIL.scala
@@ -1690,7 +1690,7 @@ abstract class GenMSIL extends SubComponent {
val name = typeString(sym)
val typ = clrTypes.getType(name)
if (typ == null)
- throw new Error(showsym(sym) + " with name " + name)
+ abort(showsym(sym) + " with name " + name)
else {
clrTypes.types(sym) = typ
typ
@@ -2046,7 +2046,7 @@ abstract class GenMSIL extends SubComponent {
if (constr eq null) {
System.out.println("Cannot find constructor " + sym.owner + "::" + sym.name)
System.out.println("scope = " + sym.owner.tpe.decls)
- throw new Error(sym.fullName)
+ abort(sym.fullName)
}
else {
mapConstructor(sym, constr)
@@ -2080,7 +2080,7 @@ abstract class GenMSIL extends SubComponent {
if (method eq null) {
System.out.println("Cannot find method " + sym.owner + "::" + msilName(sym))
System.out.println("scope = " + sym.owner.tpe.decls)
- throw new Error(sym.fullName)
+ abort(sym.fullName)
}
else {
mapMethod(sym, method)
diff --git a/src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala b/src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala
index b05061b0f6..1812753ccd 100644
--- a/src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala
+++ b/src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala
@@ -9,7 +9,7 @@ package scala.tools.nsc
package backend.opt;
import scala.collection.mutable.{Map, HashMap};
-import scala.tools.nsc.backend.icode.analysis.LubError;
+import scala.tools.nsc.backend.icode.analysis.LubException;
import scala.tools.nsc.symtab._;
/**
@@ -181,7 +181,7 @@ abstract class ClosureElimination extends SubComponent {
}
}
}} catch {
- case e: LubError =>
+ case e: LubException =>
Console.println("In method: " + m)
Console.println(e)
e.printStackTrace
diff --git a/src/compiler/scala/tools/nsc/backend/opt/DeadCodeElimination.scala b/src/compiler/scala/tools/nsc/backend/opt/DeadCodeElimination.scala
index ba51c13d7c..b9d4b8d5a4 100644
--- a/src/compiler/scala/tools/nsc/backend/opt/DeadCodeElimination.scala
+++ b/src/compiler/scala/tools/nsc/backend/opt/DeadCodeElimination.scala
@@ -10,7 +10,6 @@ package backend.opt
import scala.collection._
import scala.collection.immutable.{Map, HashMap, Set, HashSet}
-import scala.tools.nsc.backend.icode.analysis.LubError
import scala.tools.nsc.symtab._
/**
diff --git a/src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala b/src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala
index 5fdfe85c7e..8a646d2288 100644
--- a/src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala
+++ b/src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala
@@ -21,7 +21,7 @@ class ModelFactory(val global: Global, val settings: doc.Settings) { extractor =
/** */
def makeModel: Package =
- makePackage(RootPackage, null) getOrElse { throw new Error("no documentable class found in compilation units") }
+ makePackage(RootPackage, null) getOrElse abort("no documentable class found in compilation units")
object commentator {
@@ -278,7 +278,7 @@ class ModelFactory(val global: Global, val settings: doc.Settings) { extractor =
val bSym = normalizeTemplate(aSym)
if (bSym.isPackage) inTpl match {
case inPkg: PackageImpl => makePackage(bSym, inPkg) getOrElse (new NoDocTemplateImpl(bSym, inPkg))
- case _ => throw new Error("'" + bSym + "' must be in a package")
+ case _ => abort("'" + bSym + "' must be in a package")
}
else if ((bSym.sourceFile != null) && bSym.isPublic && !bSym.isLocal) inTpl match {
case inDTpl: DocTemplateImpl => makeDocTemplate(bSym, inDTpl)
@@ -317,7 +317,7 @@ class ModelFactory(val global: Global, val settings: doc.Settings) { extractor =
def isCaseClass = sym.isClass && sym.hasFlag(Flags.CASE)
}
else
- throw new Error("'" + bSym + "' that isn't a class, trait or object cannot be built as a documentable template")
+ abort("'" + bSym + "' that isn't a class, trait or object cannot be built as a documentable template")
}
/** */
diff --git a/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala b/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala
index ab02ae7460..5c16bb4465 100644
--- a/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala
+++ b/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala
@@ -2,7 +2,7 @@ package scala.tools.nsc
package interactive
import scala.concurrent.SyncVar
-import scala.util.control.ControlException
+import scala.util.control.ControlThrowable
import scala.tools.nsc.io.AbstractFile
import scala.tools.nsc.util.{SourceFile, Position, WorkScheduler}
import scala.tools.nsc.symtab._
@@ -124,23 +124,19 @@ trait CompilerControl { self: Global =>
}
/** Cancel currently pending high-priority jobs */
- def askCancel() =
- scheduler.raise(new CancelActionReq)
+ def askCancel() = scheduler raise CancelActionReq
/** Cancel current compiler run and start a fresh one where everything will be re-typechecked
* (but not re-loaded).
*/
- def askReset() =
- scheduler.raise(new FreshRunReq)
+ def askReset() = scheduler raise FreshRunReq
/** Tell the compile server to shutdown, and do not restart again */
- def askShutdown() =
- scheduler.raise(new ShutdownReq)
+ def askShutdown() = scheduler raise ShutdownReq
// ---------------- Interpreted exeptions -------------------
- class CancelActionReq extends Exception with ControlException
- class FreshRunReq extends Exception with ControlException
- class ShutdownReq extends Exception with ControlException
-
+ object CancelActionReq extends ControlThrowable
+ object FreshRunReq extends ControlThrowable
+ object ShutdownReq extends ControlThrowable
}
diff --git a/src/compiler/scala/tools/nsc/interactive/Global.scala b/src/compiler/scala/tools/nsc/interactive/Global.scala
index 1f2a606e6b..c4fec12667 100644
--- a/src/compiler/scala/tools/nsc/interactive/Global.scala
+++ b/src/compiler/scala/tools/nsc/interactive/Global.scala
@@ -5,7 +5,7 @@ import java.io.{ PrintWriter, StringWriter }
import scala.collection.mutable.{LinkedHashMap, SynchronizedMap}
import scala.concurrent.SyncVar
-import scala.util.control.ControlException
+import scala.util.control.ControlThrowable
import scala.tools.nsc.io.AbstractFile
import scala.tools.nsc.util.{SourceFile, Position, RangePosition, OffsetPosition, NoPosition, WorkScheduler}
import scala.tools.nsc.reporters._
@@ -91,10 +91,10 @@ self =>
// it will still be null now?
if (context.unit != null)
integrateNew()
- throw new FreshRunReq
- } catch {
- case ex : ValidateError => // Ignore, this will have been reported elsewhere
- case t : Throwable => throw t
+ throw FreshRunReq
+ }
+ catch {
+ case ex : ValidateException => // Ignore, this will have been reported elsewhere
}
}
}
@@ -114,9 +114,9 @@ self =>
* Poll for work reload/typedTreeAt/doFirst commands during background checking.
*/
def pollForWork() {
- scheduler.pollException() match {
- case Some(ex: CancelActionReq) => if (acting) throw ex
- case Some(ex: FreshRunReq) =>
+ scheduler.pollThrowable() match {
+ case Some(ex @ CancelActionReq) => if (acting) throw ex
+ case Some(ex @ FreshRunReq) =>
currentTyperRun = newTyperRun
minRunId = currentRunId
if (outOfDate) throw ex
@@ -132,7 +132,7 @@ self =>
action()
if (debugIDE) println("done with work item: "+action)
} catch {
- case ex: CancelActionReq =>
+ case CancelActionReq =>
if (debugIDE) println("cancelled work item: "+action)
} finally {
if (debugIDE) println("quitting work item: "+action)
@@ -195,19 +195,19 @@ self =>
backgroundCompile()
outOfDate = false
} catch {
- case ex: FreshRunReq =>
+ case FreshRunReq =>
}
}
}
} catch {
- case ex: ShutdownReq =>
+ case ShutdownReq =>
;
case ex =>
outOfDate = false
compileRunner = newRunnerThread
ex match {
- case _ : FreshRunReq => // This shouldn't be reported
- case _ : ValidateError => // This will have been reported elsewhere
+ case FreshRunReq => // This shouldn't be reported
+ case _ : ValidateException => // This will have been reported elsewhere
case _ => ex.printStackTrace(); inform("Fatal Error: "+ex)
}
}
@@ -276,7 +276,7 @@ self =>
result set Left(op)
return
} catch {
- case ex : FreshRunReq =>
+ case ex @ FreshRunReq =>
scheduler.postWorkItem(() => respond(result)(op))
throw ex
case ex =>
@@ -298,7 +298,7 @@ self =>
/** Make sure a set of compilation units is loaded and parsed */
def reload(sources: List[SourceFile], result: Response[Unit]) {
respond(result)(reloadSources(sources))
- if (outOfDate) throw new FreshRunReq
+ if (outOfDate) throw FreshRunReq
else outOfDate = true
}
@@ -534,7 +534,7 @@ self =>
def newTyperRun = new TyperRun
- class TyperResult(val tree: Tree) extends Exception with ControlException
+ class TyperResult(val tree: Tree) extends ControlThrowable
assert(globalPhase.id == 0)
}
diff --git a/src/compiler/scala/tools/nsc/interactive/RangePositions.scala b/src/compiler/scala/tools/nsc/interactive/RangePositions.scala
index 49fc8be185..0186103aa1 100644
--- a/src/compiler/scala/tools/nsc/interactive/RangePositions.scala
+++ b/src/compiler/scala/tools/nsc/interactive/RangePositions.scala
@@ -199,7 +199,7 @@ self: scala.tools.nsc.Global =>
inform(tree.toString)
inform("")
inform("=======")
- throw new ValidateError(msg)
+ throw new ValidateException(msg)
}
def validate(tree: Tree, encltree: Tree): Unit = {
@@ -238,7 +238,7 @@ self: scala.tools.nsc.Global =>
validate(tree, tree)
}
- class ValidateError(msg : String) extends Exception(msg)
+ class ValidateException(msg : String) extends Exception(msg)
// ---------------- Locating trees ----------------------------------
diff --git a/src/compiler/scala/tools/nsc/io/AbstractFile.scala b/src/compiler/scala/tools/nsc/io/AbstractFile.scala
index 1f9e6c55f0..04aa661bd6 100644
--- a/src/compiler/scala/tools/nsc/io/AbstractFile.scala
+++ b/src/compiler/scala/tools/nsc/io/AbstractFile.scala
@@ -244,6 +244,9 @@ abstract class AbstractFile extends AnyRef with Iterable[AbstractFile] {
Option(lookupName(name, true)) getOrElse new PlainFile((sfile.get / name).createDirectory())
}
+ protected def unsupported(): Nothing = unsupported(null)
+ protected def unsupported(msg: String): Nothing = throw new UnsupportedOperationException(msg)
+
/** Returns the path of this abstract file. */
override def toString() = path
diff --git a/src/compiler/scala/tools/nsc/io/VirtualDirectory.scala b/src/compiler/scala/tools/nsc/io/VirtualDirectory.scala
index 5675b264ac..f7e6832109 100644
--- a/src/compiler/scala/tools/nsc/io/VirtualDirectory.scala
+++ b/src/compiler/scala/tools/nsc/io/VirtualDirectory.scala
@@ -31,20 +31,15 @@ extends AbstractFile {
override def output = error("directories cannot be written")
/** Does this abstract file denote an existing file? */
- def create {
- throw new UnsupportedOperationException
- }
+ def create { unsupported }
/** Delete the underlying file or directory (recursively). */
- def delete {
- throw new UnsupportedOperationException
- }
+ def delete { unsupported }
/** Returns an abstract file with the given name. It does not
* check that it exists.
*/
- def lookupNameUnchecked(name: String, directory: Boolean): AbstractFile =
- throw new UnsupportedOperationException()
+ def lookupNameUnchecked(name: String, directory: Boolean): AbstractFile = unsupported
private val files = mutable.Map.empty[String, AbstractFile]
diff --git a/src/compiler/scala/tools/nsc/io/VirtualFile.scala b/src/compiler/scala/tools/nsc/io/VirtualFile.scala
index 256d02c5a5..6e3ad7ead6 100644
--- a/src/compiler/scala/tools/nsc/io/VirtualFile.scala
+++ b/src/compiler/scala/tools/nsc/io/VirtualFile.scala
@@ -62,7 +62,7 @@ class VirtualFile(val name: String, _path: String) extends AbstractFile
}
}
- def container: AbstractFile = throw new Error("not supported")
+ def container: AbstractFile = unsupported
/** Is this abstract file a directory? */
def isDirectory: Boolean = false
@@ -77,14 +77,10 @@ class VirtualFile(val name: String, _path: String) extends AbstractFile
}
/** Does this abstract file denote an existing file? */
- def create {
- throw new UnsupportedOperationException
- }
+ def create { unsupported }
/** Delete the underlying file or directory (recursively). */
- def delete {
- throw new UnsupportedOperationException
- }
+ def delete { unsupported }
/**
* Returns the abstract file in this abstract directory with the
@@ -104,8 +100,7 @@ class VirtualFile(val name: String, _path: String) extends AbstractFile
/** Returns an abstract file with the given name. It does not
* check that it exists.
*/
- def lookupNameUnchecked(name: String, directory: Boolean): AbstractFile =
- throw new UnsupportedOperationException()
+ def lookupNameUnchecked(name: String, directory: Boolean) = unsupported
//########################################################################
}
diff --git a/src/compiler/scala/tools/nsc/io/ZipArchive.scala b/src/compiler/scala/tools/nsc/io/ZipArchive.scala
index aa92b896db..9d062a45f1 100644
--- a/src/compiler/scala/tools/nsc/io/ZipArchive.scala
+++ b/src/compiler/scala/tools/nsc/io/ZipArchive.scala
@@ -157,8 +157,7 @@ private[io] trait ZipContainer extends AbstractFile
/** Returns an abstract file with the given name. It does not
* check that it exists.
*/
- override def lookupNameUnchecked(name: String, directory: Boolean): AbstractFile =
- throw new UnsupportedOperationException()
+ override def lookupNameUnchecked(name: String, directory: Boolean) = unsupported
/** Returns all abstract subfiles of this abstract directory. */
override def iterator: Iterator[AbstractFile] = root.iterator
@@ -274,10 +273,10 @@ final class URLZipArchive(url: URL) extends AbstractFile with ZipContainer
/** Methods we don't support but have to implement because of the design */
def file: JFile = null
- def create: Unit = throw new UnsupportedOperationException
- def delete: Unit = throw new UnsupportedOperationException
- def output = throw new Error("unsupported")
- def container = throw new Error("unsupported")
+ def create: Unit = unsupported
+ def delete: Unit = unsupported
+ def output = unsupported
+ def container = unsupported
abstract class Entry(name: String, path: String) extends VirtualFile(name, path) {
final override def path = "%s(%s)".format(URLZipArchive.this, super.path)
diff --git a/src/compiler/scala/tools/nsc/javac/JavaParsers.scala b/src/compiler/scala/tools/nsc/javac/JavaParsers.scala
index 16430b0a42..92dbc97965 100644
--- a/src/compiler/scala/tools/nsc/javac/JavaParsers.scala
+++ b/src/compiler/scala/tools/nsc/javac/JavaParsers.scala
@@ -429,7 +429,7 @@ trait JavaParsers extends JavaScanners {
return Modifiers(flags, privateWithin)
}
}
- throw new Error("should not be here")
+ abort("should not be here")
}
def typeParams(): List[TypeDef] =
diff --git a/src/compiler/scala/tools/nsc/matching/MatchSupport.scala b/src/compiler/scala/tools/nsc/matching/MatchSupport.scala
index 374e974170..2f50435db6 100644
--- a/src/compiler/scala/tools/nsc/matching/MatchSupport.scala
+++ b/src/compiler/scala/tools/nsc/matching/MatchSupport.scala
@@ -22,7 +22,6 @@ trait MatchSupport extends ast.TreeDSL { self: ParallelMatching =>
private final def trace = settings.Ypmatdebug.value
def impossible: Nothing = abort("this never happens")
- def abort(msg: String): Nothing = Predef.error(msg)
object Types {
import definitions._
diff --git a/src/compiler/scala/tools/nsc/models/SemanticTokens.scala b/src/compiler/scala/tools/nsc/models/SemanticTokens.scala
index 577452194b..4da23b358b 100644
--- a/src/compiler/scala/tools/nsc/models/SemanticTokens.scala
+++ b/src/compiler/scala/tools/nsc/models/SemanticTokens.scala
@@ -262,7 +262,6 @@ class SemanticTokens(val compiler: Global) {
build(arg.tpt);
}
}
- try {
//TPT=scala.Iterator[DocGenerator.this.compiler0.CompilationUnit] 260 class scala.tools.nsc.ast.Trees$TypeTree scala.Iterator[DocGenerator.this.compiler0.CompilationUnit] class scala.tools.nsc.symtab.Types$$anon$5
if ((tree.tpt eq null) || (tree.tpt.tpe eq null)) {
//Console.err.println("BAD: " + tree.tpt + " in " + tree);
@@ -270,11 +269,6 @@ class SemanticTokens(val compiler: Global) {
//Console.err.println("TPT=" + tree.tpt + " " + tree.tpt.pos + " " + tree.tpt.getClass() + " " + tree.tpt.tpe + " " + tree.tpt.tpe.getClass() + " " + tree.tpt.tpe.getClass().getSuperclass());
build(tree.tpt);
}
- } catch {
- case e: Error =>
- Console.err.println("VALDEF: " + tree + " " + tree.tpt + " " + tree.pos + " " + tree.tpt.pos);
- throw e;
- }
//Console.err.println("RHS: " + tree.rhs + " " + tree.rhs.getClass() + " " + tree.rhs.getClass().getSuperclass());
build(tree.rhs);
}
@@ -554,7 +548,7 @@ class SemanticTokens(val compiler: Global) {
Console.err.println("" + tree + "@" + tree.pos + " not in " +
unit.source.file.name + "[" + buf.length + "]");
Thread.dumpStack()
- throw new Error()
+ abort()
}
return 0
}
@@ -621,7 +615,7 @@ class SemanticTokens(val compiler: Global) {
Console.err.println("OFFSET=" + offset + " " + tok + " " + tok.length);
Console.err.println(" " + cursor.offset + " " + gap.length);
gap.length0 = offset - cursor.offset + tok.length
- //throw new Error();
+ //abort();
}
if (offset == cursor.offset) {
// replace or prepend
diff --git a/src/compiler/scala/tools/nsc/reporters/ConsoleReporter.scala b/src/compiler/scala/tools/nsc/reporters/ConsoleReporter.scala
index 6564cf881f..f7d380c975 100644
--- a/src/compiler/scala/tools/nsc/reporters/ConsoleReporter.scala
+++ b/src/compiler/scala/tools/nsc/reporters/ConsoleReporter.scala
@@ -103,18 +103,21 @@ class ConsoleReporter(val settings: Settings, reader: BufferedReader, writer: Pr
writer.flush()
var line = reader.readLine()
if (line ne null) {
- line = line.toLowerCase()
- if ("abort" startsWith line)
- throw new Error("user abort")
- if ("resume" startsWith line) continue = false
+ line = line.toLowerCase()
+ if ("abort" startsWith line)
+ abort("user abort")
+ if ("resume" startsWith line)
+ continue = false
}
}
- } catch {
+ }
+ catch {
case ex: IOException => {
ex.printStackTrace()
- throw new Error("input read error")
+ abort("input read error")
}
}
+ private def abort(msg: String) = throw new Error(msg)
override def flush() { writer.flush() }
}
diff --git a/src/compiler/scala/tools/nsc/symtab/Definitions.scala b/src/compiler/scala/tools/nsc/symtab/Definitions.scala
index 0ea34235b2..edf2e49f5a 100644
--- a/src/compiler/scala/tools/nsc/symtab/Definitions.scala
+++ b/src/compiler/scala/tools/nsc/symtab/Definitions.scala
@@ -103,7 +103,7 @@ trait Definitions extends reflect.generic.StandardDefinitions {
// exceptions and other throwables
lazy val ThrowableClass = getClass(sn.Throwable)
lazy val NullPointerExceptionClass = getClass(sn.NPException)
- lazy val NonLocalReturnExceptionClass = getClass(sn.NLRException)
+ lazy val NonLocalReturnControlClass = getClass(sn.NLRControl)
lazy val IndexOutOfBoundsExceptionClass = getClass(sn.IOOBException)
lazy val UninitializedErrorClass = getClass("scala.UninitializedFieldError")
lazy val MatchErrorClass = getClass("scala.MatchError")
diff --git a/src/compiler/scala/tools/nsc/symtab/Scopes.scala b/src/compiler/scala/tools/nsc/symtab/Scopes.scala
index a66e5b6cc3..ca6c93bd1c 100644
--- a/src/compiler/scala/tools/nsc/symtab/Scopes.scala
+++ b/src/compiler/scala/tools/nsc/symtab/Scopes.scala
@@ -326,7 +326,7 @@ trait Scopes {
*/
object EmptyScope extends Scope {
override def enter(e: ScopeEntry) {
- throw new Error("EmptyScope.enter")
+ abort("EmptyScope.enter")
}
}
diff --git a/src/compiler/scala/tools/nsc/symtab/StdNames.scala b/src/compiler/scala/tools/nsc/symtab/StdNames.scala
index 295dba2b46..98f87ca362 100644
--- a/src/compiler/scala/tools/nsc/symtab/StdNames.scala
+++ b/src/compiler/scala/tools/nsc/symtab/StdNames.scala
@@ -416,7 +416,7 @@ trait StdNames extends reflect.generic.StdNames { self: SymbolTable =>
val String : Name
val Throwable : Name
val NPException : Name // NullPointerException
- val NLRException : Name = newTermName("scala.runtime.NonLocalReturnException")
+ val NLRControl : Name = newTermName("scala.runtime.NonLocalReturnControl")
val ValueType : Name
val Serializable : Name
val BeanProperty : Name
diff --git a/src/compiler/scala/tools/nsc/symtab/SymbolTable.scala b/src/compiler/scala/tools/nsc/symtab/SymbolTable.scala
index 618c601b8f..75902568fa 100644
--- a/src/compiler/scala/tools/nsc/symtab/SymbolTable.scala
+++ b/src/compiler/scala/tools/nsc/symtab/SymbolTable.scala
@@ -31,6 +31,8 @@ abstract class SymbolTable extends reflect.generic.Universe
def settings: Settings
def rootLoader: LazyType
def log(msg: AnyRef)
+ def abort(msg: String) = throw new Error(msg)
+ def abort() = throw new Error()
/** Are we compiling for Java SE ? */
def forJVM: Boolean
diff --git a/src/compiler/scala/tools/nsc/symtab/Symbols.scala b/src/compiler/scala/tools/nsc/symtab/Symbols.scala
index 30f006201f..328b9c2311 100644
--- a/src/compiler/scala/tools/nsc/symtab/Symbols.scala
+++ b/src/compiler/scala/tools/nsc/symtab/Symbols.scala
@@ -740,7 +740,7 @@ trait Symbols extends reflect.generic.Symbols { self: SymbolTable =>
cnt += 1
// allow for two completions:
// one: sourceCompleter to LazyType, two: LazyType to completed type
- if (cnt == 3) throw new Error("no progress in completing " + this + ":" + tp)
+ if (cnt == 3) abort("no progress in completing " + this + ":" + tp)
}
val result = rawInfo
result
@@ -882,7 +882,7 @@ trait Symbols extends reflect.generic.Symbols { self: SymbolTable =>
* Not applicable for term symbols.
*/
def typeConstructor: Type =
- throw new Error("typeConstructor inapplicable for " + this)
+ abort("typeConstructor inapplicable for " + this)
/** @M -- tpe vs tpeHK:
* Symbol::tpe creates a TypeRef that has dummy type arguments to get a type of kind *
@@ -963,7 +963,7 @@ trait Symbols extends reflect.generic.Symbols { self: SymbolTable =>
else if (this.isTerm)
TypeBounds(NothingClass.tpe, intersectionType(List(this.tpe, SingletonClass.tpe)))
else
- throw new Error("unexpected alias type: "+this)
+ abort("unexpected alias type: "+this)
/** Reset symbol to initial state
*/
@@ -1421,7 +1421,7 @@ trait Symbols extends reflect.generic.Symbols { self: SymbolTable =>
(if (isModule) moduleClass else toplevelClass).sourceFile
def sourceFile_=(f: AbstractFile) {
- throw new Error("sourceFile_= inapplicable for " + this)
+ abort("sourceFile_= inapplicable for " + this)
}
def isFromClassFile: Boolean =
@@ -2000,7 +2000,7 @@ trait Symbols extends reflect.generic.Symbols { self: SymbolTable =>
override def enclClass: Symbol = this
override def toplevelClass: Symbol = this
override def enclMethod: Symbol = this
- override def owner: Symbol = throw new Error("no-symbol does not have owner")
+ override def owner: Symbol = abort("no-symbol does not have owner")
override def sourceFile: AbstractFile = null
override def ownerChain: List[Symbol] = List()
override def ownersIterator: Iterator[Symbol] = Iterator.empty
@@ -2010,7 +2010,7 @@ trait Symbols extends reflect.generic.Symbols { self: SymbolTable =>
override def rawInfo: Type = NoType
protected def doCookJavaRawInfo() {}
override def accessBoundary(base: Symbol): Symbol = RootClass
- def cloneSymbolImpl(owner: Symbol): Symbol = throw new Error()
+ def cloneSymbolImpl(owner: Symbol): Symbol = abort()
}
diff --git a/src/compiler/scala/tools/nsc/symtab/Types.scala b/src/compiler/scala/tools/nsc/symtab/Types.scala
index 10bebc40f8..855e6951d0 100644
--- a/src/compiler/scala/tools/nsc/symtab/Types.scala
+++ b/src/compiler/scala/tools/nsc/symtab/Types.scala
@@ -13,6 +13,7 @@ import ast.TreeGen
import util.{HashSet, Position, NoPosition}
import util.Statistics._
import Flags._
+import scala.util.control.ControlThrowable
/* A standard type pattern match:
case ErrorType =>
@@ -709,7 +710,7 @@ trait Types extends reflect.generic.Types { self: SymbolTable =>
if (sym == btssym) return mid
else if (sym isLess btssym) hi = mid - 1
else if (btssym isLess sym) lo = mid + 1
- else throw new Error()
+ else abort()
}
-1
}
@@ -2531,7 +2532,7 @@ A type's typeSymbol should never be inspected directly.
case tv@TypeVar(_, constr) => tv.applyArgs(args)
case ErrorType => tycon
case WildcardType => tycon // needed for neg/t0226
- case _ => throw new Error(debugString(tycon))
+ case _ => abort(debugString(tycon))
}
/** A creator for type parameterizations
@@ -3128,9 +3129,7 @@ A type's typeSymbol should never be inspected directly.
if ((pre eq NoType) || (pre eq NoPrefix) || !clazz.isClass) mapOver(tp)
//@M! see test pos/tcpoly_return_overriding.scala why mapOver is necessary
else {
- def throwError : Nothing = throw new Error(
- "" + tp + sym.locationString + " cannot be instantiated from " + pre.widen
- )
+ def throwError = abort("" + tp + sym.locationString + " cannot be instantiated from " + pre.widen)
def instParam(ps: List[Symbol], as: List[Type]): Type =
if (ps.isEmpty) throwError
@@ -3547,9 +3546,9 @@ A type's typeSymbol should never be inspected directly.
}
}
- class MissingAliasException extends Exception
- val missingAliasException = new MissingAliasException
- class MissingTypeException extends Exception
+ class MissingAliasControl extends ControlThrowable
+ val missingAliasException = new MissingAliasControl
+ class MissingTypeControl extends ControlThrowable
object adaptToNewRunMap extends TypeMap {
private def adaptToNewRun(pre: Type, sym: Symbol): Symbol = {
@@ -3561,7 +3560,7 @@ A type's typeSymbol should never be inspected directly.
var rebind0 = pre.findMember(sym.name, BRIDGE, 0, true)
if (rebind0 == NoSymbol) {
if (sym.isAliasType) throw missingAliasException
- throw new MissingTypeException // For build manager purposes
+ throw new MissingTypeControl // For build manager purposes
//assert(false, pre+"."+sym+" does no longer exist, phase = "+phase)
}
/** The two symbols have the same fully qualified name */
@@ -3606,9 +3605,9 @@ A type's typeSymbol should never be inspected directly.
if ((pre1 eq pre) && (sym1 eq sym) && (args1 eq args)/* && sym.isExternal*/) tp
else typeRef(pre1, sym1, args1)
} catch {
- case ex: MissingAliasException =>
+ case ex: MissingAliasControl =>
apply(tp.dealias)
- case _: MissingTypeException =>
+ case _: MissingTypeControl =>
NoType
}
}
@@ -4742,7 +4741,7 @@ A type's typeSymbol should never be inspected directly.
res
case TypeVar(_, constr) =>
if (constr.instValid) constr.inst
- else throw new Error("trying to do lub/glb of typevar "+tp)
+ else abort("trying to do lub/glb of typevar "+tp)
case t => t
}
val strippedTypes = ts mapConserve (stripType)
@@ -5119,15 +5118,15 @@ A type's typeSymbol should never be inspected directly.
// Errors and Diagnostics -----------------------------------------------------
- /** An exception signalling a type error */
- class TypeError(var pos: Position, val msg: String) extends java.lang.Error(msg) {
+ /** A throwable signalling a type error */
+ class TypeError(var pos: Position, val msg: String) extends Throwable(msg) with ControlThrowable {
def this(msg: String) = this(NoPosition, msg)
}
- class NoCommonType(tps: List[Type]) extends java.lang.Error(
- "lub/glb of incompatible types: " + tps.mkString("", " and ", ""))
+ class NoCommonType(tps: List[Type]) extends Throwable(
+ "lub/glb of incompatible types: " + tps.mkString("", " and ", "")) with ControlThrowable
- /** An exception signalling a malformed type */
+ /** A throwable signalling a malformed type */
class MalformedType(msg: String) extends TypeError(msg) {
def this(pre: Type, tp: String) = this("malformed type: " + pre + "#" + tp)
}
diff --git a/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala b/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala
index 745761a065..edf81a97ad 100644
--- a/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala
+++ b/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala
@@ -95,7 +95,8 @@ abstract class ClassfileParser {
parseHeader
this.pool = new ConstantPool
parseClass()
- } catch {
+ }
+ catch {
case e: MissingRequirementError => handleMissing(e)
case e: RuntimeException => handleError(e)
}
diff --git a/src/compiler/scala/tools/nsc/symtab/clr/TypeParser.scala b/src/compiler/scala/tools/nsc/symtab/clr/TypeParser.scala
index a1a4545894..92ff741b20 100644
--- a/src/compiler/scala/tools/nsc/symtab/clr/TypeParser.scala
+++ b/src/compiler/scala/tools/nsc/symtab/clr/TypeParser.scala
@@ -42,7 +42,7 @@ abstract class TypeParser {
def parse(typ: MSILType, root: Symbol) {
- def handleError(e: Exception) = {
+ def handleError(e: Throwable) = {
if (settings.debug.value) e.printStackTrace() //debug
throw new IOException("type '" + typ.FullName + "' is broken\n(" + e.getMessage() + ")")
}
diff --git a/src/compiler/scala/tools/nsc/transform/AddInterfaces.scala b/src/compiler/scala/tools/nsc/transform/AddInterfaces.scala
index 956db2767e..f55afdb2b0 100644
--- a/src/compiler/scala/tools/nsc/transform/AddInterfaces.scala
+++ b/src/compiler/scala/tools/nsc/transform/AddInterfaces.scala
@@ -243,7 +243,7 @@ abstract class AddInterfaces extends InfoTransform {
tree.symbol = implMethod
new ChangeOwnerAndReturnTraverser(ifaceMethod, implMethod)(tree)
case None =>
- throw new Error("implMethod missing for " + ifaceMethod)
+ abort("implMethod missing for " + ifaceMethod)
}
private def implMemberDef(tree: Tree): Tree =
diff --git a/src/compiler/scala/tools/nsc/transform/Erasure.scala b/src/compiler/scala/tools/nsc/transform/Erasure.scala
index 79bc6bbba5..f37b809744 100644
--- a/src/compiler/scala/tools/nsc/transform/Erasure.scala
+++ b/src/compiler/scala/tools/nsc/transform/Erasure.scala
@@ -10,6 +10,7 @@ package transform
import scala.tools.nsc.symtab.classfile.ClassfileConstants._
import scala.collection.mutable.{HashMap,ListBuffer}
import scala.collection.immutable.Set
+import scala.util.control.ControlThrowable
import symtab._
import Flags._
@@ -633,7 +634,7 @@ abstract class Erasure extends AddInterfaces with typechecker.Analyzer with ast.
Console.println("exception when typing " + tree)
Console.println(er.msg + " in file " + context.owner.sourceFile)
er.printStackTrace
- throw new Error
+ abort()
}
def adaptCase(cdef: CaseDef): CaseDef = {
val body1 = adaptToType(cdef.body, tree1.tpe)
@@ -1036,18 +1037,13 @@ abstract class Erasure extends AddInterfaces with typechecker.Analyzer with ast.
tpt.tpe = erasure(tree.symbol.tpe).resultType
result
case _ =>
- case class MyError(count : Int, ex : AssertionError) extends Error(ex.getMessage)
- try {
- super.transform(tree1) setType null
- } catch {
- case e @ MyError(n, ex) if n > 5 => throw e
- case MyError(n,ex) =>
+ case class LoopControl(count: Int, ex : AssertionError) extends Throwable(ex.getMessage) with ControlThrowable
+
+ try super.transform(tree1) setType null
+ catch {
+ case LoopControl(n, ex) if n <= 5 =>
Console.println(tree1)
- throw MyError(n + 1, ex)
-// case ex : AssertionError =>
-// Console.println(tree1)
-// throw MyError(0, ex)
-// case ex => throw ex
+ throw LoopControl(n + 1, ex)
}
}
}
diff --git a/src/compiler/scala/tools/nsc/transform/LiftCode.scala b/src/compiler/scala/tools/nsc/transform/LiftCode.scala
index 574ec23cdb..951fa53041 100644
--- a/src/compiler/scala/tools/nsc/transform/LiftCode.scala
+++ b/src/compiler/scala/tools/nsc/transform/LiftCode.scala
@@ -79,7 +79,7 @@ abstract class LiftCode extends Transform with Reifiers {
gen.mkAttributedRef(definitions.getModule(name))
else {
val name = className(c)
- if (name.length() == 0) throw new Error("don't know how to inject " + value)
+ if (name.length() == 0) abort("don't know how to inject " + value)
val injectedArgs = new ListBuffer[Tree]
for (i <- 0 until c.productArity)
injectedArgs += inject(c.productElement(i))
@@ -103,7 +103,7 @@ abstract class LiftCode extends Transform with Reifiers {
case null =>
gen.mkAttributedRef(definitions.getModule("scala.reflect.NoType"))
case _ =>
- throw new Error("don't know how to inject " + value)
+ abort("don't know how to inject " + value)
}
}
} // Injector
diff --git a/src/compiler/scala/tools/nsc/transform/UnCurry.scala b/src/compiler/scala/tools/nsc/transform/UnCurry.scala
index c9c7548e6d..c22eae60c5 100644
--- a/src/compiler/scala/tools/nsc/transform/UnCurry.scala
+++ b/src/compiler/scala/tools/nsc/transform/UnCurry.scala
@@ -196,7 +196,7 @@ abstract class UnCurry extends InfoTransform with TypingTransformers {
/** The type of a non-local return expression with given argument type */
private def nonLocalReturnExceptionType(argtype: Type) =
- appliedType(NonLocalReturnExceptionClass.typeConstructor, List(argtype))
+ appliedType(NonLocalReturnControlClass.typeConstructor, List(argtype))
/** A hashmap from method symbols to non-local return keys */
private val nonLocalReturnKeys = new HashMap[Symbol, Symbol]
@@ -214,7 +214,7 @@ abstract class UnCurry extends InfoTransform with TypingTransformers {
/** Generate a non-local return throw with given return expression from given method.
* I.e. for the method's non-local return key, generate:
*
- * throw new NonLocalReturnException(key, expr)
+ * throw new NonLocalReturnControl(key, expr)
* todo: maybe clone a pre-existing exception instead?
* (but what to do about excaptions that miss their targets?)
*/
@@ -233,7 +233,7 @@ abstract class UnCurry extends InfoTransform with TypingTransformers {
* try {
* body
* } catch {
- * case ex: NonLocalReturnException[_] =>
+ * case ex: NonLocalReturnControl[_] =>
* if (ex.key().eq(key)) ex.value()
* else throw ex
* }
@@ -245,7 +245,7 @@ abstract class UnCurry extends InfoTransform with TypingTransformers {
val ex = meth.newValue(body.pos, nme.ex) setInfo extpe
val pat = Bind(ex,
Typed(Ident(nme.WILDCARD),
- AppliedTypeTree(Ident(NonLocalReturnExceptionClass),
+ AppliedTypeTree(Ident(NonLocalReturnControlClass),
List(Bind(nme.WILDCARD.toTypeName,
EmptyTree)))))
val rhs =
diff --git a/src/compiler/scala/tools/nsc/typechecker/Contexts.scala b/src/compiler/scala/tools/nsc/typechecker/Contexts.scala
index 7ca4dcf885..614879b137 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Contexts.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Contexts.scala
@@ -263,7 +263,7 @@ trait Contexts { self: Analyzer =>
if (diagnostic.isEmpty) ""
else diagnostic.mkString("\n","\n", "")
- def error(pos: Position, err: Error) {
+ def error(pos: Position, err: Throwable) {
val msg = err.getMessage() + diagString
if (reportGeneralErrors)
unit.error(pos, if (checking) "**** ERROR DURING INTERNAL CHECKING ****\n" + msg else msg)
diff --git a/src/compiler/scala/tools/nsc/typechecker/DeVirtualize.scala b/src/compiler/scala/tools/nsc/typechecker/DeVirtualize.scala
index 8a5df0f610..71078ca564 100644
--- a/src/compiler/scala/tools/nsc/typechecker/DeVirtualize.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/DeVirtualize.scala
@@ -297,7 +297,7 @@ abstract class DeVirtualize extends InfoTransform with TypingTransformers {
private def copyType(tpe: Type): Type = tpe match {
case MethodType(formals, restpe) => MethodType(formals, copyType(restpe))
case PolyType(List(), restpe) => PolyType(List(), copyType(restpe))
- case PolyType(_, _) => throw new Error("bad case: "+tpe)
+ case PolyType(_, _) => abort("bad case: "+tpe)
case _ => owner.thisType.memberType(abstractType(clazz))
}
def getInfo = copyType(clazz.primaryConstructor.tpe)
diff --git a/src/compiler/scala/tools/nsc/typechecker/Infer.scala b/src/compiler/scala/tools/nsc/typechecker/Infer.scala
index 3738e9a5ec..e773dedba3 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Infer.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Infer.scala
@@ -8,7 +8,7 @@ package scala.tools.nsc
package typechecker
import scala.collection.mutable.ListBuffer
-import scala.util.control.ControlException
+import scala.util.control.ControlThrowable
import symtab.Flags._
/** This trait ...
@@ -79,7 +79,7 @@ trait Infer {
// error when built with scalac
/*private*/
- class NoInstance(msg: String) extends RuntimeException(msg) with ControlException
+ class NoInstance(msg: String) extends Throwable(msg) with ControlThrowable
/*private*/
class DeferredNoInstance(getmsg: () => String) extends NoInstance("") {
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index f557cf7b10..a41dcc24f7 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -12,7 +12,7 @@ package scala.tools.nsc
package typechecker
import scala.collection.mutable.{HashMap, ListBuffer}
-import scala.util.control.ControlException
+import scala.util.control.ControlThrowable
import scala.tools.nsc.interactive.RangePositions
import scala.tools.nsc.util.{Set, SourceFile, BatchSourceFile}
import symtab.Flags._
@@ -4082,7 +4082,7 @@ trait Typers { self: Analyzer =>
assert(onlyPresentation) // should not happen in normal circumstances.
tree setType tree.symbol.tpe
case _ =>
- throw new Error("unexpected tree: " + tree.getClass + "\n" + tree)//debug
+ abort("unexpected tree: " + tree.getClass + "\n" + tree)//debug
}
}
@@ -4133,7 +4133,6 @@ trait Typers { self: Analyzer =>
if (phase.id <= currentRun.typerPhase.id) signalDone(context.asInstanceOf[analyzer.Context], tree, result)
result
} catch {
- case ex: ControlException => throw ex
case ex: TypeError =>
tree.tpe = null
if (printTypings) println("caught "+ex+" in typed: "+tree);//DEBUG
@@ -4145,13 +4144,9 @@ trait Typers { self: Analyzer =>
if ((context ne null) && (context.unit ne null) &&
(context.unit.source ne null) && (tree ne null))
logError("AT: " + (tree.pos).dbgString, ex);
- throw(ex)
-/*
- case ex: java.lang.Error =>
- Console.println("exception when typing "+tree+", pt = "+pt)
throw ex
-*/ //debug
- } finally {
+ }
+ finally {
if (Statistics.enabled) {
val t = currentTime()
microsByType(pendingTreeTypes.head) += ((t - typerTime) / 1000).toInt
diff --git a/src/compiler/scala/tools/nsc/util/CommandLineParser.scala b/src/compiler/scala/tools/nsc/util/CommandLineParser.scala
index c3c99b1e1f..680c2130d7 100644
--- a/src/compiler/scala/tools/nsc/util/CommandLineParser.scala
+++ b/src/compiler/scala/tools/nsc/util/CommandLineParser.scala
@@ -100,9 +100,9 @@ object CommandLineParser extends RegexParsers with ParserUtil {
lazy val argument: Parser[String] = squoted | dquoted | token
lazy val commandLine: Parser[List[String]] = phrase(repsep(argument, whiteSpace))
- class ParseError(msg: String) extends RuntimeException(msg)
+ class ParseException(msg: String) extends RuntimeException(msg)
- def tokenize(line: String): List[String] = tokenize(line, x => throw new ParseError(x))
+ def tokenize(line: String): List[String] = tokenize(line, x => throw new ParseException(x))
def tokenize(line: String, errorFn: String => Unit): List[String] = {
parse(commandLine, line.trim) match {
case Success(args, _) => args
diff --git a/src/compiler/scala/tools/nsc/util/WorkScheduler.scala b/src/compiler/scala/tools/nsc/util/WorkScheduler.scala
index b4ecbf8a71..e309b19b76 100644
--- a/src/compiler/scala/tools/nsc/util/WorkScheduler.scala
+++ b/src/compiler/scala/tools/nsc/util/WorkScheduler.scala
@@ -8,7 +8,7 @@ class WorkScheduler {
type Action = () => Unit
private var todo = new Queue[Action]
- private var except = new Queue[Exception]
+ private var throwables = new Queue[Throwable]
/** Called from server: block until todo list is nonempty */
def waitForMoreWork() = synchronized {
@@ -30,12 +30,12 @@ class WorkScheduler {
/** Called from server: return optional exception posted by client
* Reset to no exception.
*/
- def pollException(): Option[Exception] = synchronized {
- if (except.isEmpty)
+ def pollThrowable(): Option[Throwable] = synchronized {
+ if (throwables.isEmpty)
None
else {
- val result = Some(except.dequeue())
- if (!except.isEmpty)
+ val result = Some(throwables.dequeue())
+ if (!throwables.isEmpty)
postWorkItem { () => }
result
}
@@ -55,8 +55,8 @@ class WorkScheduler {
/** Called from client:
* Require an exception to be thrown on next poll.
*/
- def raise(exc: Exception) = synchronized {
- except enqueue exc
+ def raise(exc: Throwable) = synchronized {
+ throwables enqueue exc
postWorkItem { () => }
}
}