File tree 3 files changed +42
-0
lines changed
compiler/src/dotty/tools/dotc/transform
3 files changed +42
-0
lines changed Original file line number Diff line number Diff line change @@ -167,6 +167,22 @@ class ElimRepeated extends MiniPhase with InfoTransformer { thisPhase =>
167
167
private def arrayToSeq (tree : Tree )(using Context ): Tree =
168
168
wrapArray(tree, tree.tpe.elemType)
169
169
170
+ /**
171
+ * Wrap vararg splices that have been lifted to valdefs in a call to `arrayToSeq`.
172
+ * `SeqLiteral`s are not wrapped, since they are eliminated in their own phase see `SeqLiterals`.
173
+ */
174
+ override def transformValDef (tree : ValDef )(using Context ): Tree =
175
+ if tree.tpt.typeOpt.isRepeatedParam then
176
+ tree.rhs match {
177
+ case Typed (expr, tpt)
178
+ if tpt.typeOpt.isRepeatedParam && expr.typeOpt.derivesFrom(defn.ArrayClass ) && ! expr.isInstanceOf [SeqLiteral ] =>
179
+ cpy.ValDef (tree)(rhs = Typed (arrayToSeq(expr), tpt))
180
+ case _ =>
181
+ tree
182
+ }
183
+ else
184
+ tree
185
+
170
186
/** Generate the method definitions for the varargs forwarders created in transform */
171
187
override def transformDefDef (tree : DefDef )(using Context ): Tree =
172
188
// If transform reported an error, don't go further
Original file line number Diff line number Diff line change
1
+ // scalac: -coverage-out:coverage
2
+
3
+ def aList =
4
+ List (Array [String ]()* )
5
+
6
+ def arr =
7
+ Array (" abc" , " def" )
8
+
9
+ def anotherList =
10
+ List (arr* )
11
+
12
+ object Test extends App {
13
+ println(aList)
14
+ println(anotherList)
15
+ }
Original file line number Diff line number Diff line change
1
+ // scalac: -coverage-out:coverage
2
+
3
+ enum Foo :
4
+ case Bar , Baz
5
+
6
+ object Foo :
7
+ def render = List (values.tail* ).mkString
8
+
9
+ object Test extends App {
10
+ println(Foo .render)
11
+ }
You can’t perform that action at this time.
0 commit comments