summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Typers.scala
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@epfl.ch>2012-06-03 21:41:23 +0200
committerAdriaan Moors <adriaan.moors@epfl.ch>2012-06-03 21:41:23 +0200
commit08b7399ef4a2e01ef20259ab04512e0e20f2b04b (patch)
treef0b6a44c54b799f746af9f97260c2c6cff606013 /src/compiler/scala/tools/nsc/typechecker/Typers.scala
parent8aa1d1cd210bb205e25f7618f038d646a2788fa1 (diff)
downloadscala-08b7399ef4a2e01ef20259ab04512e0e20f2b04b.tar.gz
scala-08b7399ef4a2e01ef20259ab04512e0e20f2b04b.tar.bz2
scala-08b7399ef4a2e01ef20259ab04512e0e20f2b04b.zip
Revert "#653 -- no lub for statement exprs' types"
I should not have merged this pull request yet. I didn't notice we didn't have a full successful run of the test suite. It looks like it breaks test/files/continuations-neg/lazy.scala and given the pending amount of changes, I prefer to have a stable master. This reverts commit 037d3dcbc5896864aec0f9121eeda23fcc4cd610.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Typers.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala13
1 files changed, 5 insertions, 8 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index f6d5f84107..b0f6e44e88 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -1127,11 +1127,9 @@ trait Typers extends Modes with Adaptations with Taggings {
if (inExprModeButNot(mode, FUNmode)) {
pt.normalize match {
case TypeRef(_, sym, _) =>
- // note: there was an additional '&& tree.tpe <:< AnyClass.tpe', claiming that
- // it would save us from a potentially infinite expansion if pt is constant type ()
- // didn't seem to do any good, and the test would miss the fact that Object.tpe <:< AnyClass.tpe
- // after erasure (triggered by try-catches added by cleanup for structural types)
- if (sym == UnitClass) { // (12)
+ // note: was if (pt.typeSymbol == UnitClass) but this leads to a potentially
+ // infinite expansion if pt is constant type ()
+ if (sym == UnitClass && tree.tpe <:< AnyClass.tpe) { // (12)
if (settings.warnValueDiscard.value)
context.unit.warning(tree.pos, "discarded non-Unit value")
return typed(atPos(tree.pos)(Block(List(tree), Literal(Constant()))), mode, pt)
@@ -2568,7 +2566,7 @@ trait Typers extends Modes with Adaptations with Taggings {
} else newTyper(context.make(stat, exprOwner))
// XXX this creates a spurious dead code warning if an exception is thrown
// in a constructor, even if it is the only thing in the constructor.
- val result = checkDead(localTyper.typed(stat, EXPRmode | BYVALmode | STATmode, WildcardType))
+ val result = checkDead(localTyper.typed(stat, EXPRmode | BYVALmode, WildcardType))
if (treeInfo.isSelfOrSuperConstrCall(result)) {
context.inConstructorSuffix = true
@@ -3863,7 +3861,6 @@ trait Typers extends Modes with Adaptations with Taggings {
&& thenTp =:= elseTp
) (thenp1.tpe, false) // use unpacked type
// TODO: skolemize (lub of packed types) when that no longer crashes on files/pos/t4070b.scala
- else if ((mode & STATmode) != 0) (definitions.UnitClass.tpe, true)
else ptOrLub(List(thenp1.tpe, elsep1.tpe), pt)
if (needAdapt) { //isNumericValueType(owntype)) {
@@ -4747,7 +4744,7 @@ trait Typers extends Modes with Adaptations with Taggings {
var catches1 = typedCases(catches, ThrowableClass.tpe, pt)
val finalizer1 = if (finalizer.isEmpty) finalizer
else typed(finalizer, UnitClass.tpe)
- val (owntype, needAdapt) = if ((mode & STATmode) != 0) (definitions.UnitClass.tpe, true) else ptOrLub(block1.tpe :: (catches1 map (_.tpe)), pt)
+ val (owntype, needAdapt) = ptOrLub(block1.tpe :: (catches1 map (_.tpe)), pt)
if (needAdapt) {
block1 = adapt(block1, mode, owntype)
catches1 = catches1 map (adaptCase(_, mode, owntype))