Updated API sources from the latest version of Logic. Adapted to the new API. Activation stack.
This commit is contained in:
parent
e97b854f4c
commit
bedb9592a0
|
|
@ -2,11 +2,24 @@ package jetbrains.mps.logic.reactor.evaluation;
|
|||
|
||||
/*Generated by MPS */
|
||||
|
||||
import jetbrains.mps.logic.reactor.program.Rule;
|
||||
import jetbrains.mps.logic.reactor.program.PredicateSymbol;
|
||||
import jetbrains.mps.logic.reactor.program.Symbol;
|
||||
|
||||
public interface EvaluationTrace {
|
||||
|
||||
public void activate(ConstraintOccurrence occurrence);
|
||||
|
||||
public void reactivate(ConstraintOccurrence occurrence);
|
||||
|
||||
public void suspend(ConstraintOccurrence occurrence);
|
||||
|
||||
public void discard(ConstraintOccurrence occurrence);
|
||||
|
||||
public void trigger(MatchRule matchRule);
|
||||
|
||||
public void exit(Rule rule);
|
||||
|
||||
public void askSuccess(PredicateSymbol predicateSymbol, Object... args);
|
||||
|
||||
public void askFailure(PredicateSymbol predicateSymbol, Object... args);
|
||||
|
|
@ -18,6 +31,19 @@ public interface EvaluationTrace {
|
|||
public void reportFailure(String message);
|
||||
|
||||
public static final EvaluationTrace NULL = new EvaluationTrace() {
|
||||
|
||||
public void activate(ConstraintOccurrence occurrence) {
|
||||
}
|
||||
public void reactivate(ConstraintOccurrence occurrence) {
|
||||
}
|
||||
public void suspend(ConstraintOccurrence occurrence) {
|
||||
}
|
||||
public void discard(ConstraintOccurrence occurrence) {
|
||||
}
|
||||
public void trigger(MatchRule matchRule) {
|
||||
}
|
||||
public void exit(Rule rule) {
|
||||
}
|
||||
public void askSuccess(PredicateSymbol predicateSymbol, Object... args) {
|
||||
}
|
||||
public void askFailure(PredicateSymbol predicateSymbol, Object... args) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
package jetbrains.mps.logic.reactor.evaluation;
|
||||
|
||||
/*Generated by MPS */
|
||||
|
||||
import jetbrains.mps.logic.reactor.program.Rule;
|
||||
|
||||
public interface MatchRule {
|
||||
|
||||
public Rule rule();
|
||||
|
||||
public Iterable<ConstraintOccurrence> matchHeadKept();
|
||||
|
||||
public Iterable<ConstraintOccurrence> matchHeadReplaced();
|
||||
|
||||
}
|
||||
|
|
@ -12,62 +12,116 @@
|
|||
<concept fqn="jetbrains.mps.baseLanguage.structure.ThrowStatement" />
|
||||
<root nodeRef="r:2a79c8aa-e372-4c00-8d71-5d7f3db517e4(jetbrains.mps.logic.reactor.evaluation)/2394628030058821331">
|
||||
<file name="EvaluationTrace.java">
|
||||
<node id="2394628030058889702" at="10,0,11,0" concept="4" trace="askSuccess#(Ljetbrains/mps/logic/reactor/program/PredicateSymbol;null)V" />
|
||||
<node id="2394628030058891476" at="12,0,13,0" concept="4" trace="askFailure#(Ljetbrains/mps/logic/reactor/program/PredicateSymbol;null)V" />
|
||||
<node id="7375810237849470390" at="14,0,15,0" concept="4" trace="ask#(Ljetbrains/mps/logic/reactor/program/PredicateSymbol;null)V" />
|
||||
<node id="7375810237849456124" at="16,0,17,0" concept="4" trace="tell#(Ljetbrains/mps/logic/reactor/program/Symbol;null)V" />
|
||||
<node id="8344829839210112466" at="18,0,19,0" concept="4" trace="reportFailure#(Ljava/lang/String;)V" />
|
||||
<node id="5160444407776325515" at="21,0,23,0" concept="4" trace="askSuccess#(Ljetbrains/mps/logic/reactor/program/PredicateSymbol;null)V" />
|
||||
<node id="5160444407776325526" at="23,0,25,0" concept="4" trace="askFailure#(Ljetbrains/mps/logic/reactor/program/PredicateSymbol;null)V" />
|
||||
<node id="5160444407776325537" at="25,0,27,0" concept="4" trace="ask#(Ljetbrains/mps/logic/reactor/program/PredicateSymbol;null)V" />
|
||||
<node id="5160444407776325548" at="27,0,29,0" concept="4" trace="tell#(Ljetbrains/mps/logic/reactor/program/Symbol;null)V" />
|
||||
<node id="5160444407776325559" at="29,0,31,0" concept="4" trace="reportFailure#(Ljava/lang/String;)V" />
|
||||
<node id="5160444407776320865" at="20,0,32,0" concept="7" trace="NULL" />
|
||||
<scope id="5160444407776325524" at="21,77,21,77" />
|
||||
<scope id="5160444407776325535" at="23,77,23,77" />
|
||||
<scope id="5160444407776325546" at="25,70,25,70" />
|
||||
<scope id="5160444407776325557" at="27,53,27,53" />
|
||||
<scope id="5160444407776325565" at="29,47,29,47" />
|
||||
<scope id="2394628030058889702" at="10,0,11,0">
|
||||
<node id="1568093847249272547" at="11,0,12,0" concept="4" trace="activate#(Ljetbrains/mps/logic/reactor/evaluation/ConstraintOccurrence;)V" />
|
||||
<node id="1568093847249273983" at="13,0,14,0" concept="4" trace="reactivate#(Ljetbrains/mps/logic/reactor/evaluation/ConstraintOccurrence;)V" />
|
||||
<node id="1568093847249274899" at="15,0,16,0" concept="4" trace="suspend#(Ljetbrains/mps/logic/reactor/evaluation/ConstraintOccurrence;)V" />
|
||||
<node id="1568093847249275822" at="17,0,18,0" concept="4" trace="discard#(Ljetbrains/mps/logic/reactor/evaluation/ConstraintOccurrence;)V" />
|
||||
<node id="1568093847249552578" at="19,0,20,0" concept="4" trace="trigger#(Ljetbrains/mps/logic/reactor/evaluation/MatchRule;)V" />
|
||||
<node id="1568093847249559176" at="21,0,22,0" concept="4" trace="exit#(Ljetbrains/mps/logic/reactor/program/Rule;)V" />
|
||||
<node id="2394628030058889702" at="23,0,24,0" concept="4" trace="askSuccess#(Ljetbrains/mps/logic/reactor/program/PredicateSymbol;null)V" />
|
||||
<node id="2394628030058891476" at="25,0,26,0" concept="4" trace="askFailure#(Ljetbrains/mps/logic/reactor/program/PredicateSymbol;null)V" />
|
||||
<node id="7375810237849470390" at="27,0,28,0" concept="4" trace="ask#(Ljetbrains/mps/logic/reactor/program/PredicateSymbol;null)V" />
|
||||
<node id="7375810237849456124" at="29,0,30,0" concept="4" trace="tell#(Ljetbrains/mps/logic/reactor/program/Symbol;null)V" />
|
||||
<node id="8344829839210112466" at="31,0,32,0" concept="4" trace="reportFailure#(Ljava/lang/String;)V" />
|
||||
<node id="1568093847249278110" at="35,0,37,0" concept="4" trace="activate#(Ljetbrains/mps/logic/reactor/evaluation/ConstraintOccurrence;)V" />
|
||||
<node id="1568093847249278118" at="37,0,39,0" concept="4" trace="reactivate#(Ljetbrains/mps/logic/reactor/evaluation/ConstraintOccurrence;)V" />
|
||||
<node id="1568093847249278126" at="39,0,41,0" concept="4" trace="suspend#(Ljetbrains/mps/logic/reactor/evaluation/ConstraintOccurrence;)V" />
|
||||
<node id="1568093847249278134" at="41,0,43,0" concept="4" trace="discard#(Ljetbrains/mps/logic/reactor/evaluation/ConstraintOccurrence;)V" />
|
||||
<node id="1568093847249562172" at="43,0,45,0" concept="4" trace="trigger#(Ljetbrains/mps/logic/reactor/evaluation/MatchRule;)V" />
|
||||
<node id="1568093847249562180" at="45,0,47,0" concept="4" trace="exit#(Ljetbrains/mps/logic/reactor/program/Rule;)V" />
|
||||
<node id="5160444407776325515" at="47,0,49,0" concept="4" trace="askSuccess#(Ljetbrains/mps/logic/reactor/program/PredicateSymbol;null)V" />
|
||||
<node id="5160444407776325526" at="49,0,51,0" concept="4" trace="askFailure#(Ljetbrains/mps/logic/reactor/program/PredicateSymbol;null)V" />
|
||||
<node id="5160444407776325537" at="51,0,53,0" concept="4" trace="ask#(Ljetbrains/mps/logic/reactor/program/PredicateSymbol;null)V" />
|
||||
<node id="5160444407776325548" at="53,0,55,0" concept="4" trace="tell#(Ljetbrains/mps/logic/reactor/program/Symbol;null)V" />
|
||||
<node id="5160444407776325559" at="55,0,57,0" concept="4" trace="reportFailure#(Ljava/lang/String;)V" />
|
||||
<node id="5160444407776320865" at="33,0,58,0" concept="7" trace="NULL" />
|
||||
<scope id="1568093847249278117" at="35,59,35,59" />
|
||||
<scope id="1568093847249278125" at="37,61,37,61" />
|
||||
<scope id="1568093847249278133" at="39,58,39,58" />
|
||||
<scope id="1568093847249278141" at="41,58,41,58" />
|
||||
<scope id="1568093847249562179" at="43,46,43,46" />
|
||||
<scope id="1568093847249562187" at="45,33,45,33" />
|
||||
<scope id="5160444407776325524" at="47,77,47,77" />
|
||||
<scope id="5160444407776325535" at="49,77,49,77" />
|
||||
<scope id="5160444407776325546" at="51,70,51,70" />
|
||||
<scope id="5160444407776325557" at="53,53,53,53" />
|
||||
<scope id="5160444407776325565" at="55,47,55,47" />
|
||||
<scope id="1568093847249272547" at="11,0,12,0">
|
||||
<var name="occurrence" id="1568093847249273451" />
|
||||
</scope>
|
||||
<scope id="1568093847249273983" at="13,0,14,0">
|
||||
<var name="occurrence" id="1568093847249273984" />
|
||||
</scope>
|
||||
<scope id="1568093847249274899" at="15,0,16,0">
|
||||
<var name="occurrence" id="1568093847249274900" />
|
||||
</scope>
|
||||
<scope id="1568093847249275822" at="17,0,18,0">
|
||||
<var name="occurrence" id="1568093847249275823" />
|
||||
</scope>
|
||||
<scope id="1568093847249552578" at="19,0,20,0">
|
||||
<var name="matchRule" id="6976745534798433645" />
|
||||
</scope>
|
||||
<scope id="1568093847249559176" at="21,0,22,0">
|
||||
<var name="rule" id="1568093847249559177" />
|
||||
</scope>
|
||||
<scope id="2394628030058889702" at="23,0,24,0">
|
||||
<var name="args" id="2394628030058890766" />
|
||||
<var name="predicateSymbol" id="2394628030058890707" />
|
||||
</scope>
|
||||
<scope id="2394628030058891476" at="12,0,13,0">
|
||||
<scope id="2394628030058891476" at="25,0,26,0">
|
||||
<var name="args" id="2394628030058891479" />
|
||||
<var name="predicateSymbol" id="2394628030058891477" />
|
||||
</scope>
|
||||
<scope id="7375810237849470390" at="14,0,15,0">
|
||||
<scope id="7375810237849470390" at="27,0,28,0">
|
||||
<var name="args" id="7375810237849470393" />
|
||||
<var name="predicateSymbol" id="7375810237849470391" />
|
||||
</scope>
|
||||
<scope id="7375810237849456124" at="16,0,17,0">
|
||||
<scope id="7375810237849456124" at="29,0,30,0">
|
||||
<var name="args" id="7375810237849456127" />
|
||||
<var name="symbol" id="7375810237849456125" />
|
||||
</scope>
|
||||
<scope id="8344829839210112466" at="18,0,19,0">
|
||||
<scope id="8344829839210112466" at="31,0,32,0">
|
||||
<var name="message" id="8344829839210112700" />
|
||||
</scope>
|
||||
<scope id="5160444407776325515" at="21,0,23,0">
|
||||
<scope id="1568093847249278110" at="35,0,37,0">
|
||||
<var name="occurrence" id="1568093847249278111" />
|
||||
</scope>
|
||||
<scope id="1568093847249278118" at="37,0,39,0">
|
||||
<var name="occurrence" id="1568093847249278119" />
|
||||
</scope>
|
||||
<scope id="1568093847249278126" at="39,0,41,0">
|
||||
<var name="occurrence" id="1568093847249278127" />
|
||||
</scope>
|
||||
<scope id="1568093847249278134" at="41,0,43,0">
|
||||
<var name="occurrence" id="1568093847249278135" />
|
||||
</scope>
|
||||
<scope id="1568093847249562172" at="43,0,45,0">
|
||||
<var name="matchRule" id="1568093847249562173" />
|
||||
</scope>
|
||||
<scope id="1568093847249562180" at="45,0,47,0">
|
||||
<var name="rule" id="1568093847249562181" />
|
||||
</scope>
|
||||
<scope id="5160444407776325515" at="47,0,49,0">
|
||||
<var name="args" id="5160444407776325518" />
|
||||
<var name="predicateSymbol" id="5160444407776325516" />
|
||||
</scope>
|
||||
<scope id="5160444407776325526" at="23,0,25,0">
|
||||
<scope id="5160444407776325526" at="49,0,51,0">
|
||||
<var name="args" id="5160444407776325529" />
|
||||
<var name="predicateSymbol" id="5160444407776325527" />
|
||||
</scope>
|
||||
<scope id="5160444407776325537" at="25,0,27,0">
|
||||
<scope id="5160444407776325537" at="51,0,53,0">
|
||||
<var name="args" id="5160444407776325540" />
|
||||
<var name="predicateSymbol" id="5160444407776325538" />
|
||||
</scope>
|
||||
<scope id="5160444407776325548" at="27,0,29,0">
|
||||
<scope id="5160444407776325548" at="53,0,55,0">
|
||||
<var name="args" id="5160444407776325551" />
|
||||
<var name="symbol" id="5160444407776325549" />
|
||||
</scope>
|
||||
<scope id="5160444407776325559" at="29,0,31,0">
|
||||
<scope id="5160444407776325559" at="55,0,57,0">
|
||||
<var name="message" id="5160444407776325560" />
|
||||
</scope>
|
||||
<unit id="5160444407776325513" at="20,49,31,3" name="jetbrains.mps.logic.reactor.evaluation.EvaluationTrace$1" />
|
||||
<unit id="2394628030058821331" at="8,0,33,0" name="jetbrains.mps.logic.reactor.evaluation.EvaluationTrace" />
|
||||
<unit id="5160444407776325513" at="33,49,57,3" name="jetbrains.mps.logic.reactor.evaluation.EvaluationTrace$1" />
|
||||
<unit id="2394628030058821331" at="9,0,59,0" name="jetbrains.mps.logic.reactor.evaluation.EvaluationTrace" />
|
||||
</file>
|
||||
</root>
|
||||
<root nodeRef="r:2a79c8aa-e372-4c00-8d71-5d7f3db517e4(jetbrains.mps.logic.reactor.evaluation)/4787618122020806150">
|
||||
|
|
@ -161,6 +215,17 @@
|
|||
<unit id="6317379717821145892" at="8,0,15,0" name="jetbrains.mps.logic.reactor.evaluation.ConstraintOccurrence" />
|
||||
</file>
|
||||
</root>
|
||||
<root nodeRef="r:2a79c8aa-e372-4c00-8d71-5d7f3db517e4(jetbrains.mps.logic.reactor.evaluation)/6976745534798407019">
|
||||
<file name="MatchRule.java">
|
||||
<node id="6976745534798407051" at="9,0,10,0" concept="4" trace="rule#()Ljetbrains/mps/logic/reactor/program/Rule;" />
|
||||
<node id="6976745534798407110" at="11,0,12,0" concept="4" trace="matchHeadKept#()Ljava/lang/Iterable;" />
|
||||
<node id="6976745534798407558" at="13,0,14,0" concept="4" trace="matchHeadReplaced#()Ljava/lang/Iterable;" />
|
||||
<scope id="6976745534798407051" at="9,0,10,0" />
|
||||
<scope id="6976745534798407110" at="11,0,12,0" />
|
||||
<scope id="6976745534798407558" at="13,0,14,0" />
|
||||
<unit id="6976745534798407019" at="7,0,16,0" name="jetbrains.mps.logic.reactor.evaluation.MatchRule" />
|
||||
</file>
|
||||
</root>
|
||||
<root nodeRef="r:2a79c8aa-e372-4c00-8d71-5d7f3db517e4(jetbrains.mps.logic.reactor.evaluation)/7785665572546273004">
|
||||
<file name="Instructible.java">
|
||||
<node id="7785665572546273471" at="9,0,10,0" concept="4" trace="tell#(Ljetbrains/mps/logic/reactor/program/Symbol;null)V" />
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package jetbrains.mps.logic.reactor.core
|
||||
|
||||
import jetbrains.mps.logic.reactor.evaluation.ConstraintOccurrence
|
||||
import jetbrains.mps.logic.reactor.evaluation.EvaluationTrace
|
||||
import jetbrains.mps.logic.reactor.evaluation.PredicateInvocation
|
||||
import jetbrains.mps.logic.reactor.evaluation.SessionSolver
|
||||
import jetbrains.mps.logic.reactor.logical.Logical
|
||||
|
|
@ -17,19 +18,25 @@ class Handler {
|
|||
|
||||
val sessionSolver: SessionSolver
|
||||
|
||||
private val rules : MutableList<Rule> = ArrayList<Rule>()
|
||||
val trace: EvaluationTrace
|
||||
|
||||
private val stored : MutableList<ConstraintOccurrence> = ArrayList<ConstraintOccurrence>()
|
||||
private val rules = ArrayList<Rule>()
|
||||
|
||||
private val activeQueue : Queue<ConstraintOccurrence> = LinkedList<ConstraintOccurrence>()
|
||||
private val stored = ArrayList<ConstraintOccurrence>()
|
||||
|
||||
private val activeQueue = LinkedList<ConstraintOccurrence>()
|
||||
|
||||
private val activationStack = LinkedList<PartialMatch>()
|
||||
|
||||
constructor(
|
||||
sessionSolver: SessionSolver,
|
||||
programRules: Iterable<Rule>,
|
||||
trace: EvaluationTrace = EvaluationTrace.NULL,
|
||||
// for testing purposes only
|
||||
occurrences: Iterable<ConstraintOccurrence>? = null)
|
||||
{
|
||||
this.sessionSolver = sessionSolver
|
||||
this.trace = trace
|
||||
this.rules.addAll(programRules)
|
||||
if (occurrences != null) {
|
||||
this.stored.addAll(occurrences)
|
||||
|
|
@ -38,6 +45,18 @@ class Handler {
|
|||
|
||||
fun occurrences(): Set<ConstraintOccurrence> = stored.toSet()
|
||||
|
||||
fun tell(constraint: Constraint) {
|
||||
try {
|
||||
queue(constraint.occurrence(this, noLogicalContext))
|
||||
}
|
||||
catch (t: Throwable) {
|
||||
for (pm in activationStack) {
|
||||
trace.trigger(pm)
|
||||
}
|
||||
throw t
|
||||
}
|
||||
}
|
||||
|
||||
fun queue(occurrence: ConstraintOccurrence) {
|
||||
activeQueue.add(occurrence)
|
||||
while (activeQueue.isNotEmpty()) {
|
||||
|
|
@ -48,6 +67,10 @@ class Handler {
|
|||
private fun process(active: ConstraintOccurrence) {
|
||||
if (!active.isStored()) {
|
||||
store(active)
|
||||
trace.activate(active)
|
||||
}
|
||||
else {
|
||||
trace.reactivate(active)
|
||||
}
|
||||
|
||||
val matcher = object : Matcher(rules) {
|
||||
|
|
@ -57,16 +80,27 @@ class Handler {
|
|||
}
|
||||
|
||||
for (match in matcher.lookupMatches(active).filter { pm -> pm.rule.checkGuard(pm.logicalContext()) }) {
|
||||
if (!active.isStored()) return
|
||||
if (!active.isStored()) break
|
||||
if (match.occurrences().any{ co -> !co.isStored() }) continue
|
||||
|
||||
activationStack.push(match)
|
||||
trace.trigger(match)
|
||||
|
||||
for ((cst, occ) in match.discarded) {
|
||||
discard(occ)
|
||||
trace.discard(occ)
|
||||
}
|
||||
|
||||
for (item in match.rule.body()) {
|
||||
activate(item, match.logicalContext())
|
||||
}
|
||||
|
||||
trace.exit(match.rule)
|
||||
activationStack.pop()
|
||||
}
|
||||
|
||||
if (active.isStored()) {
|
||||
trace.suspend(active)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -109,6 +143,10 @@ private fun AndItem.argumentValues(context: LogicalContext): List<Any> =
|
|||
private fun Constraint.occurrence(handler: Handler, context: LogicalContext): ConstraintOccurrence =
|
||||
MemConstraintOccurrence(handler, this, argumentValues(context))
|
||||
|
||||
private val noLogicalContext: LogicalContext = object: LogicalContext {
|
||||
override fun <V : Any?> valueFor(logicalPattern: LogicalPattern<V>): V? = null
|
||||
}
|
||||
|
||||
|
||||
private fun Predicate.invocation(logicalContext: LogicalContext): PredicateInvocation {
|
||||
return object: PredicateInvocation {
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ class MemLogical<T> : SolverLogical<T> {
|
|||
|
||||
override fun union(other: SolverLogical<T>, reconciler: SolverLogical.ValueReconciler<T>) {
|
||||
val leftRepr = this.find()
|
||||
val rightRepr = (other as MemLogical<T>).find()
|
||||
val rightRepr = (other as MemLogical<T>).find()
|
||||
|
||||
// invariant: leftRepr.rank > rightRepr.rank
|
||||
if (leftRepr.rank() < rightRepr.rank()) {
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package jetbrains.mps.logic.reactor.core
|
|||
|
||||
import com.github.andrewoma.dexx.collection.ConsList
|
||||
import jetbrains.mps.logic.reactor.evaluation.ConstraintOccurrence
|
||||
import jetbrains.mps.logic.reactor.evaluation.MatchRule
|
||||
import jetbrains.mps.logic.reactor.logical.Logical
|
||||
import jetbrains.mps.logic.reactor.logical.LogicalContext
|
||||
import jetbrains.mps.logic.reactor.logical.LogicalPattern
|
||||
|
|
@ -50,7 +51,7 @@ abstract class Matcher(val rules: Collection<Rule>) {
|
|||
|
||||
}
|
||||
|
||||
class PartialMatch(val rule: Rule) {
|
||||
class PartialMatch(val rule: Rule) : MatchRule {
|
||||
|
||||
var kept = ConsList.empty<Pair<Constraint, ConstraintOccurrence>>()
|
||||
private set
|
||||
|
|
@ -110,6 +111,13 @@ class PartialMatch(val rule: Rule) {
|
|||
}
|
||||
|
||||
fun logicalContext(): LogicalContext = logicalContext
|
||||
|
||||
override fun rule(): Rule = rule
|
||||
|
||||
override fun matchHeadKept(): Iterable<ConstraintOccurrence> = kept.map { p -> p.second }
|
||||
|
||||
override fun matchHeadReplaced(): Iterable<ConstraintOccurrence> = discarded.map { p -> p.second }
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import jetbrains.mps.logic.reactor.evaluation.EvaluationTrace
|
|||
import jetbrains.mps.logic.reactor.evaluation.ConstraintOccurrence
|
||||
import jetbrains.mps.logic.reactor.evaluation.EvaluationSession
|
||||
import jetbrains.mps.logic.reactor.evaluation.SessionSolver
|
||||
import jetbrains.mps.logic.reactor.program.Constraint
|
||||
import jetbrains.mps.logic.reactor.program.ConstraintSymbol
|
||||
import jetbrains.mps.logic.reactor.program.PredicateSymbol
|
||||
import jetbrains.mps.logic.reactor.program.Program
|
||||
|
|
@ -48,11 +49,11 @@ class MemEvaluationSession : EvaluationSession {
|
|||
val sessionSolver = program.sessionSolver()
|
||||
sessionSolver.init(myEvaluationTrace, * predicateSymbols)
|
||||
|
||||
session = MemEvaluationSession(program)
|
||||
session = MemEvaluationSession(program, myEvaluationTrace)
|
||||
ourBackend.ourSession.set(session)
|
||||
|
||||
try {
|
||||
session.launch(myParameters["main"] as ConstraintOccurrence)
|
||||
session.launch(myParameters["main"] as Constraint)
|
||||
}
|
||||
finally {
|
||||
ourBackend.ourSession.set(null)
|
||||
|
|
@ -64,15 +65,18 @@ class MemEvaluationSession : EvaluationSession {
|
|||
|
||||
val program: Program
|
||||
|
||||
val trace: EvaluationTrace
|
||||
|
||||
lateinit var handler: Handler
|
||||
|
||||
private constructor(program: Program): super() {
|
||||
private constructor(program: Program, trace: EvaluationTrace): super() {
|
||||
this.program = program
|
||||
this.trace = trace
|
||||
}
|
||||
|
||||
fun launch(main: ConstraintOccurrence) {
|
||||
this.handler = Handler(sessionSolver(), program.rules())
|
||||
handler.queue(main)
|
||||
fun launch(main: Constraint) {
|
||||
this.handler = Handler(sessionSolver(), program.rules(), trace)
|
||||
handler.tell(main)
|
||||
// FIXME: shutdown the session properly
|
||||
ourBackend.ourSession.set(null)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ class TestHandler {
|
|||
init(PredicateSymbol("equals", 2), JavaPredicateSymbol.EXPRESSION0, JavaPredicateSymbol.EXPRESSION1, JavaPredicateSymbol.EXPRESSION2, JavaPredicateSymbol.EXPRESSION3) }
|
||||
|
||||
private fun Builder.handler(vararg occurrences: ConstraintOccurrence): Handler =
|
||||
Handler(sessionSolver(env.expressionSolver, env.equalsSolver), rules, listOf(* occurrences))
|
||||
Handler(sessionSolver(env.expressionSolver, env.equalsSolver), rules, occurrences = listOf(* occurrences))
|
||||
|
||||
private fun <T : Any> Handler.eq(left: Logical<T>, right: Logical<T>) {
|
||||
sessionSolver.tell(PredicateSymbol("equals", 2), left, right)
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import jetbrains.mps.logic.reactor.program.JavaPredicateSymbol
|
|||
import jetbrains.mps.logic.reactor.program.PredicateSymbol
|
||||
import org.junit.*
|
||||
import org.junit.Assert.*
|
||||
import program.MemConstraint
|
||||
import solver.eq
|
||||
|
||||
/**
|
||||
|
|
@ -30,7 +31,7 @@ class TestProgram {
|
|||
rules.forEach { r -> programBuilder.addRule(r) }
|
||||
return EvaluationSession.newSession(programBuilder.program(name, sessionSolver)).
|
||||
withPredicates(PredicateSymbol("equals", 2), JavaPredicateSymbol.EXPRESSION0, JavaPredicateSymbol.EXPRESSION1, JavaPredicateSymbol.EXPRESSION2, JavaPredicateSymbol.EXPRESSION3).
|
||||
withParam("main", occurrence("main")).start()
|
||||
withParam("main", MemConstraint(ConstraintSymbol("main", 0))).start()
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
Loading…
Reference in New Issue