Skip to content

Commit 9920195

Browse files
committed
Add eval-value-class test
1 parent 12212bf commit 9920195

File tree

3 files changed

+70
-1
lines changed

3 files changed

+70
-1
lines changed

compiler/src/dotty/tools/debug/ExtractExpression.scala

+2-1
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,8 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
122122
case tree: (Ident | Select) if !tree.symbol.isStatic =>
123123
val qualifier = getTransformedQualifier(tree)
124124
val qualifierType = widenDealiasQualifierType(tree)
125-
val castQualifier = if qualifier.tpe <:< qualifierType then qualifier else qualifier.cast(qualifierType)
125+
val castQualifier = if qualifier.tpe <:< qualifierType then qualifier else
126+
qualifier.select(defn.Any_asInstanceOf).appliedToType(qualifierType)
126127
cpy.Select(tree)(castQualifier, tree.name)
127128

128129
case Typed(tree, tpt) if tpt.symbol.isType && !isTypeAccessible(tpt.tpe) => transform(tree)

tests/debug/eval-value-class.check

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
break Test$ 24
2+
eval b1
3+
result foo
4+
eval size.value
5+
result 2
6+
eval b2.take(size)
7+
result ba
8+
eval m(bar)
9+
result B(bar)
10+
eval new B("fizz")
11+
result fizz
12+
eval b1 + new B("buzz")
13+
result foobuzz
14+
eval new Msg(new Size(3))
15+
result Hel
16+
17+
break B$ 6
18+
eval x
19+
result foo
20+
eval take(size)
21+
result fo
22+
23+
break Test$ 25
24+
eval b1 = new B("fizz")
25+
result ()
26+
eval size = new Size(3)
27+
result ()
28+
29+
break Test$ 29
30+
eval a
31+
result B(fizzbar)
32+
eval a.take(this.size)
33+
result B(fiz)
34+
eval a.asInstanceOf[B] + B("buzz")
35+
result fizzbarbuzz
36+
37+
break B$ 6

tests/debug/eval-value-class.scala

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
trait A extends Any:
2+
def take(size: Size): A
3+
4+
class B(val x: String) extends AnyVal with A:
5+
def take(size: Size): B =
6+
new B(x.take(size.value))
7+
8+
def +(b: B): B =
9+
new B(x + b.x)
10+
11+
override def toString: String = s"B($x)"
12+
13+
class Size(val value: Int)
14+
15+
class Msg(size: Size):
16+
override def toString = "Hello, World!".take(size.value)
17+
18+
object Test:
19+
var b1 = new B("foo")
20+
private var size = new Size(2)
21+
22+
def main(args: Array[String]): Unit =
23+
val b2 = bar
24+
println(b1.take(size))
25+
println(m(b1 + b2))
26+
27+
def m(a: A): A =
28+
val size = new Size(5)
29+
a.take(size)
30+
31+
def bar: B = new B("bar")

0 commit comments

Comments
 (0)