Skip to content

Commit 0b72810

Browse files
committed
Revert "Fix scala-js#4684: Handle Unit parameters with default values in JS types."
This reverts commit 1de54d7.
1 parent 9e02422 commit 0b72810

File tree

4 files changed

+3
-41
lines changed

4 files changed

+3
-41
lines changed

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

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3875,14 +3875,8 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
38753875
val Block(stats, expr) = tree
38763876

38773877
val genStatsAndExpr = if (!stats.exists(isCaseLabelDef(_))) {
3878-
// #4684 Collapse { <undefined-param>; BoxedUnit } to <undefined-param>
3879-
val genStatsAndExpr0 = stats.map(genStat(_)) :+ genStatOrExpr(expr, isStat)
3880-
genStatsAndExpr0 match {
3881-
case (undefParam @ js.Transient(UndefinedParam)) :: js.Undefined() :: Nil =>
3882-
undefParam :: Nil
3883-
case _ =>
3884-
genStatsAndExpr0
3885-
}
3878+
// fast path
3879+
stats.map(genStat(_)) :+ genStatOrExpr(expr, isStat)
38863880
} else {
38873881
genBlockWithCaseLabelDefs(stats :+ expr, isStat)
38883882
}

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -780,7 +780,7 @@ trait GenJSExports[G <: Global with Singleton] extends SubComponent {
780780
// Pass previous arguments to defaultGetter
781781
val defaultGetterArgs = previousArgsValues(defaultGetter.tpe.params.size)
782782

783-
val callGetter = if (isJSType(trgSym)) {
783+
if (isJSType(trgSym)) {
784784
if (isNonNativeJSClass(defaultGetter.owner)) {
785785
if (defaultGetter.hasAnnotation(JSOptionalAnnotation))
786786
js.Undefined()
@@ -802,12 +802,6 @@ trait GenJSExports[G <: Global with Singleton] extends SubComponent {
802802
} else {
803803
genApplyMethod(trgTree, defaultGetter, defaultGetterArgs)
804804
}
805-
806-
// #4684 If the getter returns void, we must "box" it by returning undefined
807-
if (callGetter.tpe == jstpe.NoType)
808-
js.Block(callGetter, js.Undefined())
809-
else
810-
callGetter
811805
}
812806

813807
/** Generate the final forwarding call to the exported method. */

test-suite/js/src/test/scala/org/scalajs/testsuite/compiler/InteroperabilityTest.scala

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -543,10 +543,6 @@ class InteroperabilityTest {
543543

544544
assertJSArrayEquals[Any](js.Array(js.undefined, 1, 2, 3, 4), obj.multi()(1, 2, 3, 4)())
545545
assertJSArrayEquals[Any](js.Array(2, 5), obj.multi(2)()(5))
546-
547-
// #4684 Default params with Unit type
548-
assertJSArrayEquals[Any](js.Array(()), obj.unitParam(()))
549-
assertJSArrayEquals[Any](js.Array((), ()), obj.unitParam((), ()))
550546
}
551547

552548
@Test def defaultParametersForConstructors_Issue791(): Unit = {
@@ -797,8 +793,6 @@ object InteroperabilityTest {
797793
def named(x: Int = 1, y: Int = 1, z: Int = 1): js.Array[Any] = js.native
798794
@JSName("fun")
799795
def multi(x: Int = 1)(ys: Int*)(z: Int = 1): js.Array[Any] = js.native
800-
@JSName("fun")
801-
def unitParam(x: Unit, y: Unit = ()): js.Array[Any] = js.native
802796
}
803797

804798
@js.native

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

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,21 +1061,15 @@ class NonNativeJSTypeTest {
10611061

10621062
@Test def defaultParameters(): Unit = {
10631063
class DefaultParameters extends js.Object {
1064-
var sideEffectCounter: Int = 0
1065-
10661064
def bar(x: Int, y: Int = 1): Int = x + y
10671065
def dependent(x: Int)(y: Int = x + 1): Int = x + y
1068-
def unitParam(x: Unit, y: Unit = { sideEffectCounter += 1; () }): Int = sideEffectCounter
10691066

10701067
def foobar(x: Int): Int = bar(x)
10711068
}
10721069

10731070
object DefaultParametersMod extends js.Object {
1074-
var sideEffectCounter: Int = 0
1075-
10761071
def bar(x: Int, y: Int = 1): Int = x + y
10771072
def dependent(x: Int)(y: Int = x + 1): Int = x + y
1078-
def unitParam(x: Unit, y: Unit = { sideEffectCounter += 1; () }): Int = sideEffectCounter
10791073

10801074
def foobar(x: Int): Int = bar(x)
10811075
}
@@ -1087,26 +1081,12 @@ class NonNativeJSTypeTest {
10871081
assertEquals(9, foo.dependent(4)(5))
10881082
assertEquals(17, foo.dependent(8)())
10891083

1090-
// #4684 Default params with Unit type
1091-
assertEquals(0, foo.sideEffectCounter)
1092-
assertEquals(1, foo.unitParam(()))
1093-
assertEquals(1, foo.sideEffectCounter)
1094-
assertEquals(2, foo.unitParam((), ())) // an actual undefined param counts as not provided
1095-
assertEquals(2, foo.sideEffectCounter)
1096-
10971084
assertEquals(9, DefaultParametersMod.bar(4, 5))
10981085
assertEquals(5, DefaultParametersMod.bar(4))
10991086
assertEquals(4, DefaultParametersMod.foobar(3))
11001087
assertEquals(9, DefaultParametersMod.dependent(4)(5))
11011088
assertEquals(17, DefaultParametersMod.dependent(8)())
11021089

1103-
// #4684 Default params with Unit type
1104-
assertEquals(0, DefaultParametersMod.sideEffectCounter)
1105-
assertEquals(1, DefaultParametersMod.unitParam(()))
1106-
assertEquals(1, DefaultParametersMod.sideEffectCounter)
1107-
assertEquals(2, DefaultParametersMod.unitParam((), ())) // an actual undefined param counts as not provided
1108-
assertEquals(2, DefaultParametersMod.sideEffectCounter)
1109-
11101090
def testDyn(dyn: js.Dynamic): Unit = {
11111091
assertEquals(9, dyn.bar(4, 5))
11121092
assertEquals(5, dyn.bar(4))

0 commit comments

Comments
 (0)