Skip to content

Commit ae76553

Browse files
committed
Replace Reflect Context with Owner
1 parent cdfc76e commit ae76553

File tree

26 files changed

+1555
-1547
lines changed

26 files changed

+1555
-1547
lines changed

compiler/src/dotty/tools/dotc/quoted/QuoteContextImpl.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ object QuoteContextImpl {
1919
val syntaxHighlight =
2020
if (ctx.settings.color.value == "always") SyntaxHighlight.ANSI
2121
else SyntaxHighlight.plain
22-
show(using qctx)(tree.asInstanceOf[qctx.tasty.Tree], syntaxHighlight)(using ctx.asInstanceOf[qctx.tasty.Context])
22+
show(using qctx)(tree.asInstanceOf[qctx.tasty.Tree], syntaxHighlight)
2323
}
2424

25-
private def show(using qctx: QuoteContext)(tree: qctx.tasty.Tree, syntaxHighlight: SyntaxHighlight)(using qctx.tasty.Context) =
25+
private def show(using qctx: QuoteContext)(tree: qctx.tasty.Tree, syntaxHighlight: SyntaxHighlight) =
2626
tree.showWith(syntaxHighlight)
2727

2828
private[dotty] def checkScopeId(id: ScopeId)(using Context): Unit =

compiler/src/dotty/tools/dotc/quoted/reflect/ReflectionCompilerInterface.scala

Lines changed: 444 additions & 440 deletions
Large diffs are not rendered by default.

