Skip to content

Commit f795f09

Browse files
committed
Partially fix null unboxing in lambdas
When unboxing a null to a value class in Scala, the default value of the value class should be returned, before this commit an NPE was thrown instead. Like in scala/scala-java8-compat@d7e0125, we fix this by using BoxesRunTime, bun we don't use it for boxing since it's unnecessary. After this commit, we still throw NPE when unboxing nulls in unspecialized lambdas called in generic contexts (see if3_unspecialized in the added test). This is addressed by the next commits in this PR.
1 parent 71f9efb commit f795f09

File tree

83 files changed

+241
-151
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+241
-151
lines changed

library/src/scala/compat/java8/JFunction0.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,27 @@ public interface JFunction0<R> extends scala.Function0<R> {
1313
apply();
1414
}
1515
default byte apply$mcB$sp() {
16-
return (Byte) apply();
16+
return scala.runtime.BoxesRunTime.unboxToByte(apply());
1717
}
1818
default short apply$mcS$sp() {
19-
return (Short) apply();
19+
return scala.runtime.BoxesRunTime.unboxToShort(apply());
2020
}
2121
default int apply$mcI$sp() {
22-
return (Integer) apply();
22+
return scala.runtime.BoxesRunTime.unboxToInt(apply());
2323
}
2424
default long apply$mcJ$sp() {
25-
return (Long) apply();
25+
return scala.runtime.BoxesRunTime.unboxToLong(apply());
2626
}
2727
default char apply$mcC$sp() {
28-
return (Character) apply();
28+
return scala.runtime.BoxesRunTime.unboxToChar(apply());
2929
}
3030
default float apply$mcF$sp() {
31-
return (Float) apply();
31+
return scala.runtime.BoxesRunTime.unboxToFloat(apply());
3232
}
3333
default double apply$mcD$sp() {
34-
return (Double) apply();
34+
return scala.runtime.BoxesRunTime.unboxToDouble(apply());
3535
}
3636
default boolean apply$mcZ$sp() {
37-
return (Boolean) apply();
37+
return scala.runtime.BoxesRunTime.unboxToBoolean(apply());
3838
}
3939
}

library/src/scala/compat/java8/JFunction1$mcDD$sp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@
99
public interface JFunction1$mcDD$sp extends JFunction1 {
1010
abstract double apply$mcDD$sp(double v1);
1111

12-
default Object apply(Object t) { return (Double) apply$mcDD$sp((Double) t); }
12+
default Object apply(Object t) { return (Double) apply$mcDD$sp(scala.runtime.BoxesRunTime.unboxToDouble(t)); }
1313
}

library/src/scala/compat/java8/JFunction1$mcDF$sp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@
99
public interface JFunction1$mcDF$sp extends JFunction1 {
1010
abstract double apply$mcDF$sp(float v1);
1111

12-
default Object apply(Object t) { return (Double) apply$mcDF$sp((Float) t); }
12+
default Object apply(Object t) { return (Double) apply$mcDF$sp(scala.runtime.BoxesRunTime.unboxToFloat(t)); }
1313
}

library/src/scala/compat/java8/JFunction1$mcDI$sp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@
99
public interface JFunction1$mcDI$sp extends JFunction1 {
1010
abstract double apply$mcDI$sp(int v1);
1111

12-
default Object apply(Object t) { return (Double) apply$mcDI$sp((Integer) t); }
12+
default Object apply(Object t) { return (Double) apply$mcDI$sp(scala.runtime.BoxesRunTime.unboxToInt(t)); }
1313
}

library/src/scala/compat/java8/JFunction1$mcDJ$sp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@
99
public interface JFunction1$mcDJ$sp extends JFunction1 {
1010
abstract double apply$mcDJ$sp(long v1);
1111

12-
default Object apply(Object t) { return (Double) apply$mcDJ$sp((Long) t); }
12+
default Object apply(Object t) { return (Double) apply$mcDJ$sp(scala.runtime.BoxesRunTime.unboxToLong(t)); }
1313
}

library/src/scala/compat/java8/JFunction1$mcFD$sp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@
99
public interface JFunction1$mcFD$sp extends JFunction1 {
1010
abstract float apply$mcFD$sp(double v1);
1111

12-
default Object apply(Object t) { return (Float) apply$mcFD$sp((Double) t); }
12+
default Object apply(Object t) { return (Float) apply$mcFD$sp(scala.runtime.BoxesRunTime.unboxToDouble(t)); }
1313
}

library/src/scala/compat/java8/JFunction1$mcFF$sp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@
99
public interface JFunction1$mcFF$sp extends JFunction1 {
1010
abstract float apply$mcFF$sp(float v1);
1111

12-
default Object apply(Object t) { return (Float) apply$mcFF$sp((Float) t); }
12+
default Object apply(Object t) { return (Float) apply$mcFF$sp(scala.runtime.BoxesRunTime.unboxToFloat(t)); }
1313
}

library/src/scala/compat/java8/JFunction1$mcFI$sp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@
99
public interface JFunction1$mcFI$sp extends JFunction1 {
1010
abstract float apply$mcFI$sp(int v1);
1111

12-
default Object apply(Object t) { return (Float) apply$mcFI$sp((Integer) t); }
12+
default Object apply(Object t) { return (Float) apply$mcFI$sp(scala.runtime.BoxesRunTime.unboxToInt(t)); }
1313
}

library/src/scala/compat/java8/JFunction1$mcFJ$sp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@
99
public interface JFunction1$mcFJ$sp extends JFunction1 {
1010
abstract float apply$mcFJ$sp(long v1);
1111

12-
default Object apply(Object t) { return (Float) apply$mcFJ$sp((Long) t); }
12+
default Object apply(Object t) { return (Float) apply$mcFJ$sp(scala.runtime.BoxesRunTime.unboxToLong(t)); }
1313
}

library/src/scala/compat/java8/JFunction1$mcID$sp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@
99
public interface JFunction1$mcID$sp extends JFunction1 {
1010
abstract int apply$mcID$sp(double v1);
1111

12-
default Object apply(Object t) { return (Integer) apply$mcID$sp((Double) t); }
12+
default Object apply(Object t) { return (Integer) apply$mcID$sp(scala.runtime.BoxesRunTime.unboxToDouble(t)); }
1313
}

0 commit comments

Comments
 (0)