Skip to content

Commit 90904e8

Browse files
Merge pull request #4697 from dotty-staging/fix-objects-in-stats
Print this id and filter object lazy val
2 parents fc6db4b + 53ce976 commit 90904e8

File tree

7 files changed

+59
-20
lines changed

7 files changed

+59
-20
lines changed

library/src/scala/tasty/util/ShowSourceCode.scala

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,13 @@ class ShowSourceCode[T <: Tasty with Singleton](tasty0: T) extends Show[T](tasty
275275
printConstant(const)
276276

277277
case Term.This(id) =>
278-
this += "this" // TODO add id
278+
id match {
279+
case Some(x) =>
280+
val Id(name) = x
281+
this += name.stripSuffix("$") += "."
282+
case None =>
283+
}
284+
this += "this"
279285

280286
case Term.New(tpt) =>
281287
this += "new "
@@ -343,12 +349,13 @@ class ShowSourceCode[T <: Tasty with Singleton](tasty0: T) extends Show[T](tasty
343349
printTree(rhs)
344350

345351
case Term.Block(stats0, expr) =>
346-
def isLoopEntryPoint(tree: Tree): Boolean = tree match {
352+
def shouldNotBePrinted(tree: Tree): Boolean = tree match {
347353
case Term.Apply(Term.Ident("while$" | "doWhile$"), _) => true
354+
case tree @ ValDef(_, _, _) => tree.flags.isObject
348355
case _ => false
349356
}
350357

351-
val stats = stats0.filterNot(isLoopEntryPoint)
358+
val stats = stats0.filterNot(shouldNotBePrinted)
352359

353360
expr match {
354361
case Term.Lambda(_, _) =>
@@ -362,7 +369,7 @@ class ShowSourceCode[T <: Tasty with Singleton](tasty0: T) extends Show[T](tasty
362369
case _ =>
363370
this += "{"
364371
val (stats1, expr1) =
365-
if (isLoopEntryPoint(expr)) (stats.init, stats.last)
372+
if (shouldNotBePrinted(expr)) (stats.init, stats.last)
366373
else (stats, expr)
367374
indented {
368375
printStats(stats1, expr1)

tests/pos/i2104b.decompiled

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,21 @@ case class Pair[A, B](_1: A, _2: B) {
1212
acc = scala.runtime.Statics.mix(acc, scala.runtime.Statics.anyHash(Pair.this._2))
1313
scala.runtime.Statics.finalizeHash(acc, 2)
1414
}
15-
override def equals(x$0: scala.Any): scala.Boolean = this.eq(x$0.asInstanceOf[java.lang.Object]).||(x$0 match {
15+
override def equals(x$0: scala.Any): scala.Boolean = Pair.this.eq(x$0.asInstanceOf[java.lang.Object]).||(x$0 match {
1616
case x$0: Pair[A, B] @scala.unchecked() =>
17-
this._1.==(x$0._1).&&(this._2.==(x$0._2))
17+
Pair.this._1.==(x$0._1).&&(Pair.this._2.==(x$0._2))
1818
case _ =>
1919
false
2020
})
21-
override def toString(): java.lang.String = scala.runtime.ScalaRunTime._toString(this)
21+
override def toString(): java.lang.String = scala.runtime.ScalaRunTime._toString(Pair.this)
2222
override def canEqual(that: scala.Any): scala.Boolean = that.isInstanceOf[Pair[A, B] @scala.unchecked()]
2323
override def productArity: scala.Int = 2
2424
override def productPrefix: java.lang.String = "Pair"
2525
override def productElement(n: scala.Int): scala.Any = n match {
2626
case 0 =>
27-
this._1
27+
Pair.this._1
2828
case 1 =>
29-
this._2
29+
Pair.this._2
3030
case _ =>
3131
throw new java.lang.IndexOutOfBoundsException(n.toString())
3232
}

tests/pos/simpleCaseClass-1.decompiled

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
/** Decompiled from out/posTestFromTasty/pos/simpleCaseClass-1/A.class */
22
case class A() {
33
override def hashCode(): scala.Int = 1914112431
4-
override def equals(x$0: scala.Any): scala.Boolean = this.eq(x$0.asInstanceOf[java.lang.Object]).||(x$0 match {
4+
override def equals(x$0: scala.Any): scala.Boolean = A.this.eq(x$0.asInstanceOf[java.lang.Object]).||(x$0 match {
55
case x$0: A @scala.unchecked() =>
66
true
77
case _ =>
88
false
99
})
10-
override def toString(): java.lang.String = scala.runtime.ScalaRunTime._toString(this)
10+
override def toString(): java.lang.String = scala.runtime.ScalaRunTime._toString(A.this)
1111
override def canEqual(that: scala.Any): scala.Boolean = that.isInstanceOf[A @scala.unchecked()]
1212
override def productArity: scala.Int = 0
1313
override def productPrefix: java.lang.String = "A"

tests/pos/simpleCaseClass-2.decompiled

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,19 @@ case class A(x: scala.Int) {
55
acc = scala.runtime.Statics.mix(acc, A.this.x)
66
scala.runtime.Statics.finalizeHash(acc, 1)
77
}
8-
override def equals(x$0: scala.Any): scala.Boolean = this.eq(x$0.asInstanceOf[java.lang.Object]).||(x$0 match {
8+
override def equals(x$0: scala.Any): scala.Boolean = A.this.eq(x$0.asInstanceOf[java.lang.Object]).||(x$0 match {
99
case x$0: A @scala.unchecked() =>
10-
this.x.==(x$0.x)
10+
A.this.x.==(x$0.x)
1111
case _ =>
1212
false
1313
})
14-
override def toString(): java.lang.String = scala.runtime.ScalaRunTime._toString(this)
14+
override def toString(): java.lang.String = scala.runtime.ScalaRunTime._toString(A.this)
1515
override def canEqual(that: scala.Any): scala.Boolean = that.isInstanceOf[A @scala.unchecked()]
1616
override def productArity: scala.Int = 1
1717
override def productPrefix: java.lang.String = "A"
1818
override def productElement(n: scala.Int): scala.Any = n match {
1919
case 0 =>
20-
this._1
20+
A.this._1
2121
case _ =>
2222
throw new java.lang.IndexOutOfBoundsException(n.toString())
2323
}

tests/pos/simpleCaseClass-3.decompiled

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,19 @@ case class A[T](x: T) {
55
acc = scala.runtime.Statics.mix(acc, scala.runtime.Statics.anyHash(A.this.x))
66
scala.runtime.Statics.finalizeHash(acc, 1)
77
}
8-
override def equals(x$0: scala.Any): scala.Boolean = this.eq(x$0.asInstanceOf[java.lang.Object]).||(x$0 match {
8+
override def equals(x$0: scala.Any): scala.Boolean = A.this.eq(x$0.asInstanceOf[java.lang.Object]).||(x$0 match {
99
case x$0: A[T] @scala.unchecked() =>
10-
this.x.==(x$0.x)
10+
A.this.x.==(x$0.x)
1111
case _ =>
1212
false
1313
})
14-
override def toString(): java.lang.String = scala.runtime.ScalaRunTime._toString(this)
14+
override def toString(): java.lang.String = scala.runtime.ScalaRunTime._toString(A.this)
1515
override def canEqual(that: scala.Any): scala.Boolean = that.isInstanceOf[A[T] @scala.unchecked()]
1616
override def productArity: scala.Int = 1
1717
override def productPrefix: java.lang.String = "A"
1818
override def productElement(n: scala.Int): scala.Any = n match {
1919
case 0 =>
20-
this._1
20+
A.this._1
2121
case _ =>
2222
throw new java.lang.IndexOutOfBoundsException(n.toString())
2323
}

tests/pos/simpleMatchRef.decompiled

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
class Foo() {
33
val X: scala.Int = scala.Predef.???
44
def foo(x: scala.Any): scala.Unit = x match {
5-
case this.X =>
5+
case Foo.this.X =>
66
scala.Predef.println("a")
77
case Y =>
88
scala.Predef.println("b")

tests/pos/t704.decompiled

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/** Decompiled from out/posTestFromTasty/pos/t704/C.class */
2+
class C() extends E
3+
/** Decompiled from out/posTestFromTasty/pos/t704/D.class */
4+
trait D() extends java.lang.Object {
5+
val x: java.lang.String = "xxxx should appear twice"
6+
object xxxx {
7+
scala.Console.println(D.this.x)
8+
}
9+
def get_xxxx: scala.AnyRef = D.this.xxxx
10+
}
11+
/** Decompiled from out/posTestFromTasty/pos/t704/E.class */
12+
trait E() extends java.lang.Object with D {
13+
def f(): scala.Unit = {
14+
val y: java.lang.String = "yyyy should appear twice"
15+
object yyyy {
16+
val x1: scala.AnyRef = E.this.get_xxxx
17+
scala.Console.println(y)
18+
}
19+
20+
{
21+
yyyy
22+
()
23+
}
24+
}
25+
}
26+
/** Decompiled from out/posTestFromTasty/pos/t704/Go.class */
27+
object Go extends D {
28+
def main(args: scala.Array[scala.Predef.String]): scala.Unit = {
29+
new C().f()
30+
new C().f()
31+
}
32+
}

0 commit comments

Comments
 (0)