Skip to content

Commit b751d13

Browse files
committed
Port Env
1 parent 77208d3 commit b751d13

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

compiler/src/scala/quoted/runtime/impl/Matcher.scala

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import scala.annotation.internal.sharable
55
import scala.annotation.{Annotation, compileTimeOnly}
66

77
import dotty.tools.dotc
8+
import dotty.tools.dotc.ast.tpd
89
import dotty.tools.dotc.core.Contexts._
910
import dotty.tools.dotc.core.StdNames.nme
1011

@@ -99,6 +100,7 @@ import dotty.tools.dotc.core.StdNames.nme
99100
* ```
100101
*/
101102
object Matcher {
103+
import tpd.*
102104

103105
class QuoteMatcher[QCtx <: Quotes & Singleton](val qctx: QCtx)(using Context) {
104106

@@ -117,7 +119,7 @@ object Matcher {
117119
* ```
118120
* when matching `a * a` with `x * x` the environment will contain `Map(a -> x)`.
119121
*/
120-
private type Env = Map[Symbol, Symbol]
122+
private type Env = Map[dotc.core.Symbols.Symbol, dotc.core.Symbols.Symbol]
121123

122124
inline private def withEnv[T](env: Env)(inline body: Env ?=> T): T = body(using env)
123125

@@ -202,7 +204,7 @@ object Matcher {
202204
new TreeMap {
203205
override def transformTerm(tree: Term)(owner: Symbol): Term =
204206
tree match
205-
case tree: Ident => summon[Env].get(tree.symbol).flatMap(argsMap.get).getOrElse(tree)
207+
case tree: Ident => summon[Env].get(tree.symbol.asInstanceOf).asInstanceOf[Option[Symbol]].flatMap(argsMap.get).getOrElse(tree)
206208
case tree => super.transformTerm(tree)(owner)
207209
}.transformTree(scrutinee)(Symbol.spliceOwner)
208210
}
@@ -256,7 +258,7 @@ object Matcher {
256258
case (Block(stat1 :: stats1, expr1), Block(stat2 :: stats2, expr2)) =>
257259
val newEnv = (stat1, stat2) match {
258260
case (stat1: Definition, stat2: Definition) =>
259-
summon[Env] + (stat1.symbol -> stat2.symbol)
261+
summon[Env] + (stat1.symbol.asInstanceOf[dotc.core.Symbols.Symbol] -> stat2.symbol.asInstanceOf[dotc.core.Symbols.Symbol])
260262
case _ =>
261263
summon[Env]
262264
}
@@ -299,20 +301,20 @@ object Matcher {
299301

300302
/* Match val */
301303
case (ValDef(_, tpt1, rhs1), ValDef(_, tpt2, rhs2)) if checkValFlags() =>
302-
def rhsEnv = summon[Env] + (scrutinee.symbol -> pattern.symbol)
304+
def rhsEnv = summon[Env] + (scrutinee.symbol.asInstanceOf[dotc.core.Symbols.Symbol] -> pattern.symbol.asInstanceOf[dotc.core.Symbols.Symbol])
303305
tpt1 =?= tpt2 &&& treeOptMatches(rhs1, rhs2)(using rhsEnv)
304306

305307
/* Match def */
306308
case (DefDef(_, paramss1, tpt1, Some(rhs1)), DefDef(_, paramss2, tpt2, Some(rhs2))) =>
307-
def rhsEnv =
308-
val paramSyms: List[(Symbol, Symbol)] =
309+
def rhsEnv: Env =
310+
val paramSyms: List[(dotc.core.Symbols.Symbol, dotc.core.Symbols.Symbol)] =
309311
for
310312
(clause1, clause2) <- paramss1.zip(paramss2)
311313
(param1, param2) <- clause1.params.zip(clause2.params)
312314
yield
313-
param1.symbol -> param2.symbol
315+
param1.symbol.asInstanceOf[dotc.core.Symbols.Symbol] -> param2.symbol.asInstanceOf[dotc.core.Symbols.Symbol]
314316
val oldEnv: Env = summon[Env]
315-
val newEnv: List[(Symbol, Symbol)] = (scrutinee.symbol -> pattern.symbol) :: paramSyms
317+
val newEnv: List[(dotc.core.Symbols.Symbol, dotc.core.Symbols.Symbol)] = (scrutinee.symbol.asInstanceOf[dotc.core.Symbols.Symbol] -> pattern.symbol.asInstanceOf[dotc.core.Symbols.Symbol]) :: paramSyms
316318
oldEnv ++ newEnv
317319

318320
matchLists(paramss1, paramss2)(_ =?= _)

0 commit comments

Comments
 (0)