diff --git a/community-build/community-projects/intent b/community-build/community-projects/intent index e5f5eb0bb942..a7c71df19b7e 160000 --- a/community-build/community-projects/intent +++ b/community-build/community-projects/intent @@ -1 +1 @@ -Subproject commit e5f5eb0bb9424727e70b78cc10a6c6daed78d9a2 +Subproject commit a7c71df19b7e2003986df01ea882d75a36b9a388 diff --git a/community-build/community-projects/minitest b/community-build/community-projects/minitest index 81b77be2db6f..a9dce860ed53 160000 --- a/community-build/community-projects/minitest +++ b/community-build/community-projects/minitest @@ -1 +1 @@ -Subproject commit 81b77be2db6f290a638ee87f10ecef1948d9313a +Subproject commit a9dce860ed5346b15bf28a35681ba18989ed2cb6 diff --git a/community-build/community-projects/munit b/community-build/community-projects/munit index 2d4c5315b871..1c7f7725275a 160000 --- a/community-build/community-projects/munit +++ b/community-build/community-projects/munit @@ -1 +1 @@ -Subproject commit 2d4c5315b871c8d76eda1c96d09984577a806783 +Subproject commit 1c7f7725275ae0a7f2e112d9e6e44a8110bc8294 diff --git a/community-build/community-projects/scalatest b/community-build/community-projects/scalatest index 45be76a0a5ec..ca500725dd96 160000 --- a/community-build/community-projects/scalatest +++ b/community-build/community-projects/scalatest @@ -1 +1 @@ -Subproject commit 45be76a0a5ecbdbd35aae2502a725618f1180703 +Subproject commit ca500725dd96618b625bac33226e387d754a67c1 diff --git a/community-build/community-projects/sourcecode b/community-build/community-projects/sourcecode index 7c681808819e..93a368734acf 160000 --- a/community-build/community-projects/sourcecode +++ b/community-build/community-projects/sourcecode @@ -1 +1 @@ -Subproject commit 7c681808819e71f73209016fe88422b1025a208b +Subproject commit 93a368734acf082d653592770c5b064270476ee7 diff --git a/compiler/src/dotty/tools/dotc/quoted/QuoteContextImpl.scala b/compiler/src/dotty/tools/dotc/quoted/QuoteContextImpl.scala index bb314a573d87..a0aa5ada96e5 100644 --- a/compiler/src/dotty/tools/dotc/quoted/QuoteContextImpl.scala +++ b/compiler/src/dotty/tools/dotc/quoted/QuoteContextImpl.scala @@ -54,9 +54,6 @@ class QuoteContextImpl private (ctx: Context) extends QuoteContext: def rootContext: Context = ctx - def rootPosition: dotc.util.SourcePosition = - MacroExpansion.position.getOrElse(dotc.util.SourcePosition(rootContext.source, dotc.util.Spans.NoSpan)) - type Context = dotc.core.Contexts.Context type Tree = tpd.Tree @@ -2185,7 +2182,7 @@ class QuoteContextImpl private (ctx: Context) extends QuoteContext: object Implicits extends ImplicitsModule: def search(tpe: TypeRepr): ImplicitSearchResult = - ctx.typer.inferImplicitArg(tpe, rootPosition.span) + ctx.typer.inferImplicitArg(tpe, Position.ofMacroExpansion.span) end Implicits type ImplicitSearchResult = Tree @@ -2544,7 +2541,10 @@ class QuoteContextImpl private (ctx: Context) extends QuoteContext: type Position = dotc.util.SourcePosition - object Position extends PositionModule + object Position extends PositionModule: + def ofMacroExpansion: dotc.util.SourcePosition = + MacroExpansion.position.getOrElse(dotc.util.SourcePosition(rootContext.source, dotc.util.Spans.NoSpan)) + end Position object PositionMethodsImpl extends PositionMethods: extension (self: Position): @@ -2616,7 +2616,7 @@ class QuoteContextImpl private (ctx: Context) extends QuoteContext: if tree.isEmpty then None else Some(tree) private def withDefaultPos[T <: Tree](fn: Context ?=> T): T = - fn(using ctx.withSource(rootPosition.source)).withSpan(rootPosition.span) + fn(using ctx.withSource(Position.ofMacroExpansion.source)).withSpan(Position.ofMacroExpansion.span) def unpickleTerm(pickledQuote: PickledQuote): Term = PickledQuotes.unpickleTerm(pickledQuote) diff --git a/library/src-bootstrapped/scala/quoted/report.scala b/library/src-bootstrapped/scala/quoted/report.scala index e84c115c9264..6ea786d4d7bd 100644 --- a/library/src-bootstrapped/scala/quoted/report.scala +++ b/library/src-bootstrapped/scala/quoted/report.scala @@ -4,7 +4,7 @@ object report: /** Report an error at the position of the macro expansion */ def error(msg: => String)(using qctx: QuoteContext): Unit = - qctx.reflect.Reporting.error(msg, qctx.reflect.rootPosition) + qctx.reflect.Reporting.error(msg, qctx.reflect.Position.ofMacroExpansion) /** Report an error at the on the position of `expr` */ def error(msg: => String, expr: Expr[Any])(using qctx: QuoteContext): Unit = @@ -23,7 +23,7 @@ object report: /** Report a warning */ def warning(msg: => String)(using qctx: QuoteContext): Unit = - qctx.reflect.Reporting.warning(msg, qctx.reflect.rootPosition) + qctx.reflect.Reporting.warning(msg, qctx.reflect.Position.ofMacroExpansion) /** Report a warning at the on the position of `expr` */ def warning(msg: => String, expr: Expr[_])(using qctx: QuoteContext): Unit = diff --git a/library/src/scala/tasty/Reflection.scala b/library/src/scala/tasty/Reflection.scala index 5274f5cc3af4..2c108f785c2a 100644 --- a/library/src/scala/tasty/Reflection.scala +++ b/library/src/scala/tasty/Reflection.scala @@ -3165,17 +3165,16 @@ trait Reflection { reflection => // POSITIONS // /////////////// - // TODO: Should this be in the QuoteContext? - // TODO: rename to enclosingPosition (as in scala.reflect) - /** Root position of this tasty context. For macros it corresponds to the expansion site. */ - def rootPosition: Position /** Position in a source file */ type Position <: AnyRef val Position: PositionModule - trait PositionModule { this: Position.type => } + trait PositionModule { this: Position.type => + /** Position of the expansion site of the macro */ + def ofMacroExpansion: Position + } given PositionMethods as PositionMethods = PositionMethodsImpl protected val PositionMethodsImpl: PositionMethods diff --git a/tests/neg-macros/delegate-match-1/Macro_1.scala b/tests/neg-macros/delegate-match-1/Macro_1.scala index 73e6bc454259..267ad0851a26 100644 --- a/tests/neg-macros/delegate-match-1/Macro_1.scala +++ b/tests/neg-macros/delegate-match-1/Macro_1.scala @@ -9,13 +9,13 @@ private def fImpl(using qctx: QuoteContext): Expr[Unit] = { case x: ImplicitSearchSuccess => '{} case x: DivergingImplicit => '{} - Reporting.error("DivergingImplicit\n" + x.explanation, rootPosition) + Reporting.error("DivergingImplicit\n" + x.explanation, Position.ofMacroExpansion) '{} case x: NoMatchingImplicits => - Reporting.error("NoMatchingImplicits\n" + x.explanation, rootPosition) + Reporting.error("NoMatchingImplicits\n" + x.explanation, Position.ofMacroExpansion) '{} case x: AmbiguousImplicits => - Reporting.error("AmbiguousImplicits\n" + x.explanation, rootPosition) + Reporting.error("AmbiguousImplicits\n" + x.explanation, Position.ofMacroExpansion) '{} } } diff --git a/tests/neg-macros/delegate-match-2/Macro_1.scala b/tests/neg-macros/delegate-match-2/Macro_1.scala index 6a30da2ef7fb..b8f1347cb136 100644 --- a/tests/neg-macros/delegate-match-2/Macro_1.scala +++ b/tests/neg-macros/delegate-match-2/Macro_1.scala @@ -9,13 +9,13 @@ private def fImpl (using qctx: QuoteContext) : Expr[Unit] = { case x: ImplicitSearchSuccess => '{} case x: DivergingImplicit => '{} - Reporting.error("DivergingImplicit\n" + x.explanation, rootPosition) + Reporting.error("DivergingImplicit\n" + x.explanation, Position.ofMacroExpansion) '{} case x: NoMatchingImplicits => - Reporting.error("NoMatchingImplicits\n" + x.explanation, rootPosition) + Reporting.error("NoMatchingImplicits\n" + x.explanation, Position.ofMacroExpansion) '{} case x: AmbiguousImplicits => - Reporting.error("AmbiguousImplicits\n" + x.explanation, rootPosition) + Reporting.error("AmbiguousImplicits\n" + x.explanation, Position.ofMacroExpansion) '{} } } diff --git a/tests/neg-macros/delegate-match-3/Macro_1.scala b/tests/neg-macros/delegate-match-3/Macro_1.scala index db3a2b0b7163..2209dc26ee57 100644 --- a/tests/neg-macros/delegate-match-3/Macro_1.scala +++ b/tests/neg-macros/delegate-match-3/Macro_1.scala @@ -9,13 +9,13 @@ private def fImpl(using qctx: QuoteContext) : Expr[Unit] = { case x: ImplicitSearchSuccess => '{} case x: DivergingImplicit => '{} - Reporting.error("DivergingImplicit\n" + x.explanation, rootPosition) + Reporting.error("DivergingImplicit\n" + x.explanation, Position.ofMacroExpansion) '{} case x: NoMatchingImplicits => - Reporting.error("NoMatchingImplicits\n" + x.explanation, rootPosition) + Reporting.error("NoMatchingImplicits\n" + x.explanation, Position.ofMacroExpansion) '{} case x: AmbiguousImplicits => - Reporting.error("AmbiguousImplicits\n" + x.explanation, rootPosition) + Reporting.error("AmbiguousImplicits\n" + x.explanation, Position.ofMacroExpansion) '{} } } diff --git a/tests/neg-macros/macros-in-same-project-6/Foo.scala b/tests/neg-macros/macros-in-same-project-6/Foo.scala index 028dc0597093..fbc55db03e72 100644 --- a/tests/neg-macros/macros-in-same-project-6/Foo.scala +++ b/tests/neg-macros/macros-in-same-project-6/Foo.scala @@ -6,7 +6,7 @@ object Foo { def aMacroImplementation(using qctx: QuoteContext) : Expr[Unit] = { import qctx.reflect._ - Reporting.error("some error", rootPosition) + Reporting.error("some error", Position.ofMacroExpansion) throw new NoClassDefFoundError("Bar$") } } diff --git a/tests/pos-macros/i6803b/Macro_1.scala b/tests/pos-macros/i6803b/Macro_1.scala index f66cbbb6eb92..b7d392939446 100644 --- a/tests/pos-macros/i6803b/Macro_1.scala +++ b/tests/pos-macros/i6803b/Macro_1.scala @@ -10,7 +10,7 @@ object AsObject { inline given x as LineNo = ${impl} private def impl(using qctx: QuoteContext) : Expr[LineNo] = { import qctx.reflect._ - '{unsafe(${Expr(rootPosition.startLine)})} + '{unsafe(${Expr(Position.ofMacroExpansion.startLine)})} } } } diff --git a/tests/pos-macros/scala2-macro-compat-1.scala b/tests/pos-macros/scala2-macro-compat-1.scala index 7b0a3534b455..6fb83ab62dc4 100644 --- a/tests/pos-macros/scala2-macro-compat-1.scala +++ b/tests/pos-macros/scala2-macro-compat-1.scala @@ -21,6 +21,6 @@ object LineNumberMacro3 { import scala.quoted._ def thisLineNumberExpr(using qctx: QuoteContext): Expr[Int] = { import qctx.reflect._ - Expr(rootPosition.startLine + 1) + Expr(Position.ofMacroExpansion.startLine + 1) } } diff --git a/tests/run-macros/i5629/Macro_1.scala b/tests/run-macros/i5629/Macro_1.scala index 4ac61e798db3..37c6c16c35a5 100644 --- a/tests/run-macros/i5629/Macro_1.scala +++ b/tests/run-macros/i5629/Macro_1.scala @@ -14,6 +14,6 @@ object Macros { def thisLineNumberImpl(using qctx: QuoteContext) : Expr[Int] = { import qctx.reflect._ - Expr(rootPosition.startLine) + Expr(Position.ofMacroExpansion.startLine) } } diff --git a/tests/run-macros/i6803/Macro_1.scala b/tests/run-macros/i6803/Macro_1.scala index 73f372d753a1..e6164054d348 100644 --- a/tests/run-macros/i6803/Macro_1.scala +++ b/tests/run-macros/i6803/Macro_1.scala @@ -10,7 +10,7 @@ object AsObject { inline given LineNo = ${impl} private def impl(using qctx: QuoteContext): Expr[LineNo] = { import qctx.reflect._ - '{unsafe(${Expr(rootPosition.startLine)})} + '{unsafe(${Expr(Position.ofMacroExpansion.startLine)})} } } } @@ -22,7 +22,7 @@ package AsPackage { inline given LineNo = ${impl} private def impl(using qctx: QuoteContext): Expr[LineNo] = { import qctx.reflect._ - '{unsafe(${Expr(rootPosition.startLine)})} + '{unsafe(${Expr(Position.ofMacroExpansion.startLine)})} } } } diff --git a/tests/run-macros/tasty-linenumber-2/quoted_1.scala b/tests/run-macros/tasty-linenumber-2/quoted_1.scala index bc40b0a75983..e2cd171d6a16 100644 --- a/tests/run-macros/tasty-linenumber-2/quoted_1.scala +++ b/tests/run-macros/tasty-linenumber-2/quoted_1.scala @@ -10,7 +10,7 @@ object LineNumber { def lineImpl(using QuoteContext) : Expr[LineNumber] = { import qctx.reflect._ - '{new LineNumber(${Expr(rootPosition.startLine)})} + '{new LineNumber(${Expr(Position.ofMacroExpansion.startLine)})} } } diff --git a/tests/run-macros/tasty-linenumber/quoted_1.scala b/tests/run-macros/tasty-linenumber/quoted_1.scala index 5b8b4226e900..8dc78a4f000c 100644 --- a/tests/run-macros/tasty-linenumber/quoted_1.scala +++ b/tests/run-macros/tasty-linenumber/quoted_1.scala @@ -11,7 +11,7 @@ object LineNumber { def lineImpl(x: Type[Unit])(using QuoteContext) : Expr[LineNumber] = { import qctx.reflect._ - '{new LineNumber(${Expr(rootPosition.startLine)})} + '{new LineNumber(${Expr(Position.ofMacroExpansion.startLine)})} } } diff --git a/tests/run-macros/tasty-positioned/quoted_1.scala b/tests/run-macros/tasty-positioned/quoted_1.scala index f49e20521c48..73ab5be5dd68 100644 --- a/tests/run-macros/tasty-positioned/quoted_1.scala +++ b/tests/run-macros/tasty-positioned/quoted_1.scala @@ -10,8 +10,8 @@ object Positioned { implicit inline def apply[T](x: => T): Positioned[T] = ${impl('x)} def impl[T](x: Expr[T])(implicit ev: Type[T], qctx: QuoteContext): Expr[Positioned[T]] = { - import qctx.reflect.{Position => _, _} - val pos = rootPosition + import qctx.reflect.{Position => Pos, _} + val pos = Pos.ofMacroExpansion val path = Expr(pos.sourceFile.jpath.toString) val start = Expr(pos.start)