Fix taskDyn

This commit is contained in:
Eugene Yokota 2022-11-27 01:30:20 -05:00
parent 9f5525c989
commit 193b47b49b
3 changed files with 39 additions and 28 deletions

View File

@ -232,7 +232,7 @@ object Def extends Init[Scope] with TaskMacroExtra with InitializeImplicits:
inline def task[A1](inline a1: A1): Def.Initialize[Task[A1]] =
${ TaskMacro.taskMacroImpl[A1]('a1) }
inline def taskDyn[A1](a1: Def.Initialize[Task[A1]]): Def.Initialize[Task[A1]] =
inline def taskDyn[A1](inline a1: Def.Initialize[Task[A1]]): Def.Initialize[Task[A1]] =
${ TaskMacro.taskDynMacroImpl[A1]('a1) }
inline def setting[A1](inline a: A1): Def.Initialize[A1] = ${ settingMacroImpl[A1]('a) }

View File

@ -87,6 +87,12 @@ object Assign {
mk.value + tk.value + mk.value + tk.value + mk.value + tk.value + mk.value + tk.value + mk.value + tk.value + mk.value + tk.value
}
val dyn: Def.Initialize[Task[Int]] = Def.taskDyn {
val a = ak.value
if a < 1 then Def.task { 1 }
else Def.task { 0 }
}
import DefaultParsers._
val p = Def.setting { name.value ~> Space ~> ID }
val is = Seq(

View File

@ -1099,34 +1099,39 @@ object Defaults extends BuildCommon {
}
def scalaInstanceTask: Initialize[Task[ScalaInstance]] =
(Def.task { (Keys.scalaHome.value, appConfiguration.value, scalaVersion.value) }).flatMapTask {
case (Some(h), _, _) => scalaInstanceFromHome(h)
case (_, app, version) =>
val scalaProvider = app.provider.scalaProvider
if version == scalaProvider.version then
// use the same class loader as the Scala classes used by sbt
Def.task {
val allJars = scalaProvider.jars
val libraryJars = allJars
.filter { jar =>
(jar.getName == "scala-library.jar") || (jar.getName.startsWith("scala3-library_3"))
}
(allJars.filter { jar =>
jar.getName == "scala-compiler.jar" || jar.getName.startsWith("scala3-compiler_3")
}) match {
case Array(compilerJar) if libraryJars.nonEmpty =>
makeScalaInstance(
version,
libraryJars,
allJars,
Seq.empty,
state.value,
scalaInstanceTopLoader.value
)
case _ => ScalaInstance(version, scalaProvider)
Def.taskDyn {
val sh = Keys.scalaHome.value
val app = appConfiguration.value
val sv = scalaVersion.value
sh match
case Some(h) => scalaInstanceFromHome(h)
case _ =>
val scalaProvider = app.provider.scalaProvider
if sv == scalaProvider.version then
// use the same class loader as the Scala classes used by sbt
Def.task {
val allJars = scalaProvider.jars
val libraryJars = allJars
.filter { jar =>
(jar.getName == "scala-library.jar") || (jar.getName.startsWith(
"scala3-library_3"
))
}
(allJars.filter { jar =>
jar.getName == "scala-compiler.jar" || jar.getName.startsWith("scala3-compiler_3")
}) match
case Array(compilerJar) if libraryJars.nonEmpty =>
makeScalaInstance(
sv,
libraryJars,
allJars.toSeq,
Seq.empty,
state.value,
scalaInstanceTopLoader.value
)
case _ => ScalaInstance(sv, scalaProvider)
}
}
else scalaInstanceFromUpdate
else scalaInstanceFromUpdate
}
// Returns the ScalaInstance only if it was not constructed via `update`