From 3d2f9faabb330d77aec3f15882a4568157f537d4 Mon Sep 17 00:00:00 2001 From: noti0na1 Date: Mon, 22 Sep 2025 20:09:52 +0200 Subject: [PATCH] Update typeArgs in QuotesImpl to match the behaviour of argInfos --- .../src/scala/quoted/runtime/impl/QuotesImpl.scala | 3 ++- tests/neg-macros/i23008.check | 2 +- tests/pos-macros/typeArgs/i24006_1.scala | 10 ++++++++++ tests/pos-macros/typeArgs/i24006_2.scala | 3 +++ 4 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 tests/pos-macros/typeArgs/i24006_1.scala create mode 100644 tests/pos-macros/typeArgs/i24006_2.scala diff --git a/compiler/src/scala/quoted/runtime/impl/QuotesImpl.scala b/compiler/src/scala/quoted/runtime/impl/QuotesImpl.scala index a4c7058f3e66..1dfa9db1b830 100644 --- a/compiler/src/scala/quoted/runtime/impl/QuotesImpl.scala +++ b/compiler/src/scala/quoted/runtime/impl/QuotesImpl.scala @@ -1909,8 +1909,9 @@ class QuotesImpl private (using val ctx: Context) extends Quotes, QuoteUnpickler def substituteTypes(from: List[Symbol], to: List[TypeRepr]): TypeRepr = self.subst(from, to) - def typeArgs: List[TypeRepr] = self match + def typeArgs: List[TypeRepr] = self.stripped match case AppliedType(_, args) => args + case FlexibleType(underlying) => underlying.typeArgs case _ => List.empty end extension end TypeReprMethods diff --git a/tests/neg-macros/i23008.check b/tests/neg-macros/i23008.check index 8138956d8653..ebe86e17b826 100644 --- a/tests/neg-macros/i23008.check +++ b/tests/neg-macros/i23008.check @@ -5,8 +5,8 @@ | Exception occurred while executing macro expansion. | java.lang.IllegalArgumentException: requirement failed: value of StringConstant cannot be `null` | at scala.Predef$.require(Predef.scala:393) + | at scala.quoted.runtime.impl.QuotesImpl$reflect$StringConstant$.apply(QuotesImpl.scala:2541) | at scala.quoted.runtime.impl.QuotesImpl$reflect$StringConstant$.apply(QuotesImpl.scala:2540) - | at scala.quoted.runtime.impl.QuotesImpl$reflect$StringConstant$.apply(QuotesImpl.scala:2539) | at scala.quoted.ToExpr$StringToExpr.apply(ToExpr.scala:82) | at scala.quoted.ToExpr$StringToExpr.apply(ToExpr.scala:80) | at scala.quoted.Expr$.apply(Expr.scala:72) diff --git a/tests/pos-macros/typeArgs/i24006_1.scala b/tests/pos-macros/typeArgs/i24006_1.scala new file mode 100644 index 000000000000..efb0bb72a846 --- /dev/null +++ b/tests/pos-macros/typeArgs/i24006_1.scala @@ -0,0 +1,10 @@ +import scala.quoted._ + +inline def eval[T](x: List[T]) = ${ evalImpl[T]('x) } +inline def eval2[T](inline x: List[T]) = ${ evalImpl[T]('x) } + +def evalImpl[A](x: Expr[List[A]])(using Quotes): Expr[Unit] = + import quotes.reflect.* + println(x.asTerm.tpe.widen) + x.asTerm.tpe.widen.typeArgs.head + '{()} \ No newline at end of file diff --git a/tests/pos-macros/typeArgs/i24006_2.scala b/tests/pos-macros/typeArgs/i24006_2.scala new file mode 100644 index 000000000000..3253da247c1c --- /dev/null +++ b/tests/pos-macros/typeArgs/i24006_2.scala @@ -0,0 +1,3 @@ +def main() = + eval(List(1) :+ 4) + eval2(List(1) :+ 4) \ No newline at end of file