Aladdin - Scala Bugtracking
[#839] project: compiler priority: low category: bug
submitter assigned to status date submitted
Sean Martin fixed 2006-11-26 16:49:44.0
subject Refined type lost through def with nested type.
code
// see pending/pos/bug112606A.scala
package test;
trait Test {
  trait Global {
    type Tree;
    def get : Tree;
  }
  trait TreeBuilder {
    val global : Global;
    def set(tree : global.Tree) = {}
  }
  val nsc : Global;
  trait FileImpl {
    object treeBuilder extends TreeBuilder {
      val global : nsc.type = nsc;
    }
    // OK
    treeBuilder.set(nsc.get);
  }
  val file0 : FileImpl;
  // OK
  file0.treeBuilder.set(nsc.get);
  def file : FileImpl;
  // type mismatch
  file.treeBuilder.set(nsc.get);
}
what happened
type mismatch;
found   : Test.this.nsc.Tree
required: scala.Nothing	test37/src/test	Test.scala	line 21	
Note that the first two treeBuilder.set calls compile without error (meaning the type is not erased through this\ or through a val of FileImpl). So obviously there is a bug somewhere.
what expected For all treeBuilder.set calls to either pass (preferably) or fail (will at least be consistent).
[back to overview]
Changes of this bug report
Martin  edited on  2006-12-01 16:08:55.0
The example is in error, but the error was masked. You now get:
bug839.scala:25 error: method set cannot be accessed in object Test.this.FileImpl#treeBuilder
 because its instance type (Test.this.FileImpl#treeBuilder#global.Tree)scala.Unit contains a malformed type: object Test.this.FileImpl#treeBuilder#global
  file.treeBuilder.set(nsc.get);
                  ^
one error found