bug
bug copied to clipboard
Implementation restriction on object nested in value class method
class M(val t: Int) extends AnyVal {
def lazyString = {
object X
() => X
}
}
error: no-symbol does not have an owner
while compiling: M.scala
during phase: global=explicitouter, atPhase=erasure
library version: version 2.10.0-20120906-172417-b7e08723d1
compiler version: version 2.10.0-20120906-172417-b7e08723d1
reconstructed args: -d out
last tree to typer: This(object X)
symbol: object X (flags: <module>)
symbol definition: class X extends Object
tpe: M.X.type
symbol owners: object X -> method lazyString -> class M -> package <empty>
context owners: object X -> method lazyString -> class M -> package <empty>
== Enclosing template or block ==
DefDef( // object X
<method> <module> <stable> <triedcooking> <latemethod>
"X"
[]
List(Nil)
<tpt> // tree.tpe=X.type
Block( // tree.tpe=X.type
Assign( // tree.tpe=Unit
"X$module" // var X$module: X.type, tree.tpe=X.type
Apply( // def <init>(arg$outer: M.this.type): X.type in object X, tree.tpe=X.type
new X.type."<init>" // def <init>(arg$outer: M.this.type): X.type in object X, tree.tpe=()X.type
Nil
)
)
"X$module" // var X$module: X.type, tree.tpe=X.type
)
)
== Expanded type of tree ==
ThisType(object X)
unhandled exception while transforming M.scala
error:
while compiling: M.scala
during phase: explicitouter
library version: version 2.10.0-20120906-172417-b7e08723d1
compiler version: version 2.10.0-20120906-172417-b7e08723d1
reconstructed args: -d out
last tree to typer: This(object X)
symbol: object X (flags: <module>)
symbol definition: class X extends Object
tpe: M.X.type
symbol owners: object X -> method lazyString -> class M -> package <empty>
context owners: object X -> method lazyString -> class M -> package <empty>
== Enclosing template or block ==
DefDef( // object X
<method> <module> <stable> <triedcooking> <latemethod>
"X"
[]
List(Nil)
<tpt> // tree.tpe=X.type
Block( // tree.tpe=X.type
Assign( // tree.tpe=Unit
"X$module" // var X$module: X.type, tree.tpe=X.type
Apply( // def <init>(): X.type in object X, tree.tpe=X.type
new X.type."<init>" // def <init>(): X.type in object X, tree.tpe=()X.type
Nil
)
)
"X$module" // var X$module: X.type, tree.tpe=X.type
)
)
== Expanded type of tree ==
ThisType(object X)
uncaught exception during compilation: scala.reflect.internal.FatalError
error: scala.reflect.internal.FatalError:
while compiling: M.scala
during phase: global=explicitouter, atPhase=erasure
library version: version 2.10.0-20120906-172417-b7e08723d1
compiler version: version 2.10.0-20120906-172417-b7e08723d1
reconstructed args: -d out
last tree to typer: This(object X)
symbol: object X (flags: <module>)
symbol definition: class X extends Object
tpe: M.X.type
symbol owners: object X -> method lazyString -> class M -> package <empty>
context owners: object X -> method lazyString -> class M -> package <empty>
== Enclosing template or block ==
DefDef( // object X
<method> <module> <stable> <triedcooking> <latemethod>
"X"
[]
List(Nil)
<tpt> // tree.tpe=X.type
Block( // tree.tpe=X.type
Assign( // tree.tpe=Unit
"X$module" // var X$module: X.type, tree.tpe=X.type
Apply( // def <init>(arg$outer: M.this.type): X.type in object X, tree.tpe=X.type
new X.type."<init>" // def <init>(arg$outer: M.this.type): X.type in object X, tree.tpe=()X.type
Nil
)
)
"X$module" // var X$module: X.type, tree.tpe=X.type
)
)
== Expanded type of tree ==
ThisType(object X)
no-symbol does not have an owner
at scala.reflect.internal.SymbolTable.abort(SymbolTable.scala:48)
at scala.tools.nsc.Global.abort(Global.scala:241)
at scala.reflect.internal.Symbols$NoSymbol.owner(Symbols.scala:3119)
at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.outerSelect(ExplicitOuter.scala:229)
at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.outerValue(ExplicitOuter.scala:215)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:497)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:333)
at scala.reflect.api.Trees$Transformer$$anonfun$transformTrees$1.apply(Trees.scala:659)
at scala.reflect.api.Trees$Transformer$$anonfun$transformTrees$1.apply(Trees.scala:659)
at scala.collection.immutable.List.loop$1(List.scala:164)
at scala.collection.immutable.List.mapConserve(List.scala:180)
at scala.reflect.api.Trees$Transformer.transformTrees(Trees.scala:659)
at scala.reflect.internal.Trees$class.itransform(Trees.scala:1160)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:656)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:48)
at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:272)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:524)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:333)
at scala.reflect.internal.Trees$class.itransform(Trees.scala:1199)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:656)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:48)
at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:272)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:560)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:333)
at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:677)
at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:675)
at scala.collection.immutable.List.loop$1(List.scala:164)
at scala.collection.immutable.List.mapConserve(List.scala:180)
at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:675)
at scala.reflect.internal.Trees$class.itransform(Trees.scala:1179)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:656)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:48)
at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:272)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:560)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:333)
at scala.reflect.internal.Trees$$anonfun$itransform$2.apply(Trees.scala:1176)
at scala.reflect.internal.Trees$$anonfun$itransform$2.apply(Trees.scala:1174)
at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:684)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:34)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:28)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:19)
at scala.reflect.internal.Trees$class.itransform(Trees.scala:1173)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:656)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:48)
at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:272)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:493)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:333)
at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:677)
at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:675)
at scala.collection.immutable.List.loop$1(List.scala:164)
at scala.collection.immutable.List.mapConserve(List.scala:180)
at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:675)
at scala.reflect.internal.Trees$class.itransform(Trees.scala:1179)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:656)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:48)
at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:272)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:560)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:333)
at scala.reflect.internal.Trees$$anonfun$itransform$2.apply(Trees.scala:1176)
at scala.reflect.internal.Trees$$anonfun$itransform$2.apply(Trees.scala:1174)
at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:684)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:34)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:28)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:19)
at scala.reflect.internal.Trees$class.itransform(Trees.scala:1173)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:656)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:48)
at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:272)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:493)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:333)
at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:677)
at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:675)
at scala.collection.immutable.List.loop$1(List.scala:164)
at scala.collection.immutable.List.mapConserve(List.scala:180)
at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:675)
at scala.reflect.internal.Trees$class.itransform(Trees.scala:1217)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:656)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.scala$tools$nsc$transform$TypingTransformers$TypingTransformer$$super$transform(TypingTransformers.scala:44)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$$anonfun$transform$1.apply(TypingTransformers.scala:44)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$$anonfun$transform$1.apply(TypingTransformers.scala:44)
at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:684)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:34)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:28)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44)
at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:272)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:471)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:333)
at scala.reflect.api.Trees$Transformer.transformTemplate(Trees.scala:661)
at scala.reflect.internal.Trees$$anonfun$itransform$4.apply(Trees.scala:1221)
at scala.reflect.internal.Trees$$anonfun$itransform$4.apply(Trees.scala:1220)
at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:684)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:34)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:28)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:19)
at scala.reflect.internal.Trees$class.itransform(Trees.scala:1219)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:656)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:48)
at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:272)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:560)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:333)
at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:677)
at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:675)
at scala.collection.immutable.List.loop$1(List.scala:164)
at scala.collection.immutable.List.mapConserve(List.scala:180)
at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:675)
at scala.reflect.internal.Trees$$anonfun$itransform$7.apply(Trees.scala:1239)
at scala.reflect.internal.Trees$$anonfun$itransform$7.apply(Trees.scala:1239)
at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:684)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:34)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:28)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:19)
at scala.reflect.internal.Trees$class.itransform(Trees.scala:1238)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:12)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:656)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.scala$tools$nsc$transform$TypingTransformers$TypingTransformer$$super$transform(TypingTransformers.scala:44)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$$anonfun$transform$2.apply(TypingTransformers.scala:46)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$$anonfun$transform$2.apply(TypingTransformers.scala:46)
at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:684)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:34)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:28)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:46)
at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:272)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:560)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:333)
at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:227)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.scala$tools$nsc$transform$ExplicitOuter$ExplicitOuterTransformer$$super$transformUnit(ExplicitOuter.scala:568)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer$$anonfun$transformUnit$1.apply$mcV$sp(ExplicitOuter.scala:568)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer$$anonfun$transformUnit$1.apply(ExplicitOuter.scala:568)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer$$anonfun$transformUnit$1.apply(ExplicitOuter.scala:568)
at scala.reflect.internal.SymbolTable.atPhase(SymbolTable.scala:199)
at scala.reflect.internal.SymbolTable.afterPhase(SymbolTable.scala:208)
at scala.tools.nsc.Global.afterExplicitOuter(Global.scala:1086)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transformUnit(ExplicitOuter.scala:568)
at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:30)
at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:450)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:417)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:417)
at scala.collection.Iterator$class.foreach(Iterator.scala:726)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1155)
at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:417)
at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1561)
at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1535)
at scala.tools.nsc.Global$Run.compileSources(Global.scala:1531)
at scala.tools.nsc.Global$Run.compile(Global.scala:1641)
at scala.tools.nsc.Driver.doCompile(Driver.scala:33)
at scala.tools.nsc.Main$.doCompile(Main.scala:79)
at scala.tools.nsc.Driver.process(Driver.scala:54)
at scala.tools.nsc.Driver.main(Driver.scala:67)
at scala.tools.nsc.Main.main(Main.scala)
error: fatal error:
while compiling: M.scala
during phase: global=explicitouter, atPhase=erasure
library version: version 2.10.0-20120906-172417-b7e08723d1
compiler version: version 2.10.0-20120906-172417-b7e08723d1
reconstructed args: -d out
last tree to typer: This(object X)
symbol: object X (flags: <module>)
symbol definition: class X extends Object
tpe: M.X.type
symbol owners: object X -> method lazyString -> class M -> package <empty>
context owners: object X -> method lazyString -> class M -> package <empty>
== Enclosing template or block ==
DefDef( // object X
<method> <module> <stable> <triedcooking> <latemethod>
"X"
[]
List(Nil)
<tpt> // tree.tpe=X.type
Block( // tree.tpe=X.type
Assign( // tree.tpe=Unit
"X$module" // var X$module: X.type, tree.tpe=X.type
Apply( // def <init>(arg$outer: M.this.type): X.type in object X, tree.tpe=X.type
new X.type."<init>" // def <init>(arg$outer: M.this.type): X.type in object X, tree.tpe=()X.type
Nil
)
)
"X$module" // var X$module: X.type, tree.tpe=X.type
)
)
== Expanded type of tree ==
ThisType(object X)
no-symbol does not have an owner
Imported From: https://issues.scala-lang.org/browse/SI-6359?orig=1 Reporter: @harrah Affected Versions: 2.10.0-M7 See #6358, #5882
@retronym said: https://github.com/scala/scala/pull/1300
@odersky said: I am going re-enable nested classes. It turns out the error is only linked to nested objects and my suspicion is it's because of the same problems that caused lazy vals to fail with value classes. So the test should pass. Reassigning to @hubertp. Test case in pending/pos/t6359.scala
@hubertp said: I am not sure if the fix for #6358 will help because the translation for nested objects is slightly different from lazy val accessors. I have already struggled enough with local lazy vals and imagine that nested objects will create more problems as they are more common. Anyway, we will see.
@retronym said:
-Yshow-syms is pretty revealing.
class M(val t: Int) extends AnyVal {
def lazyString = {
object X
class Y
() => {X; new Y}
}
}
[[symbol layout at end of typer]]
F class M#7016 [+final]
* method lazyString#7392
* class Y#12575
* constructor Y#12578
* value <local Y>#12579
* object X#12574
* constructor X#12576
* value <local X>#12577
* object X#12573
* value $anonfun#12580 (<synthetic>)
class M#7016 (final)
method lazyString#7392
object X#12574
constructor X#12576
value <local X>#12577
object M#7393 (<synthetic>)
object M#7394 (<synthetic>)
constructor M#13922
* method extension$lazyString#13933 (final)
O class Y#12575 [Owner was method lazyString#7392, now method extension$lazyString#13933]
constructor Y#12578
value <local Y>#12579
O object X#12573 [Owner was method lazyString#7392, now method extension$lazyString#13933]
O value $anonfun#12580 [Owner was method lazyString#7392, now method extension$lazyString#13933] (<synthetic>)
Here's the naive fix (same as I tried for the lazy vals).
https://github.com/retronym/scala/compare/ticket/6359-2
But like last time (https://issues.scala-lang.org/browse/SI-6358?focusedCommentId=60029&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-60029), it might only be skin deep.
@odersky said: If everything fails we need to disable lazy vals and objects in extension methods. But it would be exceeedingly ugly.
The root cause in both is that the generation of an extension method moves a tree from one context to another. It does this correctly, but if certain things are not in the tree they do not get the changes done and when they resurface in refchecks its too late.
Another, slightly less ugly patch would be to treat lazy val acessors and objects specially in the code that creates extension methods.
@paulp said: Since 5d9cde105e8 this fails in an orderly fashion:
test/files/pos/t6359.scala:3: error: implementation restriction: nested object is not allowed in value class
This restriction is planned to be removed in subsequent releases.
object X
^
one error found
@gkossakowski said: Which means we should close this ticket?
@paulp said: Well, there ought to be a ticket to remove the implementation restriction.
@hubertp said: I thought Josh was going to create one, at least he said he would. I would prefer to leave this one open (possibly rename it) as it contains some history related to the bug.
@retronym said: @Hubert: What's the plan for this one? It is currently marked for 2.10.1, is that realistic? Anything I can do to help?
@hubertp said: Last time I looked into this (which was more than a month ago) I got stuck on a weird behaviour of nested classes in a normal, non value class, context once they are generated in namers. I should have a wip branch lying around, I will try to dig it up for you.
Timewise, I have some other obligations until 30th, so definitely nothing will happen from my side until then.