Skip to content

Commit f64b67d

Browse files
committed
WIP
1 parent 8d1b226 commit f64b67d

File tree

3 files changed

+34
-15
lines changed

3 files changed

+34
-15
lines changed

compiler/src/dotty/tools/dotc/tastyreflect/TreeOpsImpl.scala

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers
2121
}
2222

2323
object PackageClause extends PackageClauseModule {
24-
def apply(pid: Ref, stats: List[Tree])(implicit ctx: Context): PackageClause =
24+
def apply(pid: Term.Ref, stats: List[Tree])(implicit ctx: Context): PackageClause =
2525
tpd.PackageDef(pid.asInstanceOf[tpd.RefTree], stats)
2626

27-
def unapply(tree: Tree)(implicit ctx: Context): Option[(Ref, List[Tree])] = tree match {
27+
def unapply(tree: Tree)(implicit ctx: Context): Option[(Term.Ref, List[Tree])] = tree match {
2828
case x: tpd.PackageDef => Some((x.pid, x.stats))
2929
case _ => None
3030
}
@@ -34,8 +34,6 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers
3434

3535
}
3636

37-
// ----- Statements -----------------------------------------------
38-
3937
object Import extends ImportModule {
4038
def apply(expr: Term, selectors: List[ImportSelector])(implicit ctx: Context): Import =
4139
tpd.Import(expr, selectors)
@@ -51,6 +49,15 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers
5149
def selector(implicit ctx: Context): List[ImportSelector] = imp.selectors
5250
}
5351

52+
object IsStatement extends IsStatementModule {
53+
/** Matches any Statement and returns it */
54+
def unapply(tree: Tree)(implicit ctx: Context): Option[Statement] = tree match {
55+
case IsDefinition(tree) => Some(tree)
56+
case tree if tree.isTerm => Some(tree)
57+
case _ => None
58+
}
59+
}
60+
5461
// ----- Definitions ----------------------------------------------
5562

5663
object IsDefinition extends IsDefinitionModule {
@@ -737,10 +744,9 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers
737744

738745
object SelectOuter extends SelectOuterModule {
739746

740-
def apply(call: Option[TermOrTypeTree], bindings: List[Definition], expansion: Term)(implicit ctx: Context): Inlined =
741-
tpd.Inlined(call.getOrElse(tpd.EmptyTree), bindings.map { case b: tpd.MemberDef => b }, expansion)
747+
def apply(qualifier: Term, levels: Int, tpe: Type)(implicit ctx: Context): SelectOuter = ???
742748

743-
def copy(original: Tree)(call: Option[TermOrTypeTree], bindings: List[Definition], expansion: Term)(implicit ctx: Context): Inlined = ???
749+
def copy(original: Tree)(qualifier: Term, levels: Int, tpe: Type)(implicit ctx: Context): SelectOuter = ???
744750

745751
def unapply(x: Term)(implicit ctx: Context): Option[(Term, Int, Type)] = x match {
746752
case x: tpd.Select =>

library/src/scala/tasty/reflect/TreeOps.scala

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,15 @@ trait TreeOps extends Core {
1818

1919
val PackageClause: PackageClauseModule
2020
abstract class PackageClauseModule {
21-
def apply(pid: Ref, stats: List[Tree])(implicit ctx: Context): PackageClause
22-
def unapply(tree: Tree)(implicit ctx: Context): Option[(Ref, List[Tree])]
21+
def apply(pid: Term.Ref, stats: List[Tree])(implicit ctx: Context): PackageClause
22+
def unapply(tree: Tree)(implicit ctx: Context): Option[(Term.Ref, List[Tree])]
2323
}
2424

2525
trait PackageClauseAPI {
2626

2727
}
2828
implicit def PackageClauseDeco(pack: PackageClause): PackageClauseAPI
2929

30-
// ----- Statements -----------------------------------------------
31-
3230
val Import: ImportModule
3331
abstract class ImportModule {
3432
def apply(expr: Term, selectors: List[ImportSelector])(implicit ctx: Context): Import
@@ -41,6 +39,13 @@ trait TreeOps extends Core {
4139
}
4240
implicit def ImportDeco(imp: Import): ImportAPI
4341

42+
43+
val IsStatement: IsStatementModule
44+
abstract class IsStatementModule {
45+
/** Matches any Statement and returns it */
46+
def unapply(tree: Tree)(implicit ctx: Context): Option[Statement]
47+
}
48+
4449
// ----- Definitions ----------------------------------------------
4550

4651
val IsDefinition: IsDefinitionModule

library/src/scala/tasty/reflect/TreeUtils.scala

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -158,15 +158,20 @@ trait TreeUtils
158158
def transformTree(tree: Tree)(implicit ctx: Context): Tree = {
159159
def localCtx(definition: Definition): Context = definition.symbol.localContext
160160
tree match {
161-
case IsTerm(tree) => transformTerm(tree)
161+
case IsStatement(tree) => transformStatement(tree)
162162
}
163163
}
164164

165+
def transformStatement(tree: Statement)(implicit ctx: Context): Statement = tree match {
166+
case IsTerm(tree) => transformTerm(tree)
167+
168+
}
169+
165170
def transformTerm(tree: Term)(implicit ctx: Context): Term = {
166171
tree match {
167172
case Term.Ident(name) =>
168173
tree
169-
case Term.Select(qualifier, name, sig) =>
174+
case Term.Select(qualifier, name) =>
170175
Term.Select.copy(tree)(transformTerm(qualifier), name)
171176
case Term.This(qual) =>
172177
tree
@@ -186,8 +191,8 @@ trait TreeUtils
186191
// NamedArg.copy(tree)(name, transform(arg))
187192
// case Assign(lhs, rhs) =>
188193
// Assign.copy(tree)(transform(lhs), transform(rhs))
189-
// case Block(stats, expr) =>
190-
// Block.copy(tree)(transformStats(stats), transform(expr))
194+
case Term.Block(stats, expr) =>
195+
Term.Block.copy(tree)(transformStats(stats), transformTerm(expr))
191196
// case If(cond, thenp, elsep) =>
192197
// If.copy(tree)(transform(cond), transform(thenp), transform(elsep))
193198
// case Closure(env, meth, tpt) =>
@@ -269,6 +274,9 @@ trait TreeUtils
269274
???
270275
}
271276

277+
def transformStats(trees: List[Statement])(implicit ctx: Context): List[Statement] =
278+
trees mapConserve (transformStatement(_))
279+
272280
def transformTrees(trees: List[Tree])(implicit ctx: Context): List[Tree] =
273281
trees mapConserve (transformTree(_))
274282

0 commit comments

Comments
 (0)