diff --git a/compiler/src/scala/quoted/runtime/impl/QuotesImpl.scala b/compiler/src/scala/quoted/runtime/impl/QuotesImpl.scala index 22be293c3562..fec50cc9e0a9 100644 --- a/compiler/src/scala/quoted/runtime/impl/QuotesImpl.scala +++ b/compiler/src/scala/quoted/runtime/impl/QuotesImpl.scala @@ -540,8 +540,14 @@ class QuotesImpl private (using val ctx: Context) extends Quotes, QuoteUnpickler def overloaded(qualifier: Term, name: String, targs: List[TypeRepr], args: List[Term], returnType: TypeRepr): Term = withDefaultPos(tpd.applyOverloaded(qualifier, name.toTermName, args, targs, returnType)) + def copy(original: Tree)(qualifier: Term, name: String): Select = + val sym = original.symbol + if sym.name.is(NameKinds.DefaultGetterName) && sym.name.toString == name then + tpd.cpy.Select(original)(qualifier, sym.name) + else tpd.cpy.Select(original)(qualifier, name.toTermName) + def unapply(x: Select): (Term, String) = (x.qualifier, x.name.toString) end Select diff --git a/tests/pos-macros/i17445/Macro_1.scala b/tests/pos-macros/i17445/Macro_1.scala new file mode 100644 index 000000000000..5ce8bd41b731 --- /dev/null +++ b/tests/pos-macros/i17445/Macro_1.scala @@ -0,0 +1,21 @@ +package i17445 + +import scala.quoted.* +import scala.collection.* + + +object Macro { + + inline def changeIndexWhere[A](inline expr: A): A = + ${ changeIndexWhereImpl('expr) } + + def changeIndexWhereImpl[A: Type](expr: Expr[A])(using Quotes): Expr[A] = { + import quotes.reflect.* + val r0 = expr.asTerm + val checker = new TreeMap() {} + println(r0.getClass().getSimpleName()) + val r = checker.transformTerm(r0)(Symbol.spliceOwner) + r.asExprOf[A] + } + +} \ No newline at end of file diff --git a/tests/pos-macros/i17445/Test_2.scala b/tests/pos-macros/i17445/Test_2.scala new file mode 100644 index 000000000000..251549f889ba --- /dev/null +++ b/tests/pos-macros/i17445/Test_2.scala @@ -0,0 +1,9 @@ +//> using options -Ydebug +package i17445 + +def complileMe:Int = + Macro.changeIndexWhere { + val arr = Array(1, 2, 3) + val result = arr.indexWhere(_ == 2) + result + } \ No newline at end of file