Skip to content

Commit 3166433

Browse files
authored
Merge pull request #7439 from Lacaranian/add-readers-test
Partial fix for lampepfl#7113: Fix Scala.js codegen for Explicit Returns
2 parents 799f4c5 + 00d4216 commit 3166433

File tree

3 files changed

+15
-2
lines changed

3 files changed

+15
-2
lines changed

compiler/src/dotty/tools/backend/sjs/JSCodeGen.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -723,9 +723,10 @@ class JSCodeGen()(implicit ctx: Context) {
723723
mutable = false, rest = false)
724724
}
725725

726-
def genBody() =
726+
def genBody() = localNames.makeLabeledIfRequiresEnclosingReturn(resultIRType) {
727727
if (resultIRType == jstpe.NoType) genStat(tree)
728728
else genExpr(tree)
729+
}
729730

730731
//if (!isScalaJSDefinedJSClass(currentClassSym)) {
731732
val flags = js.MemberFlags.empty.withNamespace(namespace)

compiler/src/dotty/tools/backend/sjs/JSEncoding.scala

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,18 @@ object JSEncoding {
9292
returnLabelName = Some(freshName("_return"))
9393
js.Ident(returnLabelName.get)
9494
}
95+
96+
/* If this `LocalNameGenerator` has a `returnLabelName` (often added in the
97+
* construction of the `body` argument), wrap the resulting js.Tree to use that label.
98+
*/
99+
def makeLabeledIfRequiresEnclosingReturn(tpe: jstpe.Type)(body: js.Tree)(implicit pos: ir.Position): js.Tree = {
100+
returnLabelName match {
101+
case None =>
102+
body
103+
case Some(labelName) =>
104+
js.Labeled(js.Ident(labelName), tpe, body)
105+
}
106+
}
95107
}
96108

97109
private object LocalNameGenerator {

project/Build.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -979,7 +979,7 @@ object Build {
979979
(
980980
(dir / "shared/src/test/scala/org/scalajs/testsuite/compiler" ** (("*.scala":FileFilter) -- "RegressionTest.scala" -- "ReflectiveCallTest.scala")).get
981981
++ (dir / "shared/src/test/scala/org/scalajs/testsuite/javalib/lang" ** (("*.scala": FileFilter) -- "ClassTest.scala" -- "StringTest.scala")).get
982-
++ (dir / "shared/src/test/scala/org/scalajs/testsuite/javalib/io" ** (("*.scala": FileFilter) -- "ByteArrayInputStreamTest.scala" -- "ByteArrayOutputStreamTest.scala" -- "DataInputStreamTest.scala" -- "DataOutputStreamTest.scala" -- "InputStreamTest.scala" -- "OutputStreamWriterTest.scala" -- "PrintStreamTest.scala" -- "ReadersTest.scala" -- "CommonStreamsTests.scala")).get
982+
++ (dir / "shared/src/test/scala/org/scalajs/testsuite/javalib/io" ** (("*.scala": FileFilter) -- "ByteArrayInputStreamTest.scala" -- "ByteArrayOutputStreamTest.scala" -- "DataInputStreamTest.scala" -- "DataOutputStreamTest.scala" -- "InputStreamTest.scala" -- "OutputStreamWriterTest.scala" -- "PrintStreamTest.scala" -- "CommonStreamsTests.scala")).get
983983
++ (dir / "shared/src/test/scala/org/scalajs/testsuite/javalib/math" ** "*.scala").get
984984
++ (dir / "shared/src/test/scala/org/scalajs/testsuite/javalib/net" ** (("*.scala": FileFilter) -- "URITest.scala")).get
985985
++ (dir / "shared/src/test/scala/org/scalajs/testsuite/javalib/security" ** "*.scala").get

0 commit comments

Comments
 (0)