Skip to content

Commit faa0687

Browse files
committed
ugly WIP
1 parent 0d7866a commit faa0687

File tree

7 files changed

+47
-19
lines changed

7 files changed

+47
-19
lines changed

Diff for: compiler/src/dotty/tools/dotc/classpath/AggregateClassPath.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ case class AggregateClassPath(aggregates: Seq[ClassPath]) extends ClassPath {
3333
packageIndex.getOrElseUpdate(pkg.dottedString, aggregates.filter(_.hasPackage(pkg)))
3434
}
3535

36-
override def asURLs: Seq[URL] = aggregates.flatMap(_.asURLs)
36+
override def asURLs: Seq[URL] = aggregates.filter(a => !a.isInstanceOf[VirtualDirectoryClassPath]).flatMap(_.asURLs)
3737

3838
override def asClassPathStrings: Seq[String] = aggregates.map(_.asClassPathString).distinct
3939

Diff for: compiler/src/dotty/tools/dotc/config/JavaPlatform.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class JavaPlatform extends Platform {
2727
case _ => false
2828
})
2929

30-
def addToClassPath(cPath: ClassPath): Unit = currentClassPath.get match {
30+
def addToClassPath(cPath: ClassPath)(using Context): Unit = classPath match {
3131
case AggregateClassPath(entries) =>
3232
currentClassPath = Some(AggregateClassPath(entries :+ cPath))
3333
case cp: ClassPath =>

Diff for: compiler/src/dotty/tools/dotc/config/Platform.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ abstract class Platform {
2020

2121
/** Update classpath with a substitution that maps entries to entries */
2222
def updateClassPath(subst: Map[ClassPath, ClassPath]): Unit
23-
def addToClassPath(cPath: ClassPath): Unit
23+
def addToClassPath(cPath: ClassPath)(using Context): Unit
2424

2525
/** Any platform-specific phases. */
2626
//def platformPhases: List[SubComponent]

Diff for: compiler/src/dotty/tools/dotc/config/Settings.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ object Settings:
3333
private val changed: mutable.Set[Int] = initialChanged.to(mutable.Set)
3434
private var _wasRead: Boolean = false
3535

36-
override def toString: String = s"SettingsState(values: ${values.toList})"
36+
override def toString: String = s"SettingsState(values: ${values.toList.zipWithIndex.mkString("[", ",\n\t", "]")})"
3737

3838
def value(idx: Int): Any =
3939
_wasRead = true

Diff for: compiler/src/dotty/tools/dotc/core/Contexts.scala

+13-7
Original file line numberDiff line numberDiff line change
@@ -14,31 +14,33 @@ import Uniques.*
1414
import ast.Trees.*
1515
import Flags.ParamAccessor
1616
import ast.untpd
17-
import util.{NoSource, SimpleIdentityMap, SourceFile, HashSet, ReusableInstance}
18-
import typer.{Implicits, ImportInfo, SearchHistory, SearchRoot, TypeAssigner, Typer, Nullables}
17+
import util.{HashSet, NoSource, ReusableInstance, SimpleIdentityMap, SourceFile}
18+
import typer.{Implicits, ImportInfo, Nullables, SearchHistory, SearchRoot, TypeAssigner, Typer}
1919
import inlines.Inliner
2020
import Nullables.*
2121
import Implicits.ContextualImplicits
2222
import config.Settings.*
2323
import config.Config
2424
import reporting.*
25-
import io.{AbstractFile, NoAbstractFile, PlainFile, Path}
25+
import io.{AbstractFile, ClassPath, NoAbstractFile, Path, PlainFile}
26+
2627
import scala.io.Codec
2728
import collection.mutable
2829
import printing.*
29-
import config.{JavaPlatform, SJSPlatform, Platform, ScalaSettings}
30+
import config.{JavaPlatform, Platform, SJSPlatform, ScalaSettings}
3031
import classfile.ReusableDataReader
3132
import StdNames.nme
32-
import compiletime.uninitialized
3333

34+
import compiletime.uninitialized
3435
import scala.annotation.internal.sharable
35-
3636
import DenotTransformers.DenotTransformer
37+
import dotty.tools.dotc.classpath.ClassPathFactory
3738
import dotty.tools.dotc.profile.Profiler
3839
import dotty.tools.dotc.sbt.interfaces.{IncrementalCallback, ProgressCallback}
3940
import util.Property.Key
4041
import util.Store
4142
import plugins.*
43+
4244
import java.util.concurrent.atomic.AtomicInteger
4345
import java.nio.file.InvalidPathException
4446

@@ -917,8 +919,12 @@ object Contexts {
917919
/** Initializes the `ContextBase` with a starting context.
918920
* This initializes the `platform` and the `definitions`.
919921
*/
920-
def initialize()(using Context): Unit = {
922+
def initialize(oldCP: Option[AbstractFile] = None)(using Context): Unit = {
921923
_platform = newPlatform
924+
oldCP.foreach(cp =>
925+
_platform.nn.addToClassPath(ClassPathFactory.newClassPath(cp))
926+
println(s"adding to CP old outputDir: ${_platform.nn.classPath}")
927+
)
922928
definitions.init()
923929
}
924930

Diff for: compiler/src/dotty/tools/dotc/core/Definitions.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -2205,7 +2205,7 @@ class Definitions {
22052205

22062206
private var isInitialized = false
22072207

2208-
def init()(using Context): Unit = {
2208+
def init(require: Boolean = false)(using Context): Unit = {
22092209
this.initCtx = ctx
22102210
if (!isInitialized) {
22112211
// force initialization of every symbol that is synthesized or hijacked by the compiler

Diff for: compiler/src/dotty/tools/repl/ReplDriver.scala

+29-7
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ class ReplDriver(settings: Array[String],
9494
initCtx.settings.YwithBestEffortTasty.name
9595
)
9696

97-
private def setupRootCtx(settings: Array[String], rootCtx: Context) = {
97+
private def setupRootCtx(settings: Array[String], rootCtx: Context, oldCP: Option[AbstractFile] = None) = {
9898
val incompatible = settings.intersect(incompatibleOptions)
9999
val filteredSettings =
100100
if !incompatible.isEmpty then
@@ -107,7 +107,7 @@ class ReplDriver(settings: Array[String],
107107
case Some((files, ictx)) => inContext(ictx) {
108108
shouldStart = true
109109
if files.nonEmpty then out.println(i"Ignoring spurious arguments: $files%, %")
110-
ictx.base.initialize()
110+
ictx.base.initialize(oldCP)
111111
ictx
112112
}
113113
case None =>
@@ -537,7 +537,7 @@ class ReplDriver(settings: Array[String],
537537
val cp = state.context.platform.classPath(using state.context).asClassPathString
538538
// println(s"CURRENT CP STRING: $cp")
539539
val newCP = s"$cp${JFile.pathSeparator}$path"
540-
println(s"UPDATED CP: $newCP")
540+
// println(s"UPDATED CP: $newCP")
541541

542542
// add to compiler class path
543543
// println(s"INIT state classPath = ${state.context.platform.classPath(using state.context).asClassPathString}")
@@ -546,15 +546,37 @@ class ReplDriver(settings: Array[String],
546546
// println(s"classPath after add = ${state.context.platform.classPath(using state.context).asClassPathString}")
547547

548548
// recreate initial context
549-
resetToInitial(List("-classpath", newCP))
550-
// rootCtx = setupRootCtx(Array(), rootCtx.fresh.setSetting(rootCtx.settings.classpath, newCP))
549+
// resetToInitial(List("-classpath", newCP))
550+
// rootCtx = initialCtx(List("-classpath", newCP))
551+
552+
// println(s"init@7 = ${initCtx.fresh.settings.allSettings(7).name}, value = ${initCtx.fresh.settingsState.value(7)}")
553+
// println(s"root@7 = ${rootCtx.fresh.settings.allSettings(7).name}, value = ${rootCtx.fresh.settingsState.value(7)}")
554+
555+
println(s"settings.outputDir.default = ${rootCtx.settings.outputDir.default}, settingsState.value=${rootCtx.settingsState.value(7)}, ? = ${rootCtx.settings.outputDir.valueIn(rootCtx.settingsState)}")
556+
val oldOutputDir = rootCtx.settings.outputDir.valueIn(rootCtx.settingsState)
557+
val ctxToUse =
558+
initCtx.fresh
559+
.setSetting(rootCtx.settings.classpath, newCP)
560+
// .setSetting(rootCtx.settings.outputDir, oldOutputDir)
561+
// rootCtx.fresh
562+
// .setSetting(rootCtx.settings.classpath, newCP)
563+
// ctxToUse.platform.addToClassPath(ClassPathFactory.newClassPath(rootCtx.settings.outputDir.default)(using ctxToUse))
564+
565+
println(s"USED@7 = ${ctxToUse.settings.allSettings(7).name}, value = ${ctxToUse.settingsState.value(7)}")
566+
rootCtx = setupRootCtx(
567+
Array(),
568+
ctxToUse,
569+
oldCP = Some(oldOutputDir)
570+
)
551571
val s = state.copy(context = rootCtx)
572+
// println(s"VERIFY: ${s.context.platform.classPath(using s.context).hasPackage("mylibrary")}")
552573

553574
// new class loader
554575
val oldCL = rendering.classLoader()(using state.context)
555576
val newCL = fromURLsParallelCapable(s.context.platform.classPath(using s.context).asURLs, oldCL)
556-
rendering.myClassLoader = new AbstractFileClassLoader(state.context.settings.outputDir.default, newCL)
557-
// out.println(s"Added '$path' to classpath.")
577+
val innerCL = new AbstractFileClassLoader(oldOutputDir, newCL)
578+
rendering.myClassLoader = new AbstractFileClassLoader(s.context.settings.outputDir.default, innerCL)
579+
out.println(s"Added '$path' to classpath.")
558580
s
559581
case TypeOf(expr) =>
560582
expr match {

0 commit comments

Comments
 (0)