Elide non top-level owners from flat name of $anon{Fun}

Best described with some output. (Prettier version https://gist.github.com/3071651)

topic/elide-anon ~/code/scala cat test.scala
object Test {
	new { new { new { val x = () => 1 }}}
}
topic/elide-anon ~/code/scala diff -u full-anon.txt elide-anon.txt
--- full-anon.txt	2012-07-08 17:28:46.000000000 +0200
+++ elide-anon.txt	2012-07-08 17:58:20.000000000 +0200
@@ -1,48 +1,48 @@
-[[syntax trees at end of flatten]]// Scala source: test.scala
+[[syntax trees at end of                   flatten]] // test.scala
 package <empty> {
-  final object Test extends java.lang.Object with ScalaObject {
-    def this(): object Test = {
-      Test.super.this();
+  object Test extends Object {
+    def <init>(): ... = {
+      Test.super.<init>();
       {
         new anonymous class Test$$anon$1()
       };
       ()
     }
   };
-  @SerialVersionUID(0) final <synthetic> class Test$$anon$1$$anon$2$$anon$3$$anonfun$1 extends scala.runtime.AbstractFunction0$mcI$sp with Serializable {
-    final def apply(): Int = Test$$anon$1$$anon$2$$anon$3$$anonfun$1.this.apply$mcI$sp();
+  @SerialVersionUID(0) final <synthetic> class Test$$anonfun$1 extends scala.runtime.AbstractFunction0$mcI$sp with Serializable {
+    final def apply(): Int = Test$$anonfun$1.this.apply$mcI$sp();
     <specialized> def apply$mcI$sp(): Int = 1;
-    final <bridge> def apply(): java.lang.Object = scala.Int.box(Test$$anon$1$$anon$2$$anon$3$$anonfun$1.this.apply());
-    def this($outer: anonymous class Test$$anon$1$$anon$2$$anon$3): anonymous class Test$$anon$1$$anon$2$$anon$3$$anonfun$1 = {
-      Test$$anon$1$$anon$2$$anon$3$$anonfun$1.super.this();
+    final <bridge> def apply(): Object = scala.Int.box(Test$$anonfun$1.this.apply());
+    def <init>($outer: anonymous class Test$$anon$3): anonymous class Test$$anonfun$1 = {
+      Test$$anonfun$1.super.<init>();
       ()
     }
   };
-  final class Test$$anon$1$$anon$2$$anon$3 extends java.lang.Object {
+  final class Test$$anon$3 extends Object {
     private[this] val x: Function0 = _;
-    <stable> <accessor> def x(): Function0 = Test$$anon$1$$anon$2$$anon$3.this.x;
-    def this($outer: anonymous class Test$$anon$1$$anon$2): anonymous class Test$$anon$1$$anon$2$$anon$3 = {
-      Test$$anon$1$$anon$2$$anon$3.super.this();
-      Test$$anon$1$$anon$2$$anon$3.this.x = {
-        (new anonymous class Test$$anon$1$$anon$2$$anon$3$$anonfun$1(Test$$anon$1$$anon$2$$anon$3.this): Function0)
+    <stable> <accessor> def x(): Function0 = Test$$anon$3.this.x;
+    def <init>($outer: anonymous class Test$$anon$2): anonymous class Test$$anon$3 = {
+      Test$$anon$3.super.<init>();
+      Test$$anon$3.this.x = {
+        (new anonymous class Test$$anonfun$1(Test$$anon$3.this): Function0)
       };
       ()
     }
   };
-  final class Test$$anon$1$$anon$2 extends java.lang.Object {
-    def this($outer: anonymous class Test$$anon$1): anonymous class Test$$anon$1$$anon$2 = {
-      Test$$anon$1$$anon$2.super.this();
+  final class Test$$anon$2 extends Object {
+    def <init>($outer: anonymous class Test$$anon$1): anonymous class Test$$anon$2 = {
+      Test$$anon$2.super.<init>();
       {
-        new anonymous class Test$$anon$1$$anon$2$$anon$3(Test$$anon$1$$anon$2.this)
+        new anonymous class Test$$anon$3(Test$$anon$2.this)
       };
       ()
     }
   };
-  final class Test$$anon$1 extends java.lang.Object {
-    def this(): anonymous class Test$$anon$1 = {
-      Test$$anon$1.super.this();
+  final class Test$$anon$1 extends Object {
+    def <init>(): anonymous class Test$$anon$1 = {
+      Test$$anon$1.super.<init>();
       {
-        new anonymous class Test$$anon$1$$anon$2(Test$$anon$1.this)
+        new anonymous class Test$$anon$2(Test$$anon$1.this)
       };
       ()
     }