Skip to content

Commit e51e5c9

Browse files
committed
Refactor stdlib-bootstrapped
1 parent 6f6b3dc commit e51e5c9

File tree

5 files changed

+99
-67
lines changed

5 files changed

+99
-67
lines changed

.github/workflows/ci.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ jobs:
134134

135135
- name: Cmd Tests
136136
run: |
137-
./project/scripts/sbt ";dist/pack; scala3-bootstrapped/compile; scala3-bootstrapped/test ;sbt-test/scripted scala2-compat/* ;stdlib-bootstrapped/test:run ;stdlib-full-bootstrapped/test:run ;stdlib-bootstrapped-tasty-tests/test; scala3-compiler-bootstrapped/scala3CompilerCoursierTest:test"
137+
./project/scripts/sbt ";dist/pack; scala3-bootstrapped/compile; scala3-bootstrapped/test ;sbt-test/scripted scala2-compat/* ;stdlib-bootstrapped/test:run ;stdlib-bootstrapped-compat/test:run ;stdlib-bootstrapped-tasty-tests/test; scala3-compiler-bootstrapped/scala3CompilerCoursierTest:test"
138138
./project/scripts/cmdTests
139139
./project/scripts/bootstrappedOnlyCmdTests
140140
@@ -253,7 +253,7 @@ jobs:
253253

254254
- name: MiMa
255255
run: |
256-
./project/scripts/sbt ";scala3-interfaces/mimaReportBinaryIssues ;scala3-library-bootstrapped/mimaReportBinaryIssues ;scala3-library-bootstrappedJS/mimaReportBinaryIssues; tasty-core-bootstrapped/mimaReportBinaryIssues; stdlib-bootstrapped/mimaReportBinaryIssues; stdlib-full-bootstrapped/mimaReportBinaryIssues"
256+
./project/scripts/sbt ";scala3-interfaces/mimaReportBinaryIssues ;scala3-library-bootstrapped/mimaReportBinaryIssues ;scala3-library-bootstrappedJS/mimaReportBinaryIssues; tasty-core-bootstrapped/mimaReportBinaryIssues; stdlib-bootstrapped/mimaReportBinaryIssues; stdlib-bootstrapped-compat/mimaReportBinaryIssues; stdlib-with-tasty/mimaReportBinaryIssues"
257257
258258
community_build_a:
259259
runs-on: [self-hosted, Linux]

build.sbt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ val `scala3-language-server` = Build.`scala3-language-server`
1414
val `scala3-bench` = Build.`scala3-bench`
1515
val `scala3-bench-bootstrapped` = Build.`scala3-bench-bootstrapped`
1616
val `scala3-bench-micro` = Build.`scala3-bench-micro`
17+
val `stdlib-bootstrapped-compat` = Build.`stdlib-bootstrapped-compat`
18+
val `stdlib-with-tasty` = Build.`stdlib-with-tasty`
1719
val `stdlib-bootstrapped` = Build.`stdlib-bootstrapped`
18-
val `stdlib-full-bootstrapped` = Build.`stdlib-full-bootstrapped`
1920
val `stdlib-bootstrapped-tasty-tests` = Build.`stdlib-bootstrapped-tasty-tests`
2021
val `tasty-core` = Build.`tasty-core`
2122
val `tasty-core-bootstrapped` = Build.`tasty-core-bootstrapped`

project/Build.scala

Lines changed: 82 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -922,69 +922,13 @@ object Build {
922922
javaOptions := (`scala3-compiler-bootstrapped` / javaOptions).value
923923
)
924924

