aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.drone.yml3
-rw-r--r--compiler/src/dotty/tools/dotc/config/JavaPlatform.scala2
-rw-r--r--compiler/src/dotty/tools/dotc/config/PathResolver.scala9
-rw-r--r--compiler/src/dotty/tools/dotc/core/Definitions.scala12
-rw-r--r--compiler/src/dotty/tools/dotc/core/SymDenotations.scala10
-rw-r--r--compiler/src/dotty/tools/dotc/parsing/Scanners.scala3
-rw-r--r--compiler/src/dotty/tools/dotc/sbt/ExtractDependencies.scala2
-rw-r--r--compiler/src/dotty/tools/dotc/transform/ElimByName.scala6
-rw-r--r--compiler/src/dotty/tools/dotc/transform/ExtensionMethods.scala9
-rw-r--r--compiler/src/dotty/tools/dotc/typer/ImportInfo.scala11
-rw-r--r--compiler/test/dotc/build.scala40
-rw-r--r--compiler/test/dotc/tests.scala2
-rw-r--r--compiler/test/dotty/Jars.scala20
-rw-r--r--compiler/test/dotty/partest/DPConsoleRunner.scala17
-rw-r--r--compiler/test/dotty/tools/dotc/parsing/ModifiersParsingTest.scala4
-rw-r--r--library/test/dotty/ShowTests.scala4
-rw-r--r--project/Build.scala181
-rw-r--r--tests/repl/vc.check5
18 files changed, 194 insertions, 146 deletions
diff --git a/.drone.yml b/.drone.yml
index 0b927794e..16a5aff49 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -5,10 +5,11 @@ pipeline:
commands:
- ln -s /var/cache/drone/scala-scala scala-scala
- ./scripts/update-scala-library
- - sbt -Ddotty.drone.mem=4096m -ivy /var/cache/drone/ivy2 "${TEST}"
+ - sbt -J-Xmx4096m -J-XX:ReservedCodeCacheSize=512m -J-XX:MaxMetaspaceSize=1024m -Ddotty.drone.mem=4096m -ivy /var/cache/drone/ivy2 "${TEST}"
matrix:
TEST:
- test
+ - ;publishLocal;dotty-bootstrapped/test
- partest-only-no-bootstrap --show-diff --verbose
- partest-only --show-diff --verbose
diff --git a/compiler/src/dotty/tools/dotc/config/JavaPlatform.scala b/compiler/src/dotty/tools/dotc/config/JavaPlatform.scala
index b5bfbb39f..59201687a 100644
--- a/compiler/src/dotty/tools/dotc/config/JavaPlatform.scala
+++ b/compiler/src/dotty/tools/dotc/config/JavaPlatform.scala
@@ -17,8 +17,6 @@ class JavaPlatform extends Platform {
if (currentClassPath.isEmpty)
currentClassPath = Some(new PathResolver().result)
val cp = currentClassPath.get
- //println(cp)
- //println("------------------")
cp
}
diff --git a/compiler/src/dotty/tools/dotc/config/PathResolver.scala b/compiler/src/dotty/tools/dotc/config/PathResolver.scala
index 8df9a8c0e..184b3718a 100644
--- a/compiler/src/dotty/tools/dotc/config/PathResolver.scala
+++ b/compiler/src/dotty/tools/dotc/config/PathResolver.scala
@@ -255,14 +255,7 @@ class PathResolver(implicit ctx: Context) {
def containers = Calculated.containers
lazy val result: JavaClassPath = {
- // Prioritize `dotty.jar` and `dotty-lib.jar` to shadow others
- val (dottyJars, others) =
- containers.partition(x => x.name.contains("dotty-lib.jar") || x.name.contains("dotty.jar"))
- // Then any jars with `dotty` in the name - putting them before scala-library
- val (dottyCp, remaining) =
- others.partition(_.name.contains("dotty-"))
-
- val cp = new JavaClassPath((dottyJars ++ dottyCp ++ remaining).toIndexedSeq, context)
+ val cp = new JavaClassPath(containers.toIndexedSeq, context)
if (settings.Ylogcp.value) {
Console.println("Classpath built from " + settings.toConciseString(ctx.sstate))
diff --git a/compiler/src/dotty/tools/dotc/core/Definitions.scala b/compiler/src/dotty/tools/dotc/core/Definitions.scala
index 134b31519..0aeb28d36 100644
--- a/compiler/src/dotty/tools/dotc/core/Definitions.scala
+++ b/compiler/src/dotty/tools/dotc/core/Definitions.scala
@@ -319,7 +319,17 @@ class Definitions {
def staticsMethodRef(name: PreName) = ScalaStaticsModule.requiredMethodRef(name)
def staticsMethod(name: PreName) = ScalaStaticsModule.requiredMethod(name)
- lazy val DottyPredefModuleRef = ctx.requiredModuleRef("dotty.DottyPredef")
+ // Dotty deviation: we cannot use a lazy val here because lazy vals in dotty
+ // will return "null" when called recursively, see #1856.
+ def DottyPredefModuleRef = {
+ if (myDottyPredefModuleRef == null) {
+ myDottyPredefModuleRef = ctx.requiredModuleRef("dotty.DottyPredef")
+ assert(myDottyPredefModuleRef != null)
+ }
+ myDottyPredefModuleRef
+ }
+ private[this] var myDottyPredefModuleRef: TermRef = _
+
def DottyPredefModule(implicit ctx: Context) = DottyPredefModuleRef.symbol
def Predef_eqAny(implicit ctx: Context) = DottyPredefModule.requiredMethod(nme.eqAny)
diff --git a/compiler/src/dotty/tools/dotc/core/SymDenotations.scala b/compiler/src/dotty/tools/dotc/core/SymDenotations.scala
index aaae78c57..a3475e14c 100644
--- a/compiler/src/dotty/tools/dotc/core/SymDenotations.scala
+++ b/compiler/src/dotty/tools/dotc/core/SymDenotations.scala
@@ -45,9 +45,13 @@ trait SymDenotations { this: Context =>
else {
val initial = denot.initial
val firstPhaseId = initial.validFor.firstPhaseId.max(ctx.typerPhase.id)
- if ((initial ne denot) || ctx.phaseId != firstPhaseId)
- ctx.withPhase(firstPhaseId).stillValidInOwner(initial)
- else
+ if ((initial ne denot) || ctx.phaseId != firstPhaseId) {
+ ctx.withPhase(firstPhaseId).stillValidInOwner(initial) ||
+ // Workaround #1895: A symbol might not be entered into an owner
+ // until the second phase where it exists
+ (denot.validFor.containsPhaseId(firstPhaseId + 1)) &&
+ ctx.withPhase(firstPhaseId + 1).stillValidInOwner(initial)
+ } else
stillValidInOwner(denot)
}
diff --git a/compiler/src/dotty/tools/dotc/parsing/Scanners.scala b/compiler/src/dotty/tools/dotc/parsing/Scanners.scala
index 101be167e..b75169792 100644
--- a/compiler/src/dotty/tools/dotc/parsing/Scanners.scala
+++ b/compiler/src/dotty/tools/dotc/parsing/Scanners.scala
@@ -567,7 +567,8 @@ object Scanners {
nextChar()
getOperatorRest()
} else {
- error(f"illegal character '\\u${ch: Int}%04x'")
+ // FIXME: Dotty deviation: f"" interpolator is not supported (#1814)
+ error("illegal character '\\u%04x'".format(ch: Int))
nextChar()
}
}
diff --git a/compiler/src/dotty/tools/dotc/sbt/ExtractDependencies.scala b/compiler/src/dotty/tools/dotc/sbt/ExtractDependencies.scala
index fefa63f6f..c392880c5 100644
--- a/compiler/src/dotty/tools/dotc/sbt/ExtractDependencies.scala
+++ b/compiler/src/dotty/tools/dotc/sbt/ExtractDependencies.scala
@@ -175,7 +175,7 @@ private class ExtractDependenciesCollector(implicit val ctx: Context) extends tp
override def traverse(tree: Tree)(implicit ctx: Context): Unit = {
tree match {
case Import(expr, selectors) =>
- def lookupImported(name: Name) = expr.tpe.member(name).symbol
+ def lookupImported(name: Name) = expr.tpe.select(name).typeSymbol
def addImported(name: Name) = {
// importing a name means importing both a term and a type (if they exist)
addDependency(lookupImported(name.toTermName))
diff --git a/compiler/src/dotty/tools/dotc/transform/ElimByName.scala b/compiler/src/dotty/tools/dotc/transform/ElimByName.scala
index 2814baf1e..0e187fc2e 100644
--- a/compiler/src/dotty/tools/dotc/transform/ElimByName.scala
+++ b/compiler/src/dotty/tools/dotc/transform/ElimByName.scala
@@ -81,7 +81,11 @@ class ElimByName extends MiniPhaseTransform with InfoTransformer { thisTransform
val inSuper = if (ctx.mode.is(Mode.InSuperCall)) InSuperCall else EmptyFlags
val meth = ctx.newSymbol(
ctx.owner, nme.ANON_FUN, Synthetic | Method | inSuper, MethodType(Nil, Nil, argType))
- Closure(meth, _ => arg.changeOwner(ctx.owner, meth))
+ Closure(meth, _ =>
+ atGroupEnd { implicit ctx: Context =>
+ arg.changeOwner(ctx.owner, meth)
+ }
+ )
}
ref(defn.dummyApply).appliedToType(argType).appliedTo(argFun)
case _ =>
diff --git a/compiler/src/dotty/tools/dotc/transform/ExtensionMethods.scala b/compiler/src/dotty/tools/dotc/transform/ExtensionMethods.scala
index 925ec08b2..64474cecd 100644
--- a/compiler/src/dotty/tools/dotc/transform/ExtensionMethods.scala
+++ b/compiler/src/dotty/tools/dotc/transform/ExtensionMethods.scala
@@ -63,8 +63,13 @@ class ExtensionMethods extends MiniPhaseTransform with DenotTransformer with Ful
// not generate them again.
if (!(valueClass is Scala2x)) ctx.atPhase(thisTransformer) { implicit ctx =>
for (decl <- valueClass.classInfo.decls) {
- if (isMethodWithExtension(decl))
- decls1.enter(createExtensionMethod(decl, moduleClassSym.symbol))
+ if (isMethodWithExtension(decl)) {
+ val meth = createExtensionMethod(decl, moduleClassSym.symbol)
+ decls1.enter(meth)
+ // Workaround #1895: force denotation of `meth` to be
+ // at phase where `meth` is entered into the decls of a class
+ meth.denot(ctx.withPhase(thisTransformer.next))
+ }
}
}
diff --git a/compiler/src/dotty/tools/dotc/typer/ImportInfo.scala b/compiler/src/dotty/tools/dotc/typer/ImportInfo.scala
index a5657890e..f7efb2ac2 100644
--- a/compiler/src/dotty/tools/dotc/typer/ImportInfo.scala
+++ b/compiler/src/dotty/tools/dotc/typer/ImportInfo.scala
@@ -30,7 +30,16 @@ object ImportInfo {
class ImportInfo(symf: => Symbol, val selectors: List[untpd.Tree],
symNameOpt: Option[TermName], val isRootImport: Boolean = false)(implicit ctx: Context) {
- lazy val sym = symf
+ // Dotty deviation: we cannot use a lazy val here for the same reason
+ // that we cannot use one for `DottyPredefModuleRef`.
+ def sym = {
+ if (mySym == null) {
+ mySym = symf
+ assert(mySym != null)
+ }
+ mySym
+ }
+ private[this] var mySym: Symbol = _
/** The (TermRef) type of the qualifier of the import clause */
def site(implicit ctx: Context): Type = {
diff --git a/compiler/test/dotc/build.scala b/compiler/test/dotc/build.scala
deleted file mode 100644
index b1c8db7c7..000000000
--- a/compiler/test/dotc/build.scala
+++ /dev/null
@@ -1,40 +0,0 @@
-package dotc
-
-import java.io.File
-
-object build extends tests {
-
- private def deleteFilesInFolder(folder: File, deleteFolder: Boolean = false): Unit = {
- val files = folder.listFiles()
- if(files != null) { //some JVMs return null for empty dirs
- for(f <- files) {
- if(f.isDirectory) {
- deleteFilesInFolder(f, deleteFolder = true)
- } else {
- f.delete()
- }
- }
- }
- if(deleteFolder) folder.delete()
- }
-
- def clearOutput() = {
- deleteFilesInFolder(new File(defaultOutputDir)) // clear previous output
- val keepFile = new File(defaultOutputDir + ".keep")
- keepFile.createNewFile()
- }
-
- def main(args: Array[String]): Unit = {
- println("---------- Building bootstrapped dotty-lib ----------------------------------------------")
- clearOutput()
- dottyBootedLib
- val p1 = Runtime.getRuntime.exec(Array("jar", "cf", "dotty-lib.jar", "-C", "out", "."))
- p1.waitFor()
-
- println("---------- Building bootstrapped dotty depending on dotty-lib compiled by dotty ----------")
- clearOutput()
- dottyDependsOnBootedLib
- val p2 = Runtime.getRuntime.exec(Array("jar", "cf", "dotty.jar", "-C", "out", "."))
- p2.waitFor()
- }
-}
diff --git a/compiler/test/dotc/tests.scala b/compiler/test/dotc/tests.scala
index 608132bca..6ef6bb741 100644
--- a/compiler/test/dotc/tests.scala
+++ b/compiler/test/dotc/tests.scala
@@ -61,7 +61,7 @@ class tests extends CompilerTest {
List("-classpath", paths)
}
- implicit val defaultOptions = noCheckOptions ++ {
+ implicit val defaultOptions: List[String] = noCheckOptions ++ {
if (isRunByJenkins) List("-Ycheck:tailrec,resolveSuper,mixin,restoreScopes,labelDef") // should be Ycheck:all, but #725
else List("-Ycheck:tailrec,resolveSuper,mixin,restoreScopes,labelDef")
} ++ checkOptions ++ classPath
diff --git a/compiler/test/dotty/Jars.scala b/compiler/test/dotty/Jars.scala
index 6fc9b0fde..f062f8b25 100644
--- a/compiler/test/dotty/Jars.scala
+++ b/compiler/test/dotty/Jars.scala
@@ -1,20 +1,18 @@
package dotty
-/** Jars used when compiling test, defaults to sbt locations */
+/** Jars used when compiling test, normally set from the sbt build */
object Jars {
- val dottyLib: String = sys.env.get("DOTTY_LIB") getOrElse {
- "../library/target/scala-2.11/dotty-library_2.11-0.1.1-SNAPSHOT.jar"
- }
+ val dottyLib: String = sys.env.get("DOTTY_LIB")
+ .getOrElse(sys.props("dotty.tests.classes.library"))
- val dottyCompiler: String = sys.env.get("DOTTY_COMPILER") getOrElse {
- "./target/scala-2.11/dotty-compiler_2.11-0.1.1-SNAPSHOT.jar"
- }
+ val dottyCompiler: String = sys.env.get("DOTTY_COMPILER")
+ .getOrElse(sys.props("dotty.tests.classes.compiler"))
- val dottyInterfaces: String = sys.env.get("DOTTY_INTERFACE") getOrElse {
- "../interfaces/target/dotty-interfaces-0.1.1-SNAPSHOT.jar"
- }
+ val dottyInterfaces: String = sys.env.get("DOTTY_INTERFACE")
+ .getOrElse(sys.props("dotty.tests.classes.interfaces"))
- val dottyExtras: List[String] = sys.env.get("DOTTY_EXTRAS")
+ val dottyExtras: List[String] = Option(sys.env.get("DOTTY_EXTRAS")
+ .getOrElse(sys.props("dotty.tests.extraclasspath")))
.map(_.split(":").toList).getOrElse(Nil)
val dottyReplDeps: List[String] = dottyLib :: dottyExtras
diff --git a/compiler/test/dotty/partest/DPConsoleRunner.scala b/compiler/test/dotty/partest/DPConsoleRunner.scala
index f418d2c37..7a25af6b7 100644
--- a/compiler/test/dotty/partest/DPConsoleRunner.scala
+++ b/compiler/test/dotty/partest/DPConsoleRunner.scala
@@ -202,7 +202,7 @@ class DPTestRunner(testFile: File, suiteRunner: DPSuiteRunner) extends nest.Runn
import FileManager.joinPaths
// compile using command-line javac compiler
val args = Seq(
- javacCmdPath,
+ suiteRunner.javacCmdPath, // FIXME: Dotty deviation just writing "javacCmdPath" doesn't work
"-d",
outDir.getAbsolutePath,
"-classpath",
@@ -300,11 +300,11 @@ class DPTestRunner(testFile: File, suiteRunner: DPSuiteRunner) extends nest.Runn
// Don't get confused, the neg test passes when compilation fails for at
// least one round (optionally checking the number of compiler errors and
// compiler console output)
- case class CompFailed() extends NegTestState
+ case object CompFailed extends NegTestState
// the neg test fails when all rounds return either of these:
case class CompFailedButWrongNErr(expected: String, found: String) extends NegTestState
- case class CompFailedButWrongDiff() extends NegTestState
- case class CompSucceeded() extends NegTestState
+ case object CompFailedButWrongDiff extends NegTestState
+ case object CompSucceeded extends NegTestState
def nerrIsOk(reason: String) = {
val nerrFinder = """compilation failed with (\d+) errors""".r
@@ -350,7 +350,7 @@ class DPTestRunner(testFile: File, suiteRunner: DPSuiteRunner) extends nest.Runn
if (existsNerr) false
else {
val existsDiff = failureStates.exists({
- case CompFailedButWrongDiff() =>
+ case CompFailedButWrongDiff =>
nextTestActionFailing(s"output differs")
true
case _ =>
@@ -398,8 +398,13 @@ class DPTestRunner(testFile: File, suiteRunner: DPSuiteRunner) extends nest.Runn
override def extraClasspath =
suiteRunner.fileManager.asInstanceOf[DottyFileManager].extraJarList ::: super.extraClasspath
+
+ // FIXME: Dotty deviation: error if return type is omitted:
+ // overriding method cleanup in class Runner of type ()Unit;
+ // method cleanup of type => Boolean | Unit has incompatible type
+
// override to keep class files if failed and delete clog if ok
- override def cleanup = if (lastState.isOk) {
+ override def cleanup: Unit = if (lastState.isOk) {
logFile.delete
cLogFile.delete
Directory(outDir).deleteRecursively
diff --git a/compiler/test/dotty/tools/dotc/parsing/ModifiersParsingTest.scala b/compiler/test/dotty/tools/dotc/parsing/ModifiersParsingTest.scala
index 32f842e92..806e1af46 100644
--- a/compiler/test/dotty/tools/dotc/parsing/ModifiersParsingTest.scala
+++ b/compiler/test/dotty/tools/dotc/parsing/ModifiersParsingTest.scala
@@ -10,11 +10,11 @@ import ast.untpd._
import ast.{ Trees => d }
import Parsers.Parser
import util.SourceFile
-import core.Contexts.ContextBase
+import core.Contexts._
import core.Flags
object ModifiersParsingTest {
- implicit val ctx = (new ContextBase).initialCtx
+ implicit val ctx: Context = (new ContextBase).initialCtx
implicit def parse(code: String): Tree = {
val (_, stats) = new Parser(new SourceFile("<meta>", code.toCharArray)).templateStatSeq()
diff --git a/library/test/dotty/ShowTests.scala b/library/test/dotty/ShowTests.scala
index 7230106d5..b050ad3ee 100644
--- a/library/test/dotty/ShowTests.scala
+++ b/library/test/dotty/ShowTests.scala
@@ -35,13 +35,13 @@ class ShowTests {
@Test def showCar = {
case class Car(model: String, manufacturer: String, year: Int)
- implicit val showCar = new Show[Car] {
+ implicit val showCar: Show[Car] = new Show[Car] {
def show(c: Car) =
"Car(" + c.model.show + ", " + c.manufacturer.show + ", " + c.year.show + ")"
}
case class Shop(xs: List[Car], name: String)
- implicit val showShop = new Show[Shop] {
+ implicit val showShop: Show[Shop] = new Show[Shop] {
def show(sh: Shop) =
"Shop(" + sh.xs.show + ", " + sh.name.show + ")"
}
diff --git a/project/Build.scala b/project/Build.scala
index af862817c..778492624 100644
--- a/project/Build.scala
+++ b/project/Build.scala
@@ -11,8 +11,17 @@ import sbt.Package.ManifestAttributes
object DottyBuild extends Build {
- val baseVersion = "0.1.1"
- val isNightly = sys.env.get("NIGHTLYBUILD") == Some("yes")
+ val scalacVersion = "2.11.5"
+
+ val dottyOrganization = "ch.epfl.lamp"
+ val dottyVersion = {
+ val baseVersion = "0.1.1"
+ val isNightly = sys.env.get("NIGHTLYBUILD") == Some("yes")
+ if (isNightly)
+ baseVersion + "-" + VersionUtil.commitDate + "-" + VersionUtil.gitHash + "-NIGHTLY"
+ else
+ baseVersion + "-SNAPSHOT"
+ }
val jenkinsMemLimit = List("-Xmx1500m")
@@ -45,14 +54,9 @@ object DottyBuild extends Build {
override def settings: Seq[Setting[_]] = {
super.settings ++ Seq(
- scalaVersion in Global := "2.11.5",
- version in Global := {
- if (isNightly)
- baseVersion + "-" + VersionUtil.commitDate + "-" + VersionUtil.gitHash + "-NIGHTLY"
- else
- baseVersion + "-SNAPSHOT"
- },
- organization in Global := "ch.epfl.lamp",
+ scalaVersion in Global := scalacVersion,
+ version in Global := dottyVersion,
+ organization in Global := dottyOrganization,
organizationName in Global := "LAMP/EPFL",
organizationHomepage in Global := Some(url("http://lamp.epfl.ch")),
homepage in Global := Some(url("https://github.com/lampepfl/dotty")),
@@ -82,6 +86,17 @@ object DottyBuild extends Build {
resourceDirectory in Compile := baseDirectory.value / "resources"
)
+ // Settings used by all dotty-compiled projects
+ lazy val commonBootstrappedSettings = Seq(
+ scalaOrganization := dottyOrganization,
+ scalaVersion := dottyVersion,
+ scalaBinaryVersion := "2.11",
+ scalaCompilerBridgeSource :=
+ (dottyOrganization % "dotty-sbt-bridge" % scalaVersion.value % "component").sources(),
+
+ // sbt gets very unhappy if two projects use the same target
+ target := baseDirectory.value / ".." / "out" / name.value
+ )
/** Projects -------------------------------------------------------------- */
@@ -104,23 +119,20 @@ object DottyBuild extends Build {
addCommandAlias("run", "dotty-compiler/run") ++
addCommandAlias(
"partest",
- ";packageAll" +
- ";dotty-compiler/test:runMain dotc.build" +
- ";dotty-compiler/lockPartestFile" +
- ";dotty-compiler/test:test" +
- ";dotty-compiler/runPartestRunner"
+ ";publishLocal" + // Non-bootstrapped dotty needs to be published first
+ ";dotty-compiler-bootstrapped/lockPartestFile" +
+ ";dotty-compiler-bootstrapped/test:test" +
+ ";dotty-compiler-bootstrapped/runPartestRunner"
) ++
addCommandAlias(
"partest-only",
- ";packageAll" +
- ";dotty-compiler/test:runMain dotc.build" +
- ";dotty-compiler/lockPartestFile" +
- ";dotty-compiler/test:test-only dotc.tests" +
- ";dotty-compiler/runPartestRunner"
+ ";publishLocal" + // Non-bootstrapped dotty needs to be published first
+ ";dotty-compiler-bootstrapped/lockPartestFile" +
+ ";dotty-compiler-bootstrapped/test:test-only dotc.tests" +
+ ";dotty-compiler-bootstrapped/runPartestRunner"
) ++
addCommandAlias(
"partest-only-no-bootstrap",
- ";packageAll" +
";dotty-compiler/lockPartestFile" +
";dotty-compiler/test:test-only dotc.tests" +
";dotty-compiler/runPartestRunner"
@@ -128,6 +140,12 @@ object DottyBuild extends Build {
).
settings(publishing)
+ // Meta project aggregating all bootstrapped projects
+ lazy val `dotty-bootstrapped` = project.
+ aggregate(`dotty-library-bootstrapped`, `dotty-compiler-bootstrapped`).
+ settings(
+ publishArtifact := false
+ )
lazy val `dotty-interfaces` = project.in(file("interfaces")).
settings(sourceStructure).
@@ -141,25 +159,8 @@ object DottyBuild extends Build {
).
settings(publishing)
- lazy val `dotty-compiler` = project.in(file("compiler")).
- dependsOn(`dotty-interfaces`).
- dependsOn(`dotty-library`).
- settings(sourceStructure).
- settings(
- overrideScalaVersionSetting,
-
- // Disable scaladoc generation, it's way too slow and we'll replace it
- // by dottydoc anyway. We still publish an empty -javadoc.jar to make
- // sonatype happy.
- sources in (Compile, doc) := Seq(),
-
- // necessary evil: dottydoc currently needs to be included in the dotty
- // project, for sbt integration
- unmanagedSourceDirectories in Compile := Seq((scalaSource in Compile).value),
- unmanagedSourceDirectories in Compile += baseDirectory.value / ".." / "doc-tool" / "src",
- unmanagedSourceDirectories in Test := Seq((scalaSource in Test).value),
- unmanagedSourceDirectories in Test += baseDirectory.value / ".." / "doc-tool" / "test",
-
+ // Settings shared between dotty-compiler and dotty-compiler-bootstrapped
+ lazy val dottyCompilerSettings = Seq(
// set system in/out for repl
connectInput in run := true,
outputStrategy := Some(StdoutOutput),
@@ -178,28 +179,18 @@ object DottyBuild extends Build {
// get libraries onboard
partestDeps := Seq(scalaCompiler,
- "org.scala-lang" % "scala-reflect" % scalaVersion.value,
- "org.scala-lang" % "scala-library" % scalaVersion.value % "test"),
+ "org.scala-lang" % "scala-reflect" % scalacVersion,
+ "org.scala-lang" % "scala-library" % scalacVersion % "test"),
libraryDependencies ++= partestDeps.value,
libraryDependencies ++= Seq("org.scala-lang.modules" %% "scala-xml" % "1.0.1",
"org.scala-lang.modules" %% "scala-partest" % "1.0.11" % "test",
- "ch.epfl.lamp" % "dottydoc-client" % "0.1.0",
+ dottyOrganization % "dottydoc-client" % "0.1.0",
"com.novocode" % "junit-interface" % "0.11" % "test",
"com.github.spullara.mustache.java" % "compiler" % "0.9.3",
"com.typesafe.sbt" % "sbt-interface" % sbtVersion.value),
// enable improved incremental compilation algorithm
incOptions := incOptions.value.withNameHashing(true),
- // packageAll packages all and then returns a map with the abs location
- packageAll := {
- Map(
- "dotty-interfaces" -> (packageBin in (`dotty-interfaces`, Compile)).value,
- "dotty-compiler" -> (packageBin in Compile).value,
- "dotty-library" -> (packageBin in (`dotty-library`, Compile)).value,
- "dotty-compiler-test" -> (packageBin in Test).value
- ) map { case (k, v) => (k, v.getAbsolutePath) }
- },
-
// For convenience, change the baseDirectory when running the compiler
baseDirectory in (Compile, run) := baseDirectory.value / "..",
// .. but not when running partest
@@ -274,8 +265,8 @@ object DottyBuild extends Build {
val args = Def.spaceDelimited("<arg>").parsed
val jars = List(
(packageBin in Compile).value.getAbsolutePath,
- (packageBin in (`dotty-library`, Compile)).value.getAbsolutePath,
- (packageBin in (`dotty-interfaces`, Compile)).value.getAbsolutePath
+ packageAll.value("dotty-library"),
+ packageAll.value("dotty-interfaces")
) ++ getJarPaths(partestDeps.value, ivyPaths.value.ivyHome)
val dottyJars =
s"""-dottyJars ${jars.length + 2} dotty.jar dotty-lib.jar ${jars.mkString(" ")}"""
@@ -326,7 +317,7 @@ object DottyBuild extends Build {
// http://grokbase.com/t/gg/simple-build-tool/135ke5y90p/sbt-setting-jvm-boot-paramaters-for-scala
// packageAll should always be run before tests
- javaOptions <++= (dependencyClasspath in Runtime, packageAll) map { (attList, _) =>
+ javaOptions <++= (dependencyClasspath in Runtime, packageAll) map { (attList, pA) =>
// put needed dependencies on classpath:
val path = for {
file <- attList.map(_.data)
@@ -356,11 +347,67 @@ object DottyBuild extends Build {
List("-XX:+TieredCompilation", "-XX:TieredStopAtLevel=1")
else List()
- ("-DpartestParentID=" + pid) :: tuning ::: agentOptions ::: ci_build ::: path.toList
+ val jars = List(
+ "-Ddotty.tests.classes.interfaces=" + pA("dotty-interfaces"),
+ "-Ddotty.tests.classes.library=" + pA("dotty-library"),
+ "-Ddotty.tests.classes.compiler=" + pA("dotty-compiler")
+ )
+
+ ("-DpartestParentID=" + pid) :: jars ::: tuning ::: agentOptions ::: ci_build ::: path.toList
+ }
+ )
+
+ lazy val `dotty-compiler` = project.in(file("compiler")).
+ dependsOn(`dotty-interfaces`).
+ dependsOn(`dotty-library`).
+ settings(sourceStructure).
+ settings(dottyCompilerSettings).
+ settings(
+ overrideScalaVersionSetting,
+
+ // necessary evil: dottydoc currently needs to be included in the dotty
+ // project, for sbt integration
+ // FIXME: note part of dottyCompilerSettings because the doc-tool does not
+ // compile with dotty
+ unmanagedSourceDirectories in Compile := Seq((scalaSource in Compile).value),
+ unmanagedSourceDirectories in Compile += baseDirectory.value / ".." / "doc-tool" / "src",
+ unmanagedSourceDirectories in Test := Seq((scalaSource in Test).value),
+ unmanagedSourceDirectories in Test += baseDirectory.value / ".." / "doc-tool" / "test",
+
+ // Disable scaladoc generation, it's way too slow and we'll replace it
+ // by dottydoc anyway. We still publish an empty -javadoc.jar to make
+ // sonatype happy.
+ sources in (Compile, doc) := Seq(),
+
+ // packageAll packages all and then returns a map with the abs location
+ packageAll := {
+ Map(
+ "dotty-interfaces" -> (packageBin in (`dotty-interfaces`, Compile)).value,
+ "dotty-compiler" -> (packageBin in Compile).value,
+ "dotty-library" -> (packageBin in (`dotty-library`, Compile)).value,
+ "dotty-compiler-test" -> (packageBin in Test).value
+ ) map { case (k, v) => (k, v.getAbsolutePath) }
}
).
settings(publishing)
+ lazy val `dotty-compiler-bootstrapped` = project.in(file("compiler")).
+ dependsOn(`dotty-library-bootstrapped`).
+ settings(sourceStructure).
+ settings(commonBootstrappedSettings).
+ settings(dottyCompilerSettings).
+ settings(
+ // Used instead of "dependsOn(`dotty-interfaces`)" because the latter breaks sbt somehow
+ libraryDependencies += scalaOrganization.value % "dotty-interfaces" % version.value,
+
+ packageAll := {
+ (packageAll in `dotty-compiler`).value ++ Seq(
+ ("dotty-compiler" -> (packageBin in Compile).value.getAbsolutePath),
+ ("dotty-library" -> (packageBin in (`dotty-library-bootstrapped`, Compile)).value.getAbsolutePath)
+ )
+ }
+ )
+
/* Contains unit tests for the scripts */
lazy val `dotty-bin-tests` = project.in(file("bin")).
settings(sourceStructure).
@@ -371,17 +418,25 @@ object DottyBuild extends Build {
"com.novocode" % "junit-interface" % "0.11" % "test"
)
- lazy val `dotty-library` = project.in(file("library")).
- settings(sourceStructure).
- settings(
+ // Settings shared between dotty-library and dotty-library-bootstrapped
+ lazy val dottyLibrarySettings = Seq(
libraryDependencies ++= Seq(
- "org.scala-lang" % "scala-reflect" % scalaVersion.value,
- "org.scala-lang" % "scala-library" % scalaVersion.value,
+ "org.scala-lang" % "scala-reflect" % scalacVersion,
+ "org.scala-lang" % "scala-library" % scalacVersion,
"com.novocode" % "junit-interface" % "0.11" % "test"
)
- ).
+ )
+
+ lazy val `dotty-library` = project.in(file("library")).
+ settings(sourceStructure).
+ settings(dottyLibrarySettings).
settings(publishing)
+ lazy val `dotty-library-bootstrapped` = project.in(file("library")).
+ settings(sourceStructure).
+ settings(commonBootstrappedSettings).
+ settings(dottyLibrarySettings)
+
// until sbt/sbt#2402 is fixed (https://github.com/sbt/sbt/issues/2402)
lazy val cleanSbtBridge = TaskKey[Unit]("cleanSbtBridge", "delete dotty-sbt-bridge cache")
diff --git a/tests/repl/vc.check b/tests/repl/vc.check
new file mode 100644
index 000000000..e2c9b65fd
--- /dev/null
+++ b/tests/repl/vc.check
@@ -0,0 +1,5 @@
+scala> class Foo(x: Int) extends AnyVal { def hi: Int = 1 }
+defined class Foo
+scala> new Foo(1).hi
+val res0: Int = 1
+scala> :quit