Ensure runtime exceptions are caught when evaluating predicates.
An exception raised by a predicate solver must not break evaluation.
This commit is contained in:
parent
59f653aeee
commit
b51d8257ba
|
|
@ -301,8 +301,12 @@ internal class ControllerImpl (
|
|||
try {
|
||||
this.status = block.invoke(status)
|
||||
|
||||
} catch (ex: EvaluationFailureException) {
|
||||
this.status = status.fail(EvaluationFailure(ex))
|
||||
} catch (ex: RuntimeException) {
|
||||
val failure = if (ex is EvaluationFailureException)
|
||||
EvaluationFailure(ex)
|
||||
else
|
||||
EvaluationFailure(EvaluationFailureException(ex))
|
||||
this.status = status.fail(failure)
|
||||
}
|
||||
}
|
||||
return status.operational
|
||||
|
|
@ -313,11 +317,14 @@ internal class ControllerImpl (
|
|||
try {
|
||||
block()
|
||||
|
||||
} catch (ex: EvaluationFailureException) {
|
||||
val failure = EvaluationFailure(ex)
|
||||
} catch (ex: RuntimeException) {
|
||||
val failure = if (ex is EvaluationFailureException)
|
||||
EvaluationFailure(ex)
|
||||
else
|
||||
EvaluationFailure(EvaluationFailureException(ex))
|
||||
if (checking) {
|
||||
this.status = status.abort(failure)
|
||||
|
||||
|
||||
} else {
|
||||
trace.feedback(failure)
|
||||
this.status = status.fail(failure)
|
||||
|
|
|
|||
|
|
@ -3,10 +3,7 @@ import jetbrains.mps.logic.reactor.core.Occurrence
|
|||
import jetbrains.mps.logic.reactor.core.ReactorLifecycle
|
||||
import jetbrains.mps.logic.reactor.core.RulesDiff
|
||||
import jetbrains.mps.logic.reactor.core.internal.MatchJournal
|
||||
import jetbrains.mps.logic.reactor.evaluation.SessionToken
|
||||
import jetbrains.mps.logic.reactor.evaluation.EvaluationResult
|
||||
import jetbrains.mps.logic.reactor.evaluation.EvaluationSession
|
||||
import jetbrains.mps.logic.reactor.evaluation.PredicateInvocation
|
||||
import jetbrains.mps.logic.reactor.evaluation.*
|
||||
import jetbrains.mps.logic.reactor.program.Constraint
|
||||
import jetbrains.mps.logic.reactor.program.ConstraintSymbol
|
||||
import jetbrains.mps.logic.reactor.program.IncrementalContractViolationException
|
||||
|
|
@ -1544,7 +1541,7 @@ class TestIncrementalProgram {
|
|||
}
|
||||
}
|
||||
|
||||
@Test(expected = IncrementalContractViolationException::class)
|
||||
@Test(expected = EvaluationFailureException::class)
|
||||
fun violatePrincipalLogicalContract() {
|
||||
val progSpec = MockIncrProgSpec(
|
||||
setOf("main", "produceBound"),
|
||||
|
|
|
|||
Loading…
Reference in New Issue