From 3bdc1123ad824ce28d0c120ab6b63b7c642d86a5 Mon Sep 17 00:00:00 2001 From: Grigorii Kirgizov Date: Wed, 15 Jul 2020 17:38:16 +0300 Subject: [PATCH] Incr engine: refine reexecution position for reactivated occurrences In short, this change restricts information algo needs from journal. It restricts how far invalidation stage goes into journal. Previously it fed ExecQueue with position arbitrarily far in 'past', whereas now it feeds the closest valid position (the 'present'). --- .../logic/reactor/core/internal/ConstraintsProcessing.kt | 8 ++++---- .../mps/logic/reactor/core/internal/ExecutionQueue.kt | 4 +--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ConstraintsProcessing.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ConstraintsProcessing.kt index 32bd41bc..8eeb4695 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ConstraintsProcessing.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ConstraintsProcessing.kt @@ -81,7 +81,7 @@ internal class ConstraintsProcessing(private var dispatchingFront: Dispatcher.Di val justificationRoots = mutableListOf() val it = this.iterator() - var prevChunk = it.next() // skip initial chunk + var lastValidChunk = it.next() // skip initial chunk while (it.hasNext()) { val chunk = it.next() @@ -118,11 +118,11 @@ internal class ConstraintsProcessing(private var dispatchingFront: Dispatcher.Di // all occurrences from the head are principal. assert(chunk.match.allHeads().all { it.isPrincipal }) - execQueue.offerAll(prevChunk.toPos(), validOccs.asIterable()) + execQueue.offerAll(lastValidChunk.toPos(), validOccs.asIterable()) } + } else { + lastValidChunk = chunk } - - prevChunk = chunk } } diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ExecutionQueue.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ExecutionQueue.kt index 2b10cf3c..a0160447 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ExecutionQueue.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/internal/ExecutionQueue.kt @@ -128,9 +128,7 @@ internal class ExecutionQueue( fun offerAll(continueFromPos: MatchJournal.Pos, occs: Iterable) = occs.forEach { journalIndex.activatingChunkOf(it)?.let { occChunk -> - // todo: ensure which is better -// offer(continueFromPos, occChunk) - offer(occChunk.toPos(), occChunk) + offer(continueFromPos, occChunk) } }