925-
/** Scala library compiled by dotty using the latest published sources of the library */
926-
lazy val `stdlib-bootstrapped` = project.in(file("stdlib-bootstrapped")).
927-
withCommonSettings(Bootstrapped).
928-
dependsOn(dottyCompiler(Bootstrapped) % "provided; compile->runtime; test->test").
929-
settings(stdliBootstrappedCommonSettings).
930-
settings(
931-
Compile/scalacOptions ++= {
932-
Seq(
933-
"-sourcepath",
934-
Seq(
935-
baseDirectory.value / "stdlib-bootstrapped" / "src",
936-
(Compile/sourceManaged).value / "scala-library-src",
937-
).mkString(File.pathSeparator),
938-
)
939-
},
940-
mimaCheckDirection := "both",
941-
mimaBinaryIssueFilters ++= MiMaFilters.LibraryBootstrappedForward,
942-
libraryDependencies += // For jar packaging
943-
("org.scala-lang" % "scala-library" % stdlibVersion(Bootstrapped)),
944-
exportJars := true,
945-
Compile / packageBin / artifactName := { (sv: ScalaVersion, module: ModuleID, artifact: Artifact) =>
946-
artifact.name + "-" + stdlibVersion(Bootstrapped) + "-" + module.revision + "." + artifact.extension
947-
},
948-
Compile / packageBin / mappings := {
949-
val s = streams.value
950-
val report = updateClassifiers.value
951-
val scalaLibraryJar =
952-
// FIXME
953-
report.select(
954-
configuration = configurationFilter("sourcedeps"),
955-
module = (_: ModuleID).name == "scala-library",
956-
artifact = artifactFilter(`type` = "src")).headOption.getOrElse {
957-
sys.error(s"Could not fetch scala-library sources")
958-
}.getParentFile / "scala-library-2.13.10.jar"
959-
val cacheDir = s.cacheDirectory
960-
val trgDir = (Compile / sourceManaged).value / "scala-library-bin"
961-
FileFunction.cached(cacheDir / "fetchScalaLibraryBin",
962-
FilesInfo.lastModified, FilesInfo.exists) { dependencies =>
963-
s.log.info(s"Unpacking scala-library classfiles to $trgDir...")
964-
if (trgDir.exists)
965-
IO.delete(trgDir)
966-
IO.createDirectory(trgDir)
967-
IO.unzip(scalaLibraryJar, trgDir)
968-
969-
(trgDir ** "*.class").get.toSet
970-
} (Set(scalaLibraryJar)).toSeq
971-
val allScalaLibraryJarFiles =
972-
trgDir.allPaths.get().filterNot(_.getName.endsWith(".MF")) // TODO use parts of the old manifest?
973-
val allScalaLibraryJarMappings: Seq[(java.io.File, String)] =
974-
allScalaLibraryJarFiles.zip(allScalaLibraryJarFiles.map(_.relativeTo(trgDir).get.getPath))
975-
976-
val tastyFileMappings: Seq[(java.io.File, String)] =
977-
(Compile / packageBin / mappings).value.filter(_._1.getName.endsWith(".tasty"))
978-
979-
allScalaLibraryJarMappings ++ tastyFileMappings
980-
}
981-
982-
)
983-
984925
/** Scala library compiled by dotty using the latest published sources of the library
985-
* and the current Scala 3 livrary sources
926+
* and the current Scala 3 library sources.
927+
*
928+
* This version of the library is not binary compatible with the Scala 2 compiled library.
929+
* It compiles every file as Scala 3 sources.
986930
*/
987-
lazy val `stdlib-full-bootstrapped` = project.in(file("stdlib-full-bootstrapped")).
931+
lazy val `stdlib-bootstrapped` = project.in(file("stdlib-bootstrapped")).
988932
withCommonSettings(Bootstrapped).
989933
dependsOn(dottyCompiler(Bootstrapped) % "provided; compile->runtime; test->test").
990934
settings(stdliBootstrappedCommonSettings).
@@ -1031,6 +975,81 @@ object Build {
1031975
}.taskValue,
1032976
)
1033977