library/src-bootstrapped/scala/internal/quoted/Matcher.scala

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ object Matcher {
203203

204204
extension (scrutinees: List[Tree]):
205205
/** Check that all trees match with =?= and concatenate the results with &&& */
206-
private def =?= (patterns: List[Tree])(using Context, Env): Matching =
206+
private def =?= (patterns: List[Tree])(using Owner, Env): Matching =
207207
matchLists(scrutinees, patterns)(_ =?= _)
208208

209209
extension (scrutinee0: Tree):
@@ -215,7 +215,7 @@ object Matcher {
215215
* @param `summon[Env]` Set of tuples containing pairs of symbols (s, p) where s defines a symbol in `scrutinee` which corresponds to symbol p in `pattern`.
216216
* @return `None` if it did not match or `Some(tup: Tuple)` if it matched where `tup` contains the contents of the holes.
217217
*/
218-
private def =?= (pattern0: Tree)(using Context, Env): Matching = {
218+
private def =?= (pattern0: Tree)(using Owner, Env): Matching = {
219219

220220
/* Match block flattening */ // TODO move to cases
221221
/** Normalize the tree */
@@ -265,7 +265,7 @@ object Matcher {
265265
def bodyFn(lambdaArgs: List[Tree]): Tree = {
266266
val argsMap = args.map(_.symbol).zip(lambdaArgs.asInstanceOf[List[Term]]).toMap
267267
new TreeMap {
268-
override def transformTerm(tree: Term)(using ctx: Context): Term =
268+
override def transformTerm(tree: Term)(using Owner): Term =
269269
tree match
270270
case tree: Ident => summon[Env].get(tree.symbol).flatMap(argsMap.get).getOrElse(tree)
271271
case tree => super.transformTerm(tree)
@@ -374,7 +374,7 @@ object Matcher {
374374
/* Match val */
375375
case (ValDef(_, tpt1, rhs1), ValDef(_, tpt2, rhs2)) if checkValFlags() =>
376376
def rhsEnv = summon[Env] + (scrutinee.symbol -> pattern.symbol)
377-
tpt1 =?= tpt2 &&& treeOptMatches(rhs1, rhs2)(using summon[Context], rhsEnv)
377+
tpt1 =?= tpt2 &&& treeOptMatches(rhs1, rhs2)(using summon[Owner], rhsEnv)
378378

379379
/* Match def */
380380
case (DefDef(_, typeParams1, paramss1, tpt1, Some(rhs1)), DefDef(_, typeParams2, paramss2, tpt2, Some(rhs2))) =>
@@ -423,13 +423,13 @@ object Matcher {
423423

424424
private object ClosedPatternTerm {
425425
/** Matches a term that does not contain free variables defined in the pattern (i.e. not defined in `Env`) */
426-
def unapply(term: Term)(using Context, Env): Option[term.type] =
426+
def unapply(term: Term)(using Owner, Env): Option[term.type] =
427427
if freePatternVars(term).isEmpty then Some(term) else None
428428

429429
/** Return all free variables of the term defined in the pattern (i.e. defined in `Env`) */
430-
def freePatternVars(term: Term)(using ctx: Context, env: Env): Set[Symbol] =
430+
def freePatternVars(term: Term)(using owner: Owner, env: Env): Set[Symbol] =
431431
val accumulator = new TreeAccumulator[Set[Symbol]] {
432-
def foldTree(x: Set[Symbol], tree: Tree)(using ctx: Context): Set[Symbol] =
432+
def foldTree(x: Set[Symbol], tree: Tree)(using Owner): Set[Symbol] =
433433
tree match
434434
case tree: Ident if env.contains(tree.symbol) => foldOverTree(x + tree.symbol, tree)
435435
case _ => foldOverTree(x, tree)
@@ -438,7 +438,7 @@ object Matcher {
438438
}
439439

440440
private object IdentArgs {
441-
def unapply(args: List[Term])(using Context): Option[List[Ident]] =
441+
def unapply(args: List[Term])(using Owner): Option[List[Ident]] =
442442
args.foldRight(Option(List.empty[Ident])) {
443443
case (id: Ident, Some(acc)) => Some(id :: acc)
444444
case (Block(List(DefDef("$anonfun", Nil, List(params), Inferred(), Some(Apply(id: Ident, args)))), Closure(Ident("$anonfun"), None)), Some(acc))
@@ -448,7 +448,7 @@ object Matcher {
448448
}
449449
}
450450

451-
private def treeOptMatches(scrutinee: Option[Tree], pattern: Option[Tree])(using Context, Env): Matching = {
451+
private def treeOptMatches(scrutinee: Option[Tree], pattern: Option[Tree])(using Owner, Env): Matching = {
452452
(scrutinee, pattern) match {
453453
case (Some(x), Some(y)) => x =?= y
454454
case (None, None) => matched

library/src-bootstrapped/scala/quoted/unsafe/UnsafeExpr.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ object UnsafeExpr {
6161
import qctx.tasty._
6262
val map = params.map(_.symbol).zip(args).toMap
6363
new TreeMap {
64-
override def transformTerm(tree: Term)(using ctx: Context): Term =
64+
override def transformTerm(tree: Term)(using Owner): Term =
6565
super.transformTerm(tree) match
6666
case tree: Ident => map.getOrElse(tree.symbol, tree)
6767
case tree => tree

library/src-bootstrapped/scala/quoted/util/ExprMap.scala

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ trait ExprMap {
1212
import qctx.tasty._
1313
final class MapChildren() {
1414

15-
def transformStatement(tree: Statement)(using ctx: Context): Statement = {
16-
def localCtx(definition: Definition): Context = definition.symbol.localContext
15+
def transformStatement(tree: Statement)(using Owner): Statement = {
1716
tree match {
1817
case tree: Term =>
1918
transformTerm(tree, defn.AnyType)
@@ -24,15 +23,14 @@ trait ExprMap {
2423
}
2524
}
2625

27-
def transformDefinition(tree: Definition)(using ctx: Context): Definition = {
28-
def localCtx(definition: Definition): Context = definition.symbol.localContext
26+
def transformDefinition(tree: Definition)(using Owner): Definition = {
2927
tree match {
3028
case tree: ValDef =>
31-
given Context = localCtx(tree)
29+
given Owner = Owner.fromSymbol(tree.symbol)
3230
val rhs1 = tree.rhs.map(x => transformTerm(x, tree.tpt.tpe))
3331
ValDef.copy(tree)(tree.name, tree.tpt, rhs1)
3432
case tree: DefDef =>
35-
given Context = localCtx(tree)
33+
given Owner = Owner.fromSymbol(tree.symbol)
3634
DefDef.copy(tree)(tree.name, tree.typeParams, tree.paramss, tree.returnTpt, tree.rhs.map(x => transformTerm(x, tree.returnTpt.tpe)))
3735
case tree: TypeDef =>
3836
tree
@@ -42,7 +40,7 @@ trait ExprMap {
4240
}
4341
}
4442

45-
def transformTermChildren(tree: Term, tpe: Type)(using ctx: Context): Term = tree match {
43+
def transformTermChildren(tree: Term, tpe: Type)(using Owner): Term = tree match {
4644
case Ident(name) =>
4745
tree
4846
case Select(qualifier, name) =>
@@ -96,7 +94,7 @@ trait ExprMap {
9694
Inlined.copy(tree)(call, transformDefinitions(bindings), transformTerm(expansion, tpe)/*()call.symbol.localContext)*/)
9795
}
9896

99-
def transformTerm(tree: Term, tpe: Type)(using ctx: Context): Term =
97+
def transformTerm(tree: Term, tpe: Type)(using Owner): Term =
10098
tree match
10199
case _: Closure =>
102100
tree
@@ -110,39 +108,39 @@ trait ExprMap {
110108
case _ =>
111109
transformTermChildren(tree, tpe)
112110

113-
def transformTypeTree(tree: TypeTree)(using ctx: Context): TypeTree = tree
111+
def transformTypeTree(tree: TypeTree)(using Owner): TypeTree = tree
114112

115-
def transformCaseDef(tree: CaseDef, tpe: Type)(using ctx: Context): CaseDef =
113+
def transformCaseDef(tree: CaseDef, tpe: Type)(using Owner): CaseDef =
116114
CaseDef.copy(tree)(tree.pattern, tree.guard.map(x => transformTerm(x, defn.BooleanType)), transformTerm(tree.rhs, tpe))
117115

118-
def transformTypeCaseDef(tree: TypeCaseDef)(using ctx: Context): TypeCaseDef = {
116+
def transformTypeCaseDef(tree: TypeCaseDef)(using Owner): TypeCaseDef = {
119117
TypeCaseDef.copy(tree)(transformTypeTree(tree.pattern), transformTypeTree(tree.rhs))
120118
}
121119

122-
def transformStats(trees: List[Statement])(using ctx: Context): List[Statement] =
120+
def transformStats(trees: List[Statement])(using Owner): List[Statement] =
123121
trees mapConserve (transformStatement(_))
124122

125-
def transformDefinitions(trees: List[Definition])(using ctx: Context): List[Definition] =
123+
def transformDefinitions(trees: List[Definition])(using Owner): List[Definition] =
126124
trees mapConserve (transformDefinition(_))
127125

128-
def transformTerms(trees: List[Term], tpes: List[Type])(using ctx: Context): List[Term] =
126+
def transformTerms(trees: List[Term], tpes: List[Type])(using Owner): List[Term] =
129127
var tpes2 = tpes // TODO use proper zipConserve
130128
trees mapConserve { x =>
131129
val tpe :: tail = tpes2
132130
tpes2 = tail
133131
transformTerm(x, tpe)
134132
}
135133

136-
def transformTerms(trees: List[Term], tpe: Type)(using ctx: Context): List[Term] =
134+
def transformTerms(trees: List[Term], tpe: Type)(using Owner): List[Term] =
137135
trees.mapConserve(x => transformTerm(x, tpe))
138136

139-
def transformTypeTrees(trees: List[TypeTree])(using ctx: Context): List[TypeTree] =
137+
def transformTypeTrees(trees: List[TypeTree])(using Owner): List[TypeTree] =
140138
trees mapConserve (transformTypeTree(_))
141139

142-
def transformCaseDefs(trees: List[CaseDef], tpe: Type)(using ctx: Context): List[CaseDef] =
140+
def transformCaseDefs(trees: List[CaseDef], tpe: Type)(using Owner): List[CaseDef] =
143141
trees mapConserve (x => transformCaseDef(x, tpe))
144142

145-
def transformTypeCaseDefs(trees: List[TypeCaseDef])(using ctx: Context): List[TypeCaseDef] =
143+
def transformTypeCaseDefs(trees: List[TypeCaseDef])(using Owner): List[TypeCaseDef] =
146144
trees mapConserve (transformTypeCaseDef(_))
147145

148146
}

0 commit comments

Comments
 (0)