[#247] | project: compiler | priority: low | category: missing feature | |
---|---|---|---|---|
submitter | assigned to | status | date submitted | |
Erik | Martin | fixed | 2003-12-03 16:41:20.0 | |
subject | Secondary constructors | |||
code |
class Order[t](less:(t,t) => Boolean,equal:(t,t) => Boolean) {} trait Map[A, B](factory:MapFactory[A]) with scala.collection.Map[A, B] {} abstract class MapFactory[A] { def Empty[B]:Map[A,B]; } class TreeMapFactory[KEY](newOrder:Order[KEY]) with MapFactory[KEY] { val order = newOrder; def Empty[V] = new TreeMap[KEY,V](new TreeMapFactory[KEY](order)); } class Tree[KEY,Entry](order:Order[KEY]) { def size =0; } class TreeMap[KEY,VALUE](factory:TreeMapFactory[KEY]) extends Tree[KEY,Pair[KEY,VALUE]](factory.order) with Map[KEY, VALUE](factory) { val order = factory.order; def this(newOrder:Order[KEY]) = this(new TreeMapFactory[KEY](newOrder)); def get(key:KEY) = null; def elements:Iterator[Pair[KEY,VALUE]] = null; } |
|||
what happened | scalac -d ~/tmp/classes ~/tmp/Test.scala Exception in thread "main" java.lang.AssertionError: type KEY in constructor TreeMap at scalac.transformer.LambdaLift$FreeVars.markFree(LambdaLift.java:178) at scalac.transformer.LambdaLift$FreeVars.markFree(LambdaLift.java:182) at scalac.transformer.LambdaLift$FreeVars.markFree(LambdaLift.java:182) at scalac.transformer.LambdaLift$FreeVars.access$116(LambdaLift.java:109) at scalac.transformer.LambdaLift$FreeVars$16.apply(LambdaLift.java:210) at scalac.symtab.Type$Map.map(Type.java:1078) at scalac.symtab.Type$Map.map(Type.java:989) at scalac.transformer.LambdaLift$FreeVars$16.apply(LambdaLift.java:220) at scalac.transformer.LambdaLift$FreeVars.transform(LambdaLift.java:227) at scalac.transformer.OwnerTransformer.transform(OwnerTransformer.java:125) at scalac.transformer.LambdaLift$FreeVars.transform(LambdaLift.java:268) at scalac.ast.Transformer.transform(Transformer.java:291) at scalac.ast.Transformer.transform(Transformer.java:305) at scalac.transformer.OwnerTransformer.transform(OwnerTransformer.java:57) at scalac.transformer.OwnerTransformer.transform(OwnerTransformer.java:116) at scalac.transformer.LambdaLift$FreeVars.transform(LambdaLift.java:235) at scalac.transformer.OwnerTransformer.transform(OwnerTransformer.java:41) at scalac.transformer.OwnerTransformer.transformTemplateStat(OwnerTransformer.java:87) at scalac.transformer.OwnerTransformer.transformTemplateStats(OwnerTransformer.java:76) at scalac.transformer.OwnerTransformer.transform(OwnerTransformer.java:68) at scalac.transformer.OwnerTransformer.transform(OwnerTransformer.java:100) at scalac.transformer.LambdaLift$FreeVars.transform(LambdaLift.java:235) at scalac.ast.Transformer.transform(Transformer.java:282) at scalac.transformer.OwnerTransformer.apply(OwnerTransformer.java:35) at scalac.transformer.LambdaLift$FreeVars.initialize(LambdaLift.java:315) at scalac.transformer.LambdaLift.apply(LambdaLift.java:54) at scalac.transformer.LambdaLiftPhase.apply(LambdaLiftPhase.java:28) at scalac.Global.compile(Global.java:300) at scalac.Global.compile(Global.java:272) at scala.tools.scalac.Main$.main(sources/scala/tools/scalac/Main.scala:33) at scala.tools.scalac.Main.main(sources/scala/tools/scalac/Main.scala) |
|||
what expected | Not a compiler crash. | |||
[back to overview] |
Erik edited on 2003-12-03 16:41:52.0 |
Michel edited on 2003-12-03 16:56:09.0 |
The problem is due to the secondary constructor of class TreeMap , and is the general problem discussed once during some meeting related to secondary constructors and type arguments.
|
Martin edited on 2004-01-08 15:40:29.0 |
I cathc this case now with a message `secondary constructors for parameterized classes not yet implemented'. We need to come back to this later. |
Martin edited on 2006-03-30 19:00:00.0 |
Fixed in version 2 |