diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2017-10-22 19:33:59 -0700 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2017-10-22 19:33:59 -0700 |
commit | d57ad0b63b54076d9182fdb75df9e38c8b30b58c (patch) | |
tree | 2df0a7b201676df1460915023ef48e4b4a0fd9df /src/main/scala | |
parent | 3bfac52e0f81dfcdaf892d631ff14d7e9f9190cc (diff) | |
download | mill-d57ad0b63b54076d9182fdb75df9e38c8b30b58c.tar.gz mill-d57ad0b63b54076d9182fdb75df9e38c8b30b58c.tar.bz2 mill-d57ad0b63b54076d9182fdb75df9e38c8b30b58c.zip |
Move to caching based on label instead of Target object
`anonTriple` test currently fails, because both `AnonTriple.down` and `AnonTriple.down.inputs(0)` end up picking up the same label...
Diffstat (limited to 'src/main/scala')
-rw-r--r-- | src/main/scala/forge/Evaluator.scala | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/main/scala/forge/Evaluator.scala b/src/main/scala/forge/Evaluator.scala index b0c8bf12..f341c9cb 100644 --- a/src/main/scala/forge/Evaluator.scala +++ b/src/main/scala/forge/Evaluator.scala @@ -9,7 +9,7 @@ import scala.collection.mutable class Evaluator(workspacePath: jnio.Path, enclosingBase: DefCtx){ - val resultCache = mutable.Map.empty[Target[_], (Int, Any)] + val resultCache = mutable.Map.empty[String, (Int, Any)] def evaluate(targets: Seq[Target[_]]): Evaluator.Results = { jnio.Files.createDirectories(workspacePath) @@ -27,17 +27,20 @@ class Evaluator(workspacePath: jnio.Path, ) deleteRec(targetDestPath) targetDestPath + case None => jnio.Files.createTempDirectory(null) } val inputsHash = inputResults.hashCode - resultCache.get(target) match{ + target.defCtx.staticEnclosing.flatMap(resultCache.get) match{ case Some((hash, res)) if hash == inputsHash && !target.dirty => results(target) = res case _ => evaluated.append(target) val res = target.evaluate(new Args(inputResults, targetDestPath)) - resultCache(target) = (inputsHash, res) + for(label <- target.defCtx.staticEnclosing) { + resultCache(label) = (inputsHash, res) + } results(target) = res } |