diff options
author | Martin Odersky <odersky@gmail.com> | 2016-11-10 11:20:42 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2016-12-01 13:55:12 +0100 |
commit | 4ae76f2164e91d6a26519304b5ac5df527ae9207 (patch) | |
tree | 30c3ae034f21d29c31930b8080d207e7130b84d4 /compiler/src/dotty/tools/dotc/core/Phases.scala | |
parent | 36f9133ff52c39660cd9fef37140f2f14531d678 (diff) | |
download | dotty-4ae76f2164e91d6a26519304b5ac5df527ae9207.tar.gz dotty-4ae76f2164e91d6a26519304b5ac5df527ae9207.tar.bz2 dotty-4ae76f2164e91d6a26519304b5ac5df527ae9207.zip |
Make phasesStack more robust
Got a "next on empty iterator" exception before.
Diffstat (limited to 'compiler/src/dotty/tools/dotc/core/Phases.scala')
-rw-r--r-- | compiler/src/dotty/tools/dotc/core/Phases.scala | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/compiler/src/dotty/tools/dotc/core/Phases.scala b/compiler/src/dotty/tools/dotc/core/Phases.scala index 222e2235d..6a53e1b30 100644 --- a/compiler/src/dotty/tools/dotc/core/Phases.scala +++ b/compiler/src/dotty/tools/dotc/core/Phases.scala @@ -26,7 +26,10 @@ trait Phases { def phasesStack: List[Phase] = if ((this eq NoContext) || !phase.exists) Nil - else phase :: outersIterator.dropWhile(_.phase == phase).next.phasesStack + else { + val rest = outersIterator.dropWhile(_.phase == phase) + phase :: (if (rest.hasNext) rest.next.phasesStack else Nil) + } /** Execute `op` at given phase */ def atPhase[T](phase: Phase)(op: Context => T): T = |