From acefb735f12504088d6f306d3caab430c48fe8f1 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Mon, 18 Feb 2019 07:51:36 +0100 Subject: [PATCH] Add missing positions to trees created with TASTy reflect --- .../dotc/tastyreflect/ContextOpsImpl.scala | 4 -- .../tools/dotc/tastyreflect/Helpers.scala | 2 + .../dotc/tastyreflect/ReflectionImpl.scala | 1 + .../dotc/tastyreflect/RootPositionImpl.scala | 13 +++++ .../tools/dotc/tastyreflect/TreeOpsImpl.scala | 51 ++++++++++--------- .../TypeOrBoundsTreesOpsImpl.scala | 24 ++++----- library/src/scala/tasty/Reflection.scala | 1 + .../src/scala/tasty/reflect/ContextOps.scala | 3 -- .../scala/tasty/reflect/RootPosition.scala | 8 +++ 9 files changed, 63 insertions(+), 44 deletions(-) create mode 100644 compiler/src/dotty/tools/dotc/tastyreflect/RootPositionImpl.scala create mode 100644 library/src/scala/tasty/reflect/RootPosition.scala diff --git a/compiler/src/dotty/tools/dotc/tastyreflect/ContextOpsImpl.scala b/compiler/src/dotty/tools/dotc/tastyreflect/ContextOpsImpl.scala index acac5c915e68..256389aa4aa6 100644 --- a/compiler/src/dotty/tools/dotc/tastyreflect/ContextOpsImpl.scala +++ b/compiler/src/dotty/tools/dotc/tastyreflect/ContextOpsImpl.scala @@ -1,7 +1,5 @@ package dotty.tools.dotc.tastyreflect -import dotty.tools.dotc.util.{Spans, SourcePosition} - trait ContextOpsImpl extends scala.tasty.reflect.ContextOps with CoreImpl { val rootContext: Context @@ -12,6 +10,4 @@ trait ContextOpsImpl extends scala.tasty.reflect.ContextOps with CoreImpl { def source: java.nio.file.Path = ctx.compilationUnit.source.file.jpath } - def rootPosition: SourcePosition = SourcePosition(rootContext.source, Spans.NoSpan) - } diff --git a/compiler/src/dotty/tools/dotc/tastyreflect/Helpers.scala b/compiler/src/dotty/tools/dotc/tastyreflect/Helpers.scala index 6c6970f15b88..9579063f0f7e 100644 --- a/compiler/src/dotty/tools/dotc/tastyreflect/Helpers.scala +++ b/compiler/src/dotty/tools/dotc/tastyreflect/Helpers.scala @@ -1,6 +1,8 @@ package dotty.tools.dotc.tastyreflect import dotty.tools.dotc.ast.Trees +import dotty.tools.dotc.ast.tpd +import dotty.tools.dotc.core.Contexts._ trait Helpers { diff --git a/compiler/src/dotty/tools/dotc/tastyreflect/ReflectionImpl.scala b/compiler/src/dotty/tools/dotc/tastyreflect/ReflectionImpl.scala index 4f3e9cf7a12c..34a2a37285e4 100644 --- a/compiler/src/dotty/tools/dotc/tastyreflect/ReflectionImpl.scala +++ b/compiler/src/dotty/tools/dotc/tastyreflect/ReflectionImpl.scala @@ -15,6 +15,7 @@ class ReflectionImpl(val rootContext: Contexts.Context) with PatternOpsImpl with PositionOpsImpl with PrintersImpl + with RootPositionImpl with SettingsOpsImpl with SignatureOpsImpl with StandardDefinitions diff --git a/compiler/src/dotty/tools/dotc/tastyreflect/RootPositionImpl.scala b/compiler/src/dotty/tools/dotc/tastyreflect/RootPositionImpl.scala new file mode 100644 index 000000000000..3e21bd0449f4 --- /dev/null +++ b/compiler/src/dotty/tools/dotc/tastyreflect/RootPositionImpl.scala @@ -0,0 +1,13 @@ +package dotty.tools.dotc.tastyreflect + +import dotty.tools.dotc.util.{SourcePosition, Spans} + +trait RootPositionImpl extends scala.tasty.reflect.RootPosition with ContextOpsImpl with CoreImpl { + + def rootPosition: SourcePosition = SourcePosition(rootContext.source, Spans.NoSpan) + + protected def withDefaultPos[T <: Tree](fn: Context => T)(implicit ctx: Context): T = { + fn(ctx.withSource(rootPosition.source)).withSpan(rootPosition.span) + } + +} diff --git a/compiler/src/dotty/tools/dotc/tastyreflect/TreeOpsImpl.scala b/compiler/src/dotty/tools/dotc/tastyreflect/TreeOpsImpl.scala index 3434c43da8a3..35b4007963e8 100644 --- a/compiler/src/dotty/tools/dotc/tastyreflect/TreeOpsImpl.scala +++ b/compiler/src/dotty/tools/dotc/tastyreflect/TreeOpsImpl.scala @@ -7,7 +7,7 @@ import dotty.tools.dotc.core.Symbols.NoSymbol import dotty.tools.dotc.core._ import dotty.tools.dotc.tastyreflect.FromSymbol.{definitionFromSym, packageDefFromSym} -trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers { +trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with RootPositionImpl with Helpers { def TreeDeco(tree: Tree): TreeAPI = new TreeAPI { def pos(implicit ctx: Context): Position = tree.sourcePos @@ -190,7 +190,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object PackageClause extends PackageClauseModule { def apply(pid: Term.Ref, stats: List[Tree])(implicit ctx: Context): PackageClause = - tpd.PackageDef(pid.asInstanceOf[tpd.RefTree], stats) + withDefaultPos(ctx => tpd.PackageDef(pid.asInstanceOf[tpd.RefTree], stats)(ctx)) def copy(original: PackageClause)(pid: Term.Ref, stats: List[Tree])(implicit ctx: Context): PackageClause = tpd.cpy.PackageDef(original)(pid, stats) @@ -210,7 +210,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object Import extends ImportModule { def apply(impliedOnly: Boolean, expr: Term, selectors: List[ImportSelector])(implicit ctx: Context): Import = - tpd.Import(impliedOnly, expr, selectors) + withDefaultPos(ctx => tpd.Import(impliedOnly, expr, selectors)(ctx)) def copy(original: Import)(impliedOnly: Boolean, expr: Term, selectors: List[ImportSelector])(implicit ctx: Context): Import = tpd.cpy.Import(original)(impliedOnly, expr, selectors) @@ -276,7 +276,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object DefDef extends DefDefModule { def apply(symbol: DefSymbol, rhsFn: List[Type] => List[List[Term]] => Option[Term])(implicit ctx: Context): DefDef = - tpd.polyDefDef(symbol, tparams => vparamss => rhsFn(tparams)(vparamss).getOrElse(tpd.EmptyTree)) + withDefaultPos(ctx => tpd.polyDefDef(symbol, tparams => vparamss => rhsFn(tparams)(vparamss).getOrElse(tpd.EmptyTree))(ctx)) def copy(original: DefDef)(name: String, typeParams: List[TypeDef], paramss: List[List[ValDef]], tpt: TypeTree, rhs: Option[Term])(implicit ctx: Context): DefDef = tpd.cpy.DefDef(original)(name.toTermName, typeParams, paramss, tpt, rhs.getOrElse(tpd.EmptyTree)) @@ -323,7 +323,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers } object TypeDef extends TypeDefModule { - def apply(symbol: TypeSymbol)(implicit ctx: Context): TypeDef = tpd.TypeDef(symbol) + def apply(symbol: TypeSymbol)(implicit ctx: Context): TypeDef = withDefaultPos(ctx => tpd.TypeDef(symbol)(ctx)) def copy(original: TypeDef)(name: String, rhs: TypeOrBoundsTree)(implicit ctx: Context): TypeDef = tpd.cpy.TypeDef(original)(name.toTypeName, rhs) def unapply(tree: Tree)(implicit ctx: Context): Option[(String, TypeOrBoundsTree /* TypeTree | TypeBoundsTree */)] = tree match { @@ -379,7 +379,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object Ref extends RefModule { - def apply(sym: Symbol)(implicit ctx: Context): Ref = tpd.ref(sym).asInstanceOf[tpd.RefTree] + def apply(sym: Symbol)(implicit ctx: Context): Ref = withDefaultPos(ctx => tpd.ref(sym)(ctx).asInstanceOf[tpd.RefTree]) } object Ident extends IdentModule { @@ -422,7 +422,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object Literal extends LiteralModule { def apply(constant: Constant)(implicit ctx: Context): Literal = - tpd.Literal(constant) + withDefaultPos(ctx => tpd.Literal(constant)(ctx)) def copy(original: Tree)(constant: Constant)(implicit ctx: Context): Literal = tpd.cpy.Literal(original)(constant) @@ -444,7 +444,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object This extends ThisModule { def apply(cls: ClassSymbol)(implicit ctx: Context): This = - tpd.This(cls) + withDefaultPos(ctx => tpd.This(cls)(ctx)) def copy(original: Tree)(qual: Option[Id])(implicit ctx: Context): This = tpd.cpy.This(original)(qual.getOrElse(untpd.EmptyTypeIdent)) @@ -464,7 +464,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object New extends NewModule { - def apply(tpt: TypeTree)(implicit ctx: Context): New = tpd.New(tpt) + def apply(tpt: TypeTree)(implicit ctx: Context): New = withDefaultPos(ctx => tpd.New(tpt)(ctx)) def copy(original: Tree)(tpt: TypeTree)(implicit ctx: Context): New = tpd.cpy.New(original)(tpt) @@ -490,7 +490,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object NamedArg extends NamedArgModule { def apply(name: String, arg: Term)(implicit ctx: Context): NamedArg = - tpd.NamedArg(name.toTermName, arg) + withDefaultPos(ctx => tpd.NamedArg(name.toTermName, arg)(ctx)) def copy(tree: NamedArg)(name: String, arg: Term)(implicit ctx: Context): NamedArg = tpd.cpy.NamedArg(tree)(name.toTermName, arg) @@ -512,7 +512,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object Apply extends ApplyModule { def apply(fn: Term, args: List[Term])(implicit ctx: Context): Apply = - tpd.Apply(fn, args) + withDefaultPos(ctx => tpd.Apply(fn, args)(ctx)) def copy(original: Tree)(fun: Term, args: List[Term])(implicit ctx: Context): Apply = tpd.cpy.Apply(original)(fun, args) @@ -534,7 +534,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object TypeApply extends TypeApplyModule { def apply(fn: Term, args: List[TypeTree])(implicit ctx: Context): TypeApply = - tpd.TypeApply(fn, args) + withDefaultPos(ctx => tpd.TypeApply(fn, args)(ctx)) def copy(original: Tree)(fun: Term, args: List[TypeTree])(implicit ctx: Context): TypeApply = tpd.cpy.TypeApply(original)(fun, args) @@ -555,7 +555,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object Super extends SuperModule { def apply(qual: Term, mix: Option[Id])(implicit ctx: Context): Super = - tpd.Super(qual, mix.getOrElse(untpd.EmptyTypeIdent), false, NoSymbol) + withDefaultPos(ctx => tpd.Super(qual, mix.getOrElse(untpd.EmptyTypeIdent), false, NoSymbol)(ctx)) def copy(original: Tree)(qual: Term, mix: Option[Id])(implicit ctx: Context): Super = tpd.cpy.Super(original)(qual, mix.getOrElse(untpd.EmptyTypeIdent)) @@ -576,7 +576,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object Typed extends TypedModule { def apply(expr: Term, tpt: TypeTree)(implicit ctx: Context): Typed = - tpd.Typed(expr, tpt) + withDefaultPos(ctx => tpd.Typed(expr, tpt)(ctx)) def copy(original: Tree)(expr: Term, tpt: TypeTree)(implicit ctx: Context): Typed = tpd.cpy.Typed(original)(expr, tpt) @@ -597,7 +597,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object Assign extends AssignModule { def apply(lhs: Term, rhs: Term)(implicit ctx: Context): Assign = - tpd.Assign(lhs, rhs) + withDefaultPos(ctx => tpd.Assign(lhs, rhs)(ctx)) def copy(original: Tree)(lhs: Term, rhs: Term)(implicit ctx: Context): Assign = tpd.cpy.Assign(original)(lhs, rhs) @@ -647,7 +647,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object Block extends BlockModule { def apply(stats: List[Statement], expr: Term)(implicit ctx: Context): Block = - tpd.Block(stats, expr) + withDefaultPos(ctx => tpd.Block(stats, expr)(ctx)) def copy(original: Tree)(stats: List[Statement], expr: Term)(implicit ctx: Context): Block = tpd.cpy.Block(original)(stats, expr) @@ -668,7 +668,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object Inlined extends InlinedModule { def apply(call: Option[TermOrTypeTree], bindings: List[Definition], expansion: Term)(implicit ctx: Context): Inlined = - tpd.Inlined(call.getOrElse(tpd.EmptyTree), bindings.map { case b: tpd.MemberDef => b }, expansion) + withDefaultPos(ctx => tpd.Inlined(call.getOrElse(tpd.EmptyTree), bindings.map { case b: tpd.MemberDef => b }, expansion)(ctx)) def copy(original: Tree)(call: Option[TermOrTypeTree], bindings: List[Definition], expansion: Term)(implicit ctx: Context): Inlined = tpd.cpy.Inlined(original)(call.getOrElse(tpd.EmptyTree), bindings.asInstanceOf[List[tpd.MemberDef]], expansion) @@ -690,7 +690,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object Lambda extends LambdaModule { def apply(meth: Term, tpt: Option[TypeTree])(implicit ctx: Context): Lambda = - tpd.Closure(Nil, meth, tpt.getOrElse(tpd.EmptyTree)) + withDefaultPos(ctx => tpd.Closure(Nil, meth, tpt.getOrElse(tpd.EmptyTree))(ctx)) def copy(original: Tree)(meth: Tree, tpt: Option[TypeTree])(implicit ctx: Context): Lambda = tpd.cpy.Closure(original)(Nil, meth, tpt.getOrElse(tpd.EmptyTree)) @@ -711,7 +711,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object If extends IfModule { def apply(cond: Term, thenp: Term, elsep: Term)(implicit ctx: Context): If = - tpd.If(cond, thenp, elsep) + withDefaultPos(ctx => tpd.If(cond, thenp, elsep)(ctx)) def copy(original: Tree)(cond: Term, thenp: Term, elsep: Term)(implicit ctx: Context): If = tpd.cpy.If(original)(cond, thenp, elsep) @@ -732,7 +732,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object Match extends MatchModule { def apply(selector: Term, cases: List[CaseDef])(implicit ctx: Context): Match = - tpd.Match(selector, cases) + withDefaultPos(ctx => tpd.Match(selector, cases)(ctx)) def copy(original: Tree)(selector: Term, cases: List[CaseDef])(implicit ctx: Context): Match = tpd.cpy.Match(original)(selector, cases) @@ -753,7 +753,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object Try extends TryModule { def apply(expr: Term, cases: List[CaseDef], finalizer: Option[Term])(implicit ctx: Context): Try = - tpd.Try(expr, cases, finalizer.getOrElse(tpd.EmptyTree)) + withDefaultPos(ctx => tpd.Try(expr, cases, finalizer.getOrElse(tpd.EmptyTree))(ctx)) def copy(original: Tree)(expr: Term, cases: List[CaseDef], finalizer: Option[Term])(implicit ctx: Context): Try = tpd.cpy.Try(original)(expr, cases, finalizer.getOrElse(tpd.EmptyTree)) @@ -774,7 +774,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object Return extends ReturnModule { def apply(expr: Term)(implicit ctx: Context): Return = - tpd.Return(expr, ctx.owner) + withDefaultPos(ctx => tpd.Return(expr, ctx.owner)(ctx)) def copy(original: Tree)(expr: Term)(implicit ctx: Context): Return = tpd.cpy.Return(original)(expr, tpd.ref(ctx.owner)) @@ -795,7 +795,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object Repeated extends RepeatedModule { def apply(elems: List[Term], elemtpt: TypeTree)(implicit ctx: Context): Repeated = - tpd.SeqLiteral(elems, elemtpt) + withDefaultPos(ctx => tpd.SeqLiteral(elems, elemtpt)(ctx)) def copy(original: Tree)(elems: List[Term], elemtpt: TypeTree)(implicit ctx: Context): Repeated = tpd.cpy.SeqLiteral(original)(elems, elemtpt) @@ -821,7 +821,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object SelectOuter extends SelectOuterModule { def apply(qualifier: Term, name: String, levels: Int)(implicit ctx: Context): SelectOuter = - tpd.Select(qualifier, NameKinds.OuterSelectName(name.toTermName, levels)) + withDefaultPos(ctx => tpd.Select(qualifier, NameKinds.OuterSelectName(name.toTermName, levels))(ctx)) def copy(original: Tree)(qualifier: Term, name: String, levels: Int)(implicit ctx: Context): SelectOuter = tpd.cpy.Select(original)(qualifier, NameKinds.OuterSelectName(name.toTermName, levels)) @@ -846,7 +846,7 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers object While extends WhileModule { def apply(cond: Term, body: Term)(implicit ctx: Context): While = - tpd.WhileDo(cond, body) + withDefaultPos(ctx => tpd.WhileDo(cond, body)(ctx)) def copy(original: Tree)(cond: Term, body: Term)(implicit ctx: Context): While = tpd.cpy.WhileDo(original)(cond, body) @@ -859,4 +859,5 @@ trait TreeOpsImpl extends scala.tasty.reflect.TreeOps with CoreImpl with Helpers } def termAsTermOrTypeTree(term: Term): TermOrTypeTree = term + } diff --git a/compiler/src/dotty/tools/dotc/tastyreflect/TypeOrBoundsTreesOpsImpl.scala b/compiler/src/dotty/tools/dotc/tastyreflect/TypeOrBoundsTreesOpsImpl.scala index 9072ee2a72e4..34f7d45e7169 100644 --- a/compiler/src/dotty/tools/dotc/tastyreflect/TypeOrBoundsTreesOpsImpl.scala +++ b/compiler/src/dotty/tools/dotc/tastyreflect/TypeOrBoundsTreesOpsImpl.scala @@ -6,7 +6,7 @@ import dotty.tools.dotc.core.StdNames.nme import dotty.tools.dotc.core.{Contexts, Types} -trait TypeOrBoundsTreesOpsImpl extends scala.tasty.reflect.TypeOrBoundsTreeOps with CoreImpl { +trait TypeOrBoundsTreesOpsImpl extends scala.tasty.reflect.TypeOrBoundsTreeOps with RootPositionImpl { def TypeTreeDeco(tpt: TypeTree): TypeTreeAPI = new TypeTreeAPI { def pos(implicit ctx: Context): Position = tpt.sourcePos @@ -115,7 +115,7 @@ trait TypeOrBoundsTreesOpsImpl extends scala.tasty.reflect.TypeOrBoundsTreeOps w } object Inferred extends InferredModule { - def apply(tpe: Type)(implicit ctx: Context): Inferred = tpd.TypeTree(tpe) + def apply(tpe: Type)(implicit ctx: Context): Inferred = withDefaultPos(ctx => tpd.TypeTree(tpe)(ctx)) def unapply(x: TypeTree)(implicit ctx: Context): Boolean = x match { case x @ Trees.TypeTree() => !x.tpe.isInstanceOf[Types.TypeBounds] @@ -148,7 +148,7 @@ trait TypeOrBoundsTreesOpsImpl extends scala.tasty.reflect.TypeOrBoundsTreeOps w object Select extends SelectModule { def apply(qualifier: Term, name: String)(implicit ctx: Context): Select = - tpd.Select(qualifier, name.toTypeName) + withDefaultPos(ctx => tpd.Select(qualifier, name.toTypeName)(ctx)) def copy(original: Select)(qualifier: Term, name: String)(implicit ctx: Context): Select = tpd.cpy.Select(original)(qualifier, name.toTypeName) @@ -185,7 +185,7 @@ trait TypeOrBoundsTreesOpsImpl extends scala.tasty.reflect.TypeOrBoundsTreeOps w object Singleton extends SingletonModule { def apply(ref: Term)(implicit ctx: Context): Singleton = - tpd.SingletonTypeTree(ref) + withDefaultPos(ctx => tpd.SingletonTypeTree(ref)(ctx)) def copy(original: Singleton)(ref: Term)(implicit ctx: Context): Singleton = tpd.cpy.SingletonTypeTree(original)(ref) @@ -222,7 +222,7 @@ trait TypeOrBoundsTreesOpsImpl extends scala.tasty.reflect.TypeOrBoundsTreeOps w object Applied extends AppliedModule { def apply(tpt: TypeTree, args: List[TypeOrBoundsTree])(implicit ctx: Context): Applied = - tpd.AppliedTypeTree(tpt, args) + withDefaultPos(ctx => tpd.AppliedTypeTree(tpt, args)(ctx)) def copy(original: Applied)(tpt: TypeTree, args: List[TypeOrBoundsTree])(implicit ctx: Context): Applied = tpd.cpy.AppliedTypeTree(original)(tpt, args) @@ -242,7 +242,7 @@ trait TypeOrBoundsTreesOpsImpl extends scala.tasty.reflect.TypeOrBoundsTreeOps w object Annotated extends AnnotatedModule { def apply(arg: TypeTree, annotation: Term)(implicit ctx: Context): Annotated = - tpd.Annotated(arg, annotation) + withDefaultPos(ctx => tpd.Annotated(arg, annotation)(ctx)) def copy(original: Annotated)(arg: TypeTree, annotation: Term)(implicit ctx: Context): Annotated = tpd.cpy.Annotated(original)(arg, annotation) @@ -262,7 +262,7 @@ trait TypeOrBoundsTreesOpsImpl extends scala.tasty.reflect.TypeOrBoundsTreeOps w object And extends AndModule { def apply(left: TypeTree, right: TypeTree)(implicit ctx: Context): And = - tpd.AndTypeTree(left, right) + withDefaultPos(ctx => tpd.AndTypeTree(left, right)(ctx)) def copy(original: And)(left: TypeTree, right: TypeTree)(implicit ctx: Context): And = tpd.cpy.AndTypeTree(original)(left, right) @@ -282,7 +282,7 @@ trait TypeOrBoundsTreesOpsImpl extends scala.tasty.reflect.TypeOrBoundsTreeOps w object Or extends OrModule { def apply(left: TypeTree, right: TypeTree)(implicit ctx: Context): Or = - tpd.OrTypeTree(left, right) + withDefaultPos(ctx => tpd.OrTypeTree(left, right)(ctx)) def copy(original: Or)(left: TypeTree, right: TypeTree)(implicit ctx: Context): Or = tpd.cpy.OrTypeTree(original)(left, right) @@ -302,7 +302,7 @@ trait TypeOrBoundsTreesOpsImpl extends scala.tasty.reflect.TypeOrBoundsTreeOps w object MatchType extends MatchTypeModule { def apply(bound: Option[TypeTree], selector: TypeTree, cases: List[TypeCaseDef])(implicit ctx: Context): MatchType = - tpd.MatchTypeTree(bound.getOrElse(tpd.EmptyTree), selector, cases) + withDefaultPos(ctx => tpd.MatchTypeTree(bound.getOrElse(tpd.EmptyTree), selector, cases)(ctx)) def copy(original: MatchType)(bound: Option[TypeTree], selector: TypeTree, cases: List[TypeCaseDef])(implicit ctx: Context): MatchType = tpd.cpy.MatchTypeTree(original)(bound.getOrElse(tpd.EmptyTree), selector, cases) @@ -322,7 +322,7 @@ trait TypeOrBoundsTreesOpsImpl extends scala.tasty.reflect.TypeOrBoundsTreeOps w object ByName extends ByNameModule { def apply(result: TypeTree)(implicit ctx: Context): ByName = - tpd.ByNameTypeTree(result) + withDefaultPos(ctx => tpd.ByNameTypeTree(result)(ctx)) def copy(original: ByName)(result: TypeTree)(implicit ctx: Context): ByName = tpd.cpy.ByNameTypeTree(original)(result) @@ -342,7 +342,7 @@ trait TypeOrBoundsTreesOpsImpl extends scala.tasty.reflect.TypeOrBoundsTreeOps w object LambdaTypeTree extends LambdaTypeTreeModule { def apply(tparams: List[TypeDef], body: TypeOrBoundsTree)(implicit ctx: Context): LambdaTypeTree = - tpd.LambdaTypeTree(tparams, body) + withDefaultPos(ctx => tpd.LambdaTypeTree(tparams, body)(ctx)) def copy(original: LambdaTypeTree)(tparams: List[TypeDef], body: TypeOrBoundsTree)(implicit ctx: Context): LambdaTypeTree = tpd.cpy.LambdaTypeTree(original)(tparams, body) @@ -380,7 +380,7 @@ trait TypeOrBoundsTreesOpsImpl extends scala.tasty.reflect.TypeOrBoundsTreeOps w object TypeBlock extends TypeBlockModule { def apply(aliases: List[TypeDef], tpt: TypeTree)(implicit ctx: Context): TypeBlock = - tpd.Block(aliases, tpt) + withDefaultPos(ctx => tpd.Block(aliases, tpt)(ctx)) def copy(original: TypeBlock)(aliases: List[TypeDef], tpt: TypeTree)(implicit ctx: Context): TypeBlock = tpd.cpy.Block(original)(aliases, tpt) diff --git a/library/src/scala/tasty/Reflection.scala b/library/src/scala/tasty/Reflection.scala index a512c990798d..66a69b065484 100644 --- a/library/src/scala/tasty/Reflection.scala +++ b/library/src/scala/tasty/Reflection.scala @@ -14,6 +14,7 @@ abstract class Reflection with PatternOps with PositionOps with Printers + with RootPosition with SettingsOps with SignatureOps with StandardDefinitions diff --git a/library/src/scala/tasty/reflect/ContextOps.scala b/library/src/scala/tasty/reflect/ContextOps.scala index 44fcf77aadcd..7f2c85715c31 100644 --- a/library/src/scala/tasty/reflect/ContextOps.scala +++ b/library/src/scala/tasty/reflect/ContextOps.scala @@ -13,7 +13,4 @@ trait ContextOps extends Core { implicit def rootContext: Context - /** Root position of this tasty context. For macros it corresponds to the expansion site. */ - def rootPosition: Position - } diff --git a/library/src/scala/tasty/reflect/RootPosition.scala b/library/src/scala/tasty/reflect/RootPosition.scala new file mode 100644 index 000000000000..3c5ed0af32db --- /dev/null +++ b/library/src/scala/tasty/reflect/RootPosition.scala @@ -0,0 +1,8 @@ +package scala.tasty.reflect + +trait RootPosition extends Core { + + /** Root position of this tasty context. For macros it corresponds to the expansion site. */ + def rootPosition: Position + +}