8000 Merge pull request #4453 from gzm0/spread-repeated-super-args · renowncoder/scala-js@b859721 · GitHub
[go: up one dir, main page]

Skip to content

Commit b859721

Browse files
authored
Merge pull request scala-js#4453 from gzm0/spread-repeated-super-args
Fix scala-js#4452: Spread rest parameters forwarded to super
2 parents 4cb7993 + b40274c commit b859721

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

compiler/src/main/scala/org/scalajs/nscplugin/GenJSExports.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1099,14 +1099,14 @@ trait GenJSExports[G <: Global with Singleton] extends SubComponent {
10991099
js.VarRef(js.LocalIdent(restParamName))(jstpe.AnyType)
11001100
}
11011101

1102-
def genAllArgsRefsForForwarder()(implicit pos: Position): List[js.Tree] = {
1102+
def genAllArgsRefsForForwarder()(implicit pos: Position): List[js.TreeOrJSSpread] = {
11031103
val fixedArgRefs = fixedParamNames.toList.map { paramName =>
11041104
js.VarRef(js.LocalIdent(paramName))(jstpe.AnyType)
11051105
}
11061106

11071107
if (needsRestParam) {
11081108
val restArgRef = js.VarRef(js.LocalIdent(restParamName))(jstpe.AnyType)
1109-
fixedArgRefs :+ restArgRef
1109+
fixedArgRefs :+ js.JSSpread(restArgRef)
11101110
} else {
11111111
fixedArgRefs
11121112
}

test-suite/js/src/test/scala/org/scalajs/testsuite/jsinterop/NonNativeJSTypeTest.scala

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1348,6 +1348,30 @@ class NonNativeJSTypeTest {
13481348
assertEquals("bar3hello", dyn.foo("hello"))
13491349
}
13501350

1351+
@Test def overloadSuperMethod_Issue4452(): Unit = {
1352+
class Base extends js.Object {
1353+
def f(x: Int, y: Int*): String = "Base " + y.length
1354+
def g(x: Int, y: String): Unit = ()
1355+
}
1356+
1357+
class Sub extends Base {
1358+
def f(x: String, y: Int*): String = "Sub " + y.length
1359+
def g(x: Int): Unit = ()
1360+
}
1361+
1362+
val base = new Base
1363+
val sub = new Sub
1364+
1365+
assertEquals("Base 3", base.f(0, 1, 2, 3))
1366+
assertEquals("Base 3", sub.f(0, 1, 2, 3))
1367+
assertEquals("Sub 3", sub.f("0", 1, 2, 3))
1368+
1369+
// Just check they don't throw.
1370+
base.g(1, "0")
1371+
sub.g(1, "0")
1372+
sub.g(1)
1373+
}
1374+
13511375
@Test def superMethodCallInAnonJSClass_Issue3055(): Unit = {
13521376
class Foo extends js.Object {
13531377
def bar(msg: String): String = "super: " + msg

0 commit comments

Comments
 (0)
0