| [#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 21Note 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] | ||||
| 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
|