From af9ee8ea8f232e08d5248d088fae00949f608f36 Mon Sep 17 00:00:00 2001 From: Georgi Krastev Date: Wed, 16 Oct 2024 10:40:02 +0200 Subject: [PATCH] Fix tupleTypeFromSeq for XXL tuples --- library/src/scala/quoted/Expr.scala | 2 +- tests/pos/i21779/Macro_1.scala | 36 +++++++++++++++++++++++++++++ tests/pos/i21779/Test_2.scala | 3 +++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 tests/pos/i21779/Macro_1.scala create mode 100644 tests/pos/i21779/Test_2.scala diff --git a/library/src/scala/quoted/Expr.scala b/library/src/scala/quoted/Expr.scala index f1045e5bdaca..d1385a0193d6 100644 --- a/library/src/scala/quoted/Expr.scala +++ b/library/src/scala/quoted/Expr.scala @@ -256,7 +256,7 @@ object Expr { private def tupleTypeFromSeq(seq: Seq[Expr[Any]])(using Quotes): quotes.reflect.TypeRepr = import quotes.reflect.* val consRef = Symbol.classSymbol("scala.*:").typeRef - seq.foldLeft(TypeRepr.of[EmptyTuple]) { (ts, expr) => + seq.foldRight(TypeRepr.of[EmptyTuple]) { (expr, ts) => AppliedType(consRef, expr.asTerm.tpe :: ts :: Nil) } diff --git a/tests/pos/i21779/Macro_1.scala b/tests/pos/i21779/Macro_1.scala new file mode 100644 index 000000000000..d40f5e28de5e --- /dev/null +++ b/tests/pos/i21779/Macro_1.scala @@ -0,0 +1,36 @@ +import scala.quoted.* + +object Macro: + transparent inline def tupleXxl: Tuple = + ${tupleXxlExpr} + + def tupleXxlExpr(using Quotes) = + import quotes.reflect.* + Expr.ofTupleFromSeq( + Seq( + Expr("a"), + Expr(2), + Expr(3), + Expr(4), + Expr(5), + Expr(6), + Expr(7), + Expr(8), + Expr(9), + Expr(10), + Expr(11), + Expr(12), + Expr(13), + Expr(14), + Expr(15), + Expr(16), + Expr(17), + Expr(18), + Expr(19), + Expr(20), + Expr(21), + Expr(22), + Expr(23), + ) + ) + diff --git a/tests/pos/i21779/Test_2.scala b/tests/pos/i21779/Test_2.scala new file mode 100644 index 000000000000..e614e3ca564d --- /dev/null +++ b/tests/pos/i21779/Test_2.scala @@ -0,0 +1,3 @@ +object Test: + val result: ("a", 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23) = + Macro.tupleXxl