Skip to content

Commit e200242

Browse files
committed
Fix scala#4073: erase <repeted> type from lifted val for a vararg
1 parent e531634 commit e200242

File tree

8 files changed

+50
-0
lines changed

8 files changed

+50
-0
lines changed

compiler/src/dotty/tools/dotc/core/TypeErasure.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,7 @@ class TypeErasure(isJava: Boolean, semiEraseVCs: Boolean, isConstructor: Boolean
394394
else eraseNormalClassRef(tp)
395395
case tp: AppliedType =>
396396
if (tp.tycon.isRef(defn.ArrayClass)) eraseArray(tp)
397+
else if (tp.isRepeatedParam) defn.SeqType
397398
else apply(tp.superType)
398399
case _: TermRef | _: ThisType =>
399400
this(tp.widen)

tests/Foo.scala

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import scala.language.dynamics
2+
3+
class DynImpl extends Dynamic {
4+
def applyDynamic(name: String)(args: Any*)(implicit implicitArg: String = "foo"): String =
5+
s"method '$name' called with arguments ${args.mkString("'", "', '", "'")} and implicit argument '$implicitArg'"
6+
}
7+
8+
object Main {
9+
def main(args:Array[String]): Unit = {
10+
val d = new DynImpl
11+
12+
println(d.some())
13+
14+
println(d.ints(1, 2, 3))
15+
16+
println(d.strings("a", "b", "c"))
17+
}
18+
}

tests/run/i4073.check

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
method 'some' called with arguments '' and implicit argument 'foo'
2+
method 'ints' called with arguments '1', '2', '3' and implicit argument 'foo'
3+
method 'strings' called with arguments 'a', 'b', 'c' and implicit argument 'foo'

tests/run/i4073.scala

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import scala.language.dynamics
2+
3+
class DynImpl extends Dynamic {
4+
def applyDynamic(name: String)(args: Any*)(implicit implicitArg: String = "foo"): String =
5+
s"method '$name' called with arguments ${args.mkString("'", "', '", "'")} and implicit argument '$implicitArg'"
6+
}
7+
8+
object Test {
9+
def main(args:Array[String]): Unit = {
10+
val d = new DynImpl
11+
12+
println(d.some())
13+
14+
println(d.ints(1, 2, 3))
15+
16+
println(d.strings("a", "b", "c"))
17+
}
18+
}

tests/run/i4073b.check

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
foo123

tests/run/i4073b.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
object Test {
2+
def main(args:Array[String]): Unit = println(foo(1, 2, 3)())
3+
def foo(args: Any*)(arg: String = "foo"): String = arg + args.mkString("")
4+
}

tests/run/i4073c.check

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
foo123

tests/run/i4073c.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
object Test {
2+
def main(args:Array[String]): Unit = println(foo(1, 2, 3)())
3+
def foo(args: Int*)(arg: String = "foo"): String = arg + args.mkString("")
4+
}

0 commit comments

Comments
 (0)