Skip to content

Commit 0cbfd2c

Browse files
committed
Add missing symbols to block environment
1 parent ca6fd5c commit 0cbfd2c

File tree

3 files changed

+50
-2
lines changed

3 files changed

+50
-2
lines changed

library/src-3.x/scala/internal/quoted/Matcher.scala

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,12 @@ object Matcher {
120120
fn1 =#= fn2 && args1 =##= args2
121121

122122
case (Block(stats1, expr1), Block(stats2, expr2)) =>
123-
// FIXME update the environment
124-
stats1 =##= stats2 && expr1 =#= expr2
123+
val env = the[Env] ++ stats1.map(_.symbol).zip(stats2.map(_.symbol))
124+
125+
{
126+
implied for Env = env
127+
stats1 =##= stats2 && expr1 =#= expr2
128+
}
125129

126130
case (If(cond1, thenp1, elsep1), If(cond2, thenp2, elsep2)) =>
127131
cond1 =#= cond2 && thenp1 =#= thenp2 && elsep1 =#= elsep2

tests/run-macros/quote-matcher-runtime.check

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,26 @@ Pattern: {
302302
}
303303
Result: None
304304

305+
Scrutinee: {
306+
val a: scala.Int = 45
307+
a.+(a)
308+
}
309+
Pattern: {
310+
val x: scala.Int = 45
311+
x.+(x)
312+
}
313+
Result: Some(List())
314+
315+
Scrutinee: {
316+
val a: scala.Int = 45
317+
a.+(a)
318+
}
319+
Pattern: {
320+
val x: scala.Int = 45
321+
x.+(scala.internal.Quoted.patternHole[scala.Int])
322+
}
323+
Result: Some(List(Expr(a)))
324+
305325
Scrutinee: {
306326
lazy val a: scala.Int = 45
307327
()
@@ -572,6 +592,26 @@ Pattern: {
572592
}
573593
Result: Some(List())
574594

595+
Scrutinee: {
596+
def a: scala.Int = a
597+
a.+(a)
598+
}
599+
Pattern: {
600+
def a: scala.Int = a
601+
a.+(a)
602+
}
603+
Result: Some(List())
604+
605+
Scrutinee: {
606+
def a: scala.Int = a
607+
a.+(a)
608+
}
609+
Pattern: {
610+
def a: scala.Int = scala.internal.Quoted.patternHole[scala.Int]
611+
a.+(scala.internal.Quoted.patternHole[scala.Int])
612+
}
613+
Result: Some(List(Expr(a), Expr(a)))
614+
575615
Scrutinee: {
576616
lazy val a: scala.Int = a
577617
()

tests/run-macros/quote-matcher-runtime/quoted_2.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ object Test {
9090
matches({ val a: Int = 45 }, { lazy val a: Int = 45 })
9191
matches({ val a: Int = 45 }, { var a: Int = 45 })
9292
matches({ val a: Int = 45 }, { @patternBindHole var a: Int = patternHole })
93+
matches({ val a: Int = 45; a + a }, { val x: Int = 45; x + x })
94+
matches({ val a: Int = 45; a + a }, { val x: Int = 45; x + patternHole[Int] })
9395
matches({ lazy val a: Int = 45 }, { val a: Int = 45 })
9496
matches({ lazy val a: Int = 45 }, { lazy val a: Int = 45 })
9597
matches({ lazy val a: Int = 45 }, { var a: Int = 45 })
@@ -117,6 +119,8 @@ object Test {
117119
matches({ def a(x: Int): Int = 45 }, { def a(x: Int @patternBindHole): Int = 45 })
118120
matches({ def a(x: Int): Int = x }, { def b(y: Int): Int = y })
119121
matches({ def a: Int = a }, { def b: Int = b })
122+
matches({ def a: Int = a; a + a }, { def a: Int = a; a + a })
123+
matches({ def a: Int = a; a + a }, { def a: Int = patternHole[Int]; a + patternHole[Int] })
120124
matches({ lazy val a: Int = a }, { lazy val b: Int = b })
121125
matches(1 match { case _ => 2 }, 1 match { case _ => 2 })
122126
matches(1 match { case _ => 2 }, patternHole[Int] match { case _ => patternHole[Int] })

0 commit comments

Comments
 (0)