diff options
author | Paul Phillips <paulp@improving.org> | 2012-05-09 15:13:09 -0700 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2012-05-09 16:07:35 -0700 |
commit | 09f380dbda56abdfbdda0cab51bc7187eb70b516 (patch) | |
tree | 91058c6990817313b9e25503af0b36f4ad5efbda | |
parent | 1cd498f9091504b42030d4b81c6f659bc386115f (diff) | |
download | scala-09f380dbda56abdfbdda0cab51bc7187eb70b516.tar.gz scala-09f380dbda56abdfbdda0cab51bc7187eb70b516.tar.bz2 scala-09f380dbda56abdfbdda0cab51bc7187eb70b516.zip |
Fix an inference regression with this.type.
Closes SI-5210.
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Namers.scala | 4 | ||||
-rw-r--r-- | test/files/pos/t5210.scala | 10 | ||||
-rw-r--r-- | test/pending/pos/z1720.scala | 16 |
3 files changed, 28 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala index 063db4bb88..ca4b1d3de8 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala @@ -787,8 +787,8 @@ trait Namers extends MethodSynthesis { val typedBody = if (tree.symbol.isTermMacro) defnTyper.computeMacroDefType(tree, pt) else defnTyper.computeType(tree.rhs, pt) - val sym = if (owner.isMethod) owner else tree.symbol - val typedDefn = widenIfNecessary(sym, typedBody, pt) + + val typedDefn = widenIfNecessary(tree.symbol, typedBody, pt) assignTypeToTree(tree, typedDefn) } diff --git a/test/files/pos/t5210.scala b/test/files/pos/t5210.scala new file mode 100644 index 0000000000..e85037a902 --- /dev/null +++ b/test/files/pos/t5210.scala @@ -0,0 +1,10 @@ +object WithOpTest { + trait WithOp extends Cloneable { + def f: this.type = this + def g1: this.type = f + def g2: this.type = { + val t = f + t + } + } +} diff --git a/test/pending/pos/z1720.scala b/test/pending/pos/z1720.scala new file mode 100644 index 0000000000..6050f3ff88 --- /dev/null +++ b/test/pending/pos/z1720.scala @@ -0,0 +1,16 @@ +package test + +class Thing { + def info: Info[this.type] = InfoRepository.getInfo(this) + def info2: Info[this.type] = { + def self: this.type = this + InfoRepository.getInfo(self) + } +} + +trait Info[T] +case class InfoImpl[T](thing: T) extends Info[T] + +object InfoRepository { + def getInfo(t: Thing): Info[t.type] = InfoImpl(t) +}
\ No newline at end of file |