Skip to content

Commit 5ca0b9a

Browse files
committed
Minor changes in ExtractExpression
1 parent c73fe36 commit 5ca0b9a

File tree

1 file changed

+31
-32
lines changed

1 file changed

+31
-32
lines changed

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

Lines changed: 31 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -32,26 +32,25 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
3232

3333
override def transformPhase(using Context): Phase = this.next
3434

35-
override protected def newTransformer(using Context): Transformer =
36-
new Transformer:
37-
var expressionTree: Tree | Null = null
38-
override def transform(tree: Tree)(using Context): Tree =
39-
tree match
40-
case PackageDef(pid, stats) =>
41-
val evaluationClassDef =
42-
stats.find(_.symbol == config.expressionClass)
43-
val others = stats.filter(_.symbol != config.expressionClass)
44-
val transformedStats = (others ++ evaluationClassDef).map(transform)
45-
PackageDef(pid, transformedStats)
46-
case tree: ValDef if isExpressionVal(tree.symbol) =>
47-
expressionTree = tree.rhs
48-
expressionStore.store(tree.symbol)
49-
unitLiteral
50-
case tree: DefDef if tree.symbol == config.evaluateMethod =>
51-
val transformedExpr = ExpressionTransformer.transform(expressionTree.nn)
52-
cpy.DefDef(tree)(rhs = transformedExpr)
53-
case tree =>
54-
super.transform(tree)
35+
override protected def newTransformer(using Context): Transformer = new ExtractExpressionTransformer
36+
37+
private class ExtractExpressionTransformer extends Transformer:
38+
private var expressionTree: Tree | Null = null
39+
override def transform(tree: Tree)(using Context): Tree =
40+
tree match
41+
case PackageDef(pid, stats) =>
42+
val (evaluationClassDef, others) = stats.partition(_.symbol == config.expressionClass)
43+
val transformedStats = (others ++ evaluationClassDef).map(transform)
44+
cpy.PackageDef(tree)(pid, transformedStats)
45+
case tree: ValDef if isExpressionVal(tree.symbol) =>
46+
expressionTree = tree.rhs
47+
expressionStore.store(tree.symbol)
48+
unitLiteral
49+
case tree: DefDef if tree.symbol == config.evaluateMethod =>
50+
val transformedExpr = ExpressionTransformer.transform(expressionTree.nn)
51+
cpy.DefDef(tree)(rhs = transformedExpr)
52+
case tree =>
53+
super.transform(tree)
5554

5655
private object ExpressionTransformer extends TreeMap:
5756
override def transform(tree: Tree)(using Context): Tree =
@@ -73,7 +72,7 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
7372

7473
// non-static object
7574
case tree: (Ident | Select) if isNonStaticObject(tree.symbol) =>
76-
callMethod(tree)(getTransformedQualifier(tree), tree.symbol.asTerm, List.empty)
75+
callMethod(tree)(getTransformedQualifier(tree), tree.symbol.asTerm, Nil)
7776

7877
// local variable
7978
case tree: Ident if isLocalVariable(tree.symbol) =>
@@ -141,7 +140,7 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
141140

142141
private def getTransformedArgs(tree: Tree)(using Context): List[Tree] =
143142
tree match
144-
case _: (Ident | Select) => List.empty
143+
case _: (Ident | Select) => Nil
145144
case Apply(fun, args) => getTransformedArgs(fun) ++ args.map(transform)
146145
case TypeApply(fun, _) => getTransformedArgs(fun)
147146

@@ -197,20 +196,20 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
197196
else nullLiteral
198197

199198
private def getThis(tree: Tree)(cls: ClassSymbol)(using Context): Tree =
200-
reflectEval(tree)(nullLiteral, ReflectEvalStrategy.This(cls), List.empty)
199+
reflectEval(tree)(nullLiteral, ReflectEvalStrategy.This(cls), Nil)
201200

