From 7510f1a31e9aa385fa194fc8214b99bcf3b03d87 Mon Sep 17 00:00:00 2001 From: Guillaume Martres Date: Thu, 5 Dec 2019 15:33:36 +0100 Subject: [PATCH 1/7] Build.scala: fix usage of -sourcepath Previously it was missing some source directories (in particular, src-bootstrapped and src-non-bootstrapped). --- project/Build.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Build.scala b/project/Build.scala index 97db49daf957..b1d176960dc3 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -753,7 +753,7 @@ object Build { // Settings shared between dotty-library and dotty-library-bootstrapped lazy val dottyLibrarySettings = Seq( // Needed so that the library sources are visible when `dotty.tools.dotc.core.Definitions#init` is called - scalacOptions in Compile ++= Seq("-sourcepath", (scalaSource in Compile).value.getAbsolutePath), + scalacOptions in Compile ++= Seq("-sourcepath", (sourceDirectories in Compile).value.map(_.getAbsolutePath).distinct.mkString(File.pathSeparator)), ) lazy val `dotty-library` = project.in(file("library")).asDottyLibrary(NonBootstrapped) From dc02a12d094c04d82a469dbded26ffd16055ce5e Mon Sep 17 00:00:00 2001 From: Guillaume Martres Date: Tue, 3 Dec 2019 19:40:27 +0100 Subject: [PATCH 2/7] library: move files that no longer require bootstrapped compiler Some of them had been sitting here for a long time to work around issues with -sourcepath which should all be fixed now. Also remove non-bootstrapped toExpr which had been deprecated for a while. --- .../scala/quoted/package.scala | 9 --- .../scala/tasty/reflect/TreeUtils.scala | 56 ------------------- .../scala/IArray.scala | 0 .../scala/quoted/Liftable.scala | 0 .../scala/quoted/util/ExprMap.scala | 0 .../scala/quoted/util/Var.scala | 0 .../scala/tasty/reflect/TreeUtils.scala | 0 tests/neg/i6762.check | 5 -- tests/neg/i6762.scala | 2 +- 9 files changed, 1 insertion(+), 71 deletions(-) delete mode 100644 library/src-bootstrapped/scala/quoted/package.scala delete mode 100644 library/src-non-bootstrapped/scala/tasty/reflect/TreeUtils.scala rename library/{src-bootstrapped => src}/scala/IArray.scala (100%) rename library/{src-bootstrapped => src}/scala/quoted/Liftable.scala (100%) rename library/{src-bootstrapped => src}/scala/quoted/util/ExprMap.scala (100%) rename library/{src-bootstrapped => src}/scala/quoted/util/Var.scala (100%) rename library/{src-bootstrapped => src}/scala/tasty/reflect/TreeUtils.scala (100%) delete mode 100644 tests/neg/i6762.check diff --git a/library/src-bootstrapped/scala/quoted/package.scala b/library/src-bootstrapped/scala/quoted/package.scala deleted file mode 100644 index bdd92f395114..000000000000 --- a/library/src-bootstrapped/scala/quoted/package.scala +++ /dev/null @@ -1,9 +0,0 @@ -package scala - -package object quoted { - - implicit object ExprOps { - @deprecated("Use scala.quoted.Expr.apply instead", "0.19.0") - def [T: Liftable](x: T) toExpr (given QuoteContext): Expr[T] = Expr(x) - } -} diff --git a/library/src-non-bootstrapped/scala/tasty/reflect/TreeUtils.scala b/library/src-non-bootstrapped/scala/tasty/reflect/TreeUtils.scala deleted file mode 100644 index 876d8cc02622..000000000000 --- a/library/src-non-bootstrapped/scala/tasty/reflect/TreeUtils.scala +++ /dev/null @@ -1,56 +0,0 @@ -package scala.tasty -package reflect - -/** Tasty reflect case definition */ -trait TreeUtils - extends Core - with SymbolOps - with TreeOps { self: Reflection => - - abstract class TreeAccumulator[X] { - def foldTree(x: X, tree: Tree)(given ctx: Context): X - def foldTrees(x: X, trees: Iterable[Tree])(given ctx: Context): X = - throw new Exception("non-bootstraped-library") - def foldOverTree(x: X, tree: Tree)(given ctx: Context): X = - throw new Exception("non-bootstraped-library") - } - - abstract class TreeTraverser extends TreeAccumulator[Unit] { - def traverseTree(tree: Tree)(given ctx: Context): Unit = - throw new Exception("non-bootstraped-library") - def foldTree(x: Unit, tree: Tree)(given ctx: Context): Unit = - throw new Exception("non-bootstraped-library") - protected def traverseTreeChildren(tree: Tree)(given ctx: Context): Unit = - throw new Exception("non-bootstraped-library") - } - - abstract class TreeMap { self => - def transformTree(tree: Tree)(given ctx: Context): Tree = - throw new Exception("non-bootstraped-library") - def transformStatement(tree: Statement)(given ctx: Context): Statement = - throw new Exception("non-bootstraped-library") - def transformTerm(tree: Term)(given ctx: Context): Term = - throw new Exception("non-bootstraped-library") - def transformTypeTree(tree: TypeTree)(given ctx: Context): TypeTree = - throw new Exception("non-bootstraped-library") - def transformCaseDef(tree: CaseDef)(given ctx: Context): CaseDef = - throw new Exception("non-bootstraped-library") - def transformTypeCaseDef(tree: TypeCaseDef)(given ctx: Context): TypeCaseDef = - throw new Exception("non-bootstraped-library") - def transformStats(trees: List[Statement])(given ctx: Context): List[Statement] = - throw new Exception("non-bootstraped-library") - def transformTrees(trees: List[Tree])(given ctx: Context): List[Tree] = - throw new Exception("non-bootstraped-library") - def transformTerms(trees: List[Term])(given ctx: Context): List[Term] = - throw new Exception("non-bootstraped-library") - def transformTypeTrees(trees: List[TypeTree])(given ctx: Context): List[TypeTree] = - throw new Exception("non-bootstraped-library") - def transformCaseDefs(trees: List[CaseDef])(given ctx: Context): List[CaseDef] = - throw new Exception("non-bootstraped-library") - def transformTypeCaseDefs(trees: List[TypeCaseDef])(given ctx: Context): List[TypeCaseDef] = - throw new Exception("non-bootstraped-library") - def transformSubTrees[Tr <: Tree](trees: List[Tr])(given ctx: Context): List[Tr] = - throw new Exception("non-bootstraped-library") - } - -} diff --git a/library/src-bootstrapped/scala/IArray.scala b/library/src/scala/IArray.scala similarity index 100% rename from library/src-bootstrapped/scala/IArray.scala rename to library/src/scala/IArray.scala diff --git a/library/src-bootstrapped/scala/quoted/Liftable.scala b/library/src/scala/quoted/Liftable.scala similarity index 100% rename from library/src-bootstrapped/scala/quoted/Liftable.scala rename to library/src/scala/quoted/Liftable.scala diff --git a/library/src-bootstrapped/scala/quoted/util/ExprMap.scala b/library/src/scala/quoted/util/ExprMap.scala similarity index 100% rename from library/src-bootstrapped/scala/quoted/util/ExprMap.scala rename to library/src/scala/quoted/util/ExprMap.scala diff --git a/library/src-bootstrapped/scala/quoted/util/Var.scala b/library/src/scala/quoted/util/Var.scala similarity index 100% rename from library/src-bootstrapped/scala/quoted/util/Var.scala rename to library/src/scala/quoted/util/Var.scala diff --git a/library/src-bootstrapped/scala/tasty/reflect/TreeUtils.scala b/library/src/scala/tasty/reflect/TreeUtils.scala similarity index 100% rename from library/src-bootstrapped/scala/tasty/reflect/TreeUtils.scala rename to library/src/scala/tasty/reflect/TreeUtils.scala diff --git a/tests/neg/i6762.check b/tests/neg/i6762.check deleted file mode 100644 index 315acb67198a..000000000000 --- a/tests/neg/i6762.check +++ /dev/null @@ -1,5 +0,0 @@ --- [E007] Type Mismatch Error: tests/neg/i6762.scala:5:72 -------------------------------------------------------------- -5 |def f(word: String)(given QuoteContext): Expr[Foo[G[String]]] = '{Foo(${word.toExpr})} // error - | ^^^^ - | Found: quoted.Expr[String] - | Required: quoted.Expr[G[String]] diff --git a/tests/neg/i6762.scala b/tests/neg/i6762.scala index 3ef78e4d8d11..dfec28d1f0e4 100644 --- a/tests/neg/i6762.scala +++ b/tests/neg/i6762.scala @@ -2,4 +2,4 @@ import scala.quoted.{_, given} type G[X] case class Foo[T](x: T) -def f(word: String)(given QuoteContext): Expr[Foo[G[String]]] = '{Foo(${word.toExpr})} // error +def f(word: String)(given QuoteContext): Expr[Foo[G[String]]] = '{Foo(${Expr(word)})} // error // error From a616bed6f46d1f052e930f8dc1135372adcecdbd Mon Sep 17 00:00:00 2001 From: Guillaume Martres Date: Thu, 5 Dec 2019 18:02:14 +0100 Subject: [PATCH 3/7] sbt-dotty: fix dotty retrieval when bootstrapping dotty In the dotty build, we rely on sbt-dotty to get the reference compiler and its dependencies. But when using a locally-published dotty as the reference compiler I ran into a situation where sbt-dotty failed to get some of the artifacts. It seems that this happens because it confuses the locally-published projects with the projects in the current build. Fixed by tweaking the way sbt-dotty retrieves dotty to make sure it never considers projects from the current build. --- .../dotty/tools/sbtplugin/DottyPlugin.scala | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/sbt-dotty/src/dotty/tools/sbtplugin/DottyPlugin.scala b/sbt-dotty/src/dotty/tools/sbtplugin/DottyPlugin.scala index 6a032a31a1be..2b12150520a2 100644 --- a/sbt-dotty/src/dotty/tools/sbtplugin/DottyPlugin.scala +++ b/sbt-dotty/src/dotty/tools/sbtplugin/DottyPlugin.scala @@ -404,10 +404,15 @@ object DottyPlugin extends AutoPlugin { /** Create a scalaInstance task that uses Dotty based on `moduleName`. */ def dottyScalaInstanceTask(moduleName: String): Initialize[Task[ScalaInstance]] = Def.task { + val ivyConfig0 = mkIvyConfiguration.value + // When compiling non-bootstrapped projects in the build of Dotty itself, + // dependency resolution might pick a local project which is not what we + // want. We avoid this by dropping the inter-project resolver. + val ivyConfig1 = ivyConfig0.withResolvers(ivyConfig0.resolvers.filter(_.name != "inter-project")) val updateReport = fetchArtifactsOf( scalaOrganization.value %% moduleName % scalaVersion.value, - dependencyResolution.value, + ivy.IvyDependencyResolution(ivyConfig1), scalaModuleInfo.value, updateConfiguration.value, (unresolvedWarningConfiguration in update).value, @@ -431,6 +436,25 @@ object DottyPlugin extends AutoPlugin { ) } + // Copy-pasted from sbt until we upgrade to a version of sbt + // with https://github.com/sbt/sbt/pull/5271 in. + def mkIvyConfiguration: Initialize[Task[InlineIvyConfiguration]] = + Def.task { + val (rs, other) = (fullResolvers.value.toVector, otherResolvers.value.toVector) + val s = streams.value + Classpaths.warnResolversConflict(rs ++: other, s.log) + InlineIvyConfiguration() + .withPaths(ivyPaths.value) + .withResolvers(rs) + .withOtherResolvers(other) + .withModuleConfigurations(moduleConfigurations.value.toVector) + .withLock(Defaults.lock(appConfiguration.value)) + .withChecksums((checksums in update).value.toVector) + .withResolutionCacheDir(crossTarget.value / "resolution-cache") + .withUpdateOptions(updateOptions.value) + .withLog(s.log) + } + def makeScalaInstance( state: State, dottyVersion: String, scalaLibrary: File, dottyLibrary: File, compiler: File, all: Seq[File] ): ScalaInstance = { From 55487135ec6a630eaabfaeece9d4287cc0af774c Mon Sep 17 00:00:00 2001 From: Guillaume Martres Date: Mon, 6 Jan 2020 17:11:30 +0100 Subject: [PATCH 4/7] Synchronize sourcecode with dotty-community-build branch --- community-build/community-projects/sourcecode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/community-build/community-projects/sourcecode b/community-build/community-projects/sourcecode index db11447fd045..7177d370124a 160000 --- a/community-build/community-projects/sourcecode +++ b/community-build/community-projects/sourcecode @@ -1 +1 @@ -Subproject commit db11447fd045125b84a69832b2b6c5f9cd3290de +Subproject commit 7177d370124ac09acf4c48555fe99aff977fc0ac From 6f269e24c0afbc0cf5844235c864cf33e8487a67 Mon Sep 17 00:00:00 2001 From: Guillaume Martres Date: Mon, 6 Jan 2020 17:13:36 +0100 Subject: [PATCH 5/7] Update sourcecode after toExpr removal --- community-build/community-projects/sourcecode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/community-build/community-projects/sourcecode b/community-build/community-projects/sourcecode index 7177d370124a..00ec51f02bcf 160000 --- a/community-build/community-projects/sourcecode +++ b/community-build/community-projects/sourcecode @@ -1 +1 @@ -Subproject commit 7177d370124ac09acf4c48555fe99aff977fc0ac +Subproject commit 00ec51f02bcf4c79a5af6cb94b91398a81ee1d0c From b81942352a9d1aa0b7443ba0537cf566e97cf50b Mon Sep 17 00:00:00 2001 From: Guillaume Martres Date: Tue, 7 Jan 2020 15:44:25 +0100 Subject: [PATCH 6/7] Synchronize utest with dotty-community-build branch --- community-build/community-projects/utest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/community-build/community-projects/utest b/community-build/community-projects/utest index 7eac23c8aad1..05d6743f2103 160000 --- a/community-build/community-projects/utest +++ b/community-build/community-projects/utest @@ -1 +1 @@ -Subproject commit 7eac23c8aad186c724ddaee4d00030fbacb8a969 +Subproject commit 05d6743f210330d79df27065086b2169427b1081 From 4c008f974b9c0245ce7dca0cc39c13691fc1bd3a Mon Sep 17 00:00:00 2001 From: Guillaume Martres Date: Tue, 7 Jan 2020 15:49:10 +0100 Subject: [PATCH 7/7] Update sourcecode after toExpr removal --- community-build/community-projects/utest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/community-build/community-projects/utest b/community-build/community-projects/utest index 05d6743f2103..a714eb9161ed 160000 --- a/community-build/community-projects/utest +++ b/community-build/community-projects/utest @@ -1 +1 @@ -Subproject commit 05d6743f210330d79df27065086b2169427b1081 +Subproject commit a714eb9161ed733138f25a115a7a9c5ce268fefd