diff options
author | Martin Odersky <odersky@gmail.com> | 2015-08-14 18:57:34 -0700 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2015-08-15 13:55:31 -0700 |
commit | edaa193aac1d7880a81cd6a836fe3d7c3d652d45 (patch) | |
tree | 562dd22cbddd781f148a97d74a967fe640b6666e /src/dotty/tools/dotc/core/Definitions.scala | |
parent | b30843c59757ccaaf00c6733bf81f15eb911e6c2 (diff) | |
download | dotty-edaa193aac1d7880a81cd6a836fe3d7c3d652d45.tar.gz dotty-edaa193aac1d7880a81cd6a836fe3d7c3d652d45.tar.bz2 dotty-edaa193aac1d7880a81cd6a836fe3d7c3d652d45.zip |
Fix CaputuredVars/LiftTry interaction.
CapturedVars introduced an assignment that could cause a try to be
executed with a non-empty stack, even after LiftTry had already run.
We now avoid this by introducing a temporary variable.
Diffstat (limited to 'src/dotty/tools/dotc/core/Definitions.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/Definitions.scala | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/core/Definitions.scala b/src/dotty/tools/dotc/core/Definitions.scala index 502b42987..fcd9ef224 100644 --- a/src/dotty/tools/dotc/core/Definitions.scala +++ b/src/dotty/tools/dotc/core/Definitions.scala @@ -592,13 +592,16 @@ class Definitions { } /** The classes for which a Ref type exists. */ - lazy val refClasses: collection.Set[Symbol] = ScalaNumericValueClasses + BooleanClass + ObjectClass + lazy val refClassKeys: collection.Set[Symbol] = ScalaNumericValueClasses + BooleanClass + ObjectClass lazy val refClass: Map[Symbol, Symbol] = - refClasses.map(rc => rc -> ctx.requiredClass(s"scala.runtime.${rc.name}Ref")).toMap + refClassKeys.map(rc => rc -> ctx.requiredClass(s"scala.runtime.${rc.name}Ref")).toMap lazy val volatileRefClass: Map[Symbol, Symbol] = - refClasses.map(rc => rc -> ctx.requiredClass(s"scala.runtime.Volatile${rc.name}Ref")).toMap + refClassKeys.map(rc => rc -> ctx.requiredClass(s"scala.runtime.Volatile${rc.name}Ref")).toMap + + lazy val boxedRefClasses: collection.Set[Symbol] = + refClassKeys.flatMap(k => Set(refClass(k), volatileRefClass(k))) def wrapArrayMethodName(elemtp: Type): TermName = { val cls = elemtp.classSymbol |