202201
private def getLocalOuter(tree: Tree)(outerCls: ClassSymbol)(using Context): Tree =
203202
val strategy = ReflectEvalStrategy.LocalOuter(outerCls)
204-
reflectEval(tree)(nullLiteral, strategy, List.empty)
203+
reflectEval(tree)(nullLiteral, strategy, Nil)
205204

206205
private def getOuter(tree: Tree)(qualifier: Tree, outerCls: ClassSymbol)(using Context): Tree =
207206
val strategy = ReflectEvalStrategy.Outer(outerCls)
208-
reflectEval(tree)(qualifier, strategy, List.empty)
207+
reflectEval(tree)(qualifier, strategy, Nil)
209208

210209
private def getLocalValue(tree: Tree)(variable: Symbol)(using Context): Tree =
211210
val isByName = isByNameParam(variable.info)
212211
val strategy = ReflectEvalStrategy.LocalValue(variable.asTerm, isByName)
213-
reflectEval(tree)(nullLiteral, strategy, List.empty)
212+
reflectEval(tree)(nullLiteral, strategy, Nil)
214213

215214
private def isByNameParam(tpe: Type)(using Context): Boolean =
216215
tpe match
@@ -226,7 +225,7 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
226225
val byName = isByNameParam(variable.info)
227226
val strategy = ReflectEvalStrategy.ClassCapture(variable.asTerm, cls, byName)
228227
val qualifier = thisOrOuterValue(tree)(cls)
229-
reflectEval(tree)(qualifier, strategy, List.empty)
228+
reflectEval(tree)(qualifier, strategy, Nil)
230229

231230
private def setClassCapture(tree: Tree)(variable: Symbol, cls: ClassSymbol, value: Tree)(using Context) =
232231
val strategy = ReflectEvalStrategy.ClassCaptureAssign(variable.asTerm, cls)
@@ -237,7 +236,7 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
237236
val isByName = isByNameParam(variable.info)
238237
val strategy =
239238
ReflectEvalStrategy.MethodCapture(variable.asTerm, method.asTerm, isByName)
240-
reflectEval(tree)(nullLiteral, strategy, List.empty)
239+
reflectEval(tree)(nullLiteral, strategy, Nil)
241240

242241
private def setMethodCapture(tree: Tree)(variable: Symbol, method: Symbol, value: Tree)(using Context) =
243242
val strategy =
@@ -246,12 +245,12 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
246245

247246
private def getStaticObject(tree: Tree)(obj: Symbol)(using ctx: Context): Tree =
248247
val strategy = ReflectEvalStrategy.StaticObject(obj.asClass)
249-
reflectEval(tree)(nullLiteral, strategy, List.empty)
248+
reflectEval(tree)(nullLiteral, strategy, Nil)
250249

251250
private def getField(tree: Tree)(qualifier: Tree, field: TermSymbol)(using Context): Tree =
252251
val byName = isByNameParam(field.info)
253252
val strategy = ReflectEvalStrategy.Field(field, byName)
254-
reflectEval(tree)(qualifier, strategy, List.empty)
253+
reflectEval(tree)(qualifier, strategy, Nil)
255254

256255
private def setField(tree: Tree)(qualifier: Tree, field: TermSymbol, rhs: Tree)(using Context): Tree =
257256
val strategy = ReflectEvalStrategy.FieldAssign(field)
@@ -272,7 +271,7 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
272271
)(using Context): Tree =
273272
val evalArgs = List(
274273
qualifier,
275-
Literal(Constant(strategy.toString)),
274+
Literal(Constant(strategy.toString)), // only useful for debugging, when printing trees
276275
JavaSeqLiteral(args, TypeTree(ctx.definitions.ObjectType))
277276
)
278277
cpy
@@ -318,4 +317,4 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
318317
symbol.ownersIterator.exists(_ == evaluateMethod)
319318

320319
private object ExtractExpression:
321-
val name: String = "extract-expression"
320+
val name: String = "extractExpression"

0 commit comments

Comments
 (0)