Skip to content

Commit fe3930d

Browse files
committed
Better encapsulate Cache.assume
1 parent d0e71a2 commit fe3930d

File tree

1 file changed

+9
-17
lines changed

1 file changed

+9
-17
lines changed

compiler/src/dotty/tools/dotc/transform/init/Semantic.scala

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -289,21 +289,22 @@ object Semantic {
289289
if out.contains(value, expr) then out(value)(expr)
290290
else stable(value)(expr)
291291

292-
def assume(value: Value, expr: Tree) =
293-
292+
def assume(value: Value, expr: Tree)(fun: => Result): Result =
294293
val assumeValue =
295294
if in.contains(value, expr) then
296295
in.get(value, expr)
297296
else
298297
in.put(value, expr, Hot)
299298
Hot
300299
out.put(value, expr, assumeValue)
301-
assumeValue
302300

303-
def update(value: Value, expr: Tree, result: Value) =
304-
this.changed = true
305-
in.put(value, expr, result)
306-
out.put(value, expr, result)
301+
val actual = fun
302+
if actual.value != assumeValue then
303+
this.changed = true
304+
in.put(value, expr, actual.value)
305+
out.put(value, expr, actual.value)
306+
307+
actual
307308

308309
def remove(value: Value, expr: Tree) =
309310
out.remove(value, expr)
@@ -910,16 +911,7 @@ object Semantic {
910911
*/
911912
def eval(expr: Tree, thisV: Ref, klass: ClassSymbol, cacheResult: Boolean = false): Contextual[Result] = log("evaluating " + expr.show + ", this = " + thisV.show, printer, (_: Result).show) {
912913
if (cache.contains(thisV, expr)) Result(cache(thisV, expr), Errors.empty)
913-
else {
914-
val assumeValue = cache.assume(thisV, expr)
915-
val res = cases(expr, thisV, klass)
916-
if res.value != assumeValue then
917-
// println("changed: old = " + assumeValue + ", res = " + res.value)
918-
cache.update(thisV, expr, res.value) // must put in cache for termination
919-
else
920-
if !cacheResult then cache.remove(thisV, expr)
921-
res
922-
}
914+
else cache.assume(thisV, expr) { cases(expr, thisV, klass) }
923915
}
924916

925917
/** Evaluate a list of expressions */

0 commit comments

Comments
 (0)