| [#729] | project: compiler | priority: low | category: bug | |
|---|---|---|---|---|
| submitter | assigned to | status | date submitted | |
| Sean | Martin | fixed | 2006-09-05 10:45:19.0 | |
| subject | confusing error message and implicit view lookup confusion | |||
| code |
trait Parser {
type Node <: NodeImpl;
implicit def coerce(n : NodeImpl) = n.self;
trait NodeImpl {
def self : Node;
}
trait Link {
def from : NodeImpl;
}
}
trait ScalaParserAutoEdit extends Parser {
type Node <: NodeImpl;
implicit def coerce(node : NodeImpl) = node.self;
trait NodeImpl extends super[Parser].NodeImpl {
def self : Node;
def foo = {
var link : Link = null;
val xxx : NodeImpl = coerce(link.from);
val yyy : NodeImpl = link.from;
}
}
} |
|||
| what happened | On last line (assign to yyy), Parser.coerce is not used to convert link.from into a NodeImpl:type mismatch; found : ScalaParserAutoEdit.this.NodeImpl required: ScalaParserAutoEdit.this.NodeImplOn second last line (assign to xxx), explicit call to coerce can perform the conversion. Confusion: I thought im\ plicit view parameter types, not just their names, were considered on lookup so that overloaded views were diffe\ rent. It seems like this is not the case. |
|||
| what expected | At least a better error message. At best an alternative to manual name mangling of view names to accommodate different types. | |||
| [back to overview] | ||||
| Martin edited on 2006-10-31 11:32:18.0 |
You now get:
bug729.scala:20 error: type mismatch;
found : ScalaParserAutoEdit.this.NodeImpl(in trait Parser)
required: ScalaParserAutoEdit.this.NodeImpl(in trait ScalaParserAutoEdit)
val yyy : NodeImpl = link.from;
^
one error found
|