978+
/** Scala 2 library compiled by dotty using the latest published sources of the library.
979+
*
980+
* This version of the library is compiled by Scala 3 while being binary compatible with Scala 2.
981+
*/
982+
lazy val `stdlib-bootstrapped-compat` = project.in(file("stdlib-bootstrapped-compat")).
983+
withCommonSettings(Bootstrapped).
984+
dependsOn(dottyCompiler(Bootstrapped) % "provided; compile->runtime; test->test").
985+
settings(stdliBootstrappedCommonSettings).
986+
settings(
987+
Compile/scalacOptions ++= {
988+
Seq(
989+
"-sourcepath",
990+
Seq(
991+
baseDirectory.value / "stdlib-bootstrapped" / "src",
992+
(Compile/sourceManaged).value / "scala-library-src",
993+
).mkString(File.pathSeparator),
994+
)
995+
},
996+
mimaCheckDirection := "both",
997+
mimaBinaryIssueFilters ++= MiMaFilters.LibraryBootstrappedForward,
998+
)
999+
1000+
/** Re-packages stdlib compiled be Scala 2 adding TASTy generated by `stdlib-bootstrapped-compat` */
1001+
lazy val `stdlib-with-tasty` = project.in(file("stdlib-with-tasty")).
1002+
withCommonSettings(Bootstrapped).
1003+
dependsOn(`stdlib-bootstrapped-compat`).
1004+
settings(commonBootstrappedSettings).
1005+
settings(
1006+
moduleName := "scala-library",
1007+
exportJars := true,
1008+
Compile / packageBin / artifactName := { (sv: ScalaVersion, module: ModuleID, artifact: Artifact) =>
1009+
artifact.name + "-" + stdlibVersion(Bootstrapped) + "-" + module.revision + "." + artifact.extension
1010+
},
1011+
(Compile / packageBin / mappings) := {
1012+
val allScalaLibraryJarMappings: Seq[(java.io.File, String)] = {
1013+
val s = streams.value
1014+
val report = updateClassifiers.value
1015+
val scalaLibraryJar =
1016+
// FIXME
1017+
report.select(
1018+
configuration = configurationFilter("compile"),
1019+
module = (_: ModuleID).name == "scala-library",
1020+
artifact = artifactFilter(`type` = "src"))
1021+
.headOption.getOrElse {
1022+
sys.error(s"Could not fetch scala-library sources")
1023+
}.getParentFile / "scala-library-2.13.10.jar"
1024+
val cacheDir = s.cacheDirectory
1025+
val trgDir = (Compile / sourceManaged).value / "scala-library-bin" // FIXME not really managed sources
1026+
FileFunction.cached(cacheDir / "fetchScalaLibraryBin",
1027+
FilesInfo.lastModified, FilesInfo.exists) { dependencies =>
1028+
s.log.info(s"Unpacking scala-library classfiles to $trgDir...")
1029+
if (trgDir.exists)
1030+
IO.delete(trgDir)
1031+
IO.createDirectory(trgDir)
1032+
IO.unzip(scalaLibraryJar, trgDir)
1033+
(trgDir ** "*").get.toSet
1034+
} (Set(scalaLibraryJar)).toSeq
1035+
val allScalaLibraryJarFiles =
1036+
trgDir.allPaths.get().filterNot(_.getName.endsWith(".MF")) // TODO use parts of the old manifest?
1037+
allScalaLibraryJarFiles.zip(allScalaLibraryJarFiles.map(_.relativeTo(trgDir).get.getPath))
1038+
}
1039+
val tastyFileMappings =
1040+
(`stdlib-bootstrapped-compat` / Compile / packageBin / mappings).value
1041+
.filter(_._1.getName.endsWith(".tasty"))
1042+
allScalaLibraryJarMappings ++ tastyFileMappings
1043+
},
1044+
mimaCurrentClassfiles :=
1045+
mimaCurrentClassfiles.value.getParentFile() /
1046+
(moduleName.value + "-" + stdlibVersion(Bootstrapped) + "-" + scalaVersion.value.replace("-nonbootstrapped", "") + ".jar"),
1047+
mimaPreviousArtifacts +=
1048+
("org.scala-lang" % "scala-library" % stdlibVersion(Bootstrapped)),
1049+
mimaCheckDirection := "both",
1050+
mimaBinaryIssueFilters := Seq(),
1051+
)
1052+
10341053
lazy val stdliBootstrappedCommonSettings =
10351054
commonBootstrappedSettings ++
10361055
Seq(
@@ -1094,7 +1113,7 @@ object Build {
10941113
"scala.annotation.unspecialized",
10951114
),
10961115
mimaCheckDirection := "backward",
1097-
mimaBinaryIssueFilters ++= MiMaFilters.LibraryBootstrapped,
1116+
mimaBinaryIssueFilters ++= MiMaFilters.LibraryBootstrappedBackwards,
10981117
run := {
10991118
val args: Seq[String] = spaceDelimited("<arg>").parsed
11001119
val reference = (Compile/sourceManaged).value / "scala-library-src"
@@ -1154,7 +1173,7 @@ object Build {
11541173
settings(commonBootstrappedSettings).
11551174
settings(
11561175
javaOptions := (`scala3-compiler-bootstrapped` / javaOptions).value,
1157-
javaOptions += "-Ddotty.scala.library=" + (`stdlib-full-bootstrapped` / Compile / packageBin).value.getAbsolutePath
1176+
javaOptions += "-Ddotty.scala.library=" + (`stdlib-bootstrapped` / Compile / packageBin).value.getAbsolutePath
11581177
)
11591178

11601179
lazy val `scala3-sbt-bridge` = project.in(file("sbt-bridge/src")).

project/MiMaFilters.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ object MiMaFilters {
5050
ProblemFilters.exclude[MissingClassProblem]("dotty.tools.dotc.interfaces.DiagnosticRelatedInformation")
5151
)
5252

53-
val LibraryBootstrapped: Seq[ProblemFilter] = Seq(
53+
val LibraryBootstrappedBackwards: Seq[ProblemFilter] = Seq(
5454
// Files that are not compiled in the bootstrapped library
5555
ProblemFilters.exclude[MissingClassProblem]("scala.AnyVal"),
5656
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.Unit.this"),
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package hello
2+
3+
enum Color:
4+
case Red, Green, Blue
5+
6+
object HelloWorld:
7+
def main(args: Array[String]): Unit = {
8+
println("hello dotty.superbootstrapped!")
9+
println(Color.Red)
10+
println(Color.Green)
11+
println(Color.Blue)
12+
}

0 commit comments

Comments
 (0)