Skip to content

Commit e51b8f1

Browse files
committed
Fix mapping of annotations containing defs
1 parent 3d5cf9c commit e51b8f1

File tree

3 files changed

+39
-1
lines changed

3 files changed

+39
-1
lines changed

compiler/src/dotty/tools/dotc/core/Annotations.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ object Annotations {
6262
if tm.isRange(x) then x
6363
else
6464
val tp1 = tm(tree.tpe)
65-
foldOver(if tp1 frozen_=:= tree.tpe then x else tp1, tree)
65+
foldOver(if tp1 eq tree.tpe then x else tp1, tree)
6666
val diff = findDiff(NoType, args)
6767
if tm.isRange(diff) then EmptyAnnotation
6868
else if diff.exists then derivedAnnotation(tm.mapOver(tree))
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
[[syntax trees at end of typer]] // tests/printing/dependent-annot-19846.scala
2+
package <empty> {
3+
class lambdaAnnot(g: () => Int) extends scala.annotation.Annotation(),
4+
annotation.StaticAnnotation {
5+
private[this] val g: () => Int
6+
}
7+
final lazy module val Test: Test = new Test()
8+
final module class Test() extends Object() { this: Test.type =>
9+
val y: Int = ???
10+
val z:
11+
Int @lambdaAnnot(
12+
{
13+
def $anonfun(): Int = Test.y
14+
closure($anonfun)
15+
}
16+
)
17+
= f(Test.y)
18+
}
19+
final lazy module val dependent-annot-19846$package:
20+
dependent-annot-19846$package = new dependent-annot-19846$package()
21+
final module class dependent-annot-19846$package() extends Object() {
22+
this: dependent-annot-19846$package.type =>
23+
def f(x: Int):
24+
Int @lambdaAnnot(
25+
{
26+
def $anonfun(): Int = x
27+
closure($anonfun)
28+
}
29+
)
30+
= x
31+
}
32+
}
33+
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class lambdaAnnot(g: () => Int) extends annotation.StaticAnnotation
2+
def f(x: Int): Int @lambdaAnnot(() => x) = x
3+
object Test:
4+
val y: Int = ???
5+
val z /*: Int @lambdaAnnot(() => y) */ = f(y)

0 commit comments

Comments
 (0)