From 8c25d50ea54a712860e5a289706fcdd9dff24f3b Mon Sep 17 00:00:00 2001 From: Fedor Isakov Date: Sun, 17 Feb 2019 14:39:09 +0100 Subject: [PATCH] Introduce InvocationParameter to instantiateArguments. --- .../mps/logic/reactor/logical/LogicalContext.java | 1 - .../mps/logic/reactor/program/Program.java | 13 ++++++++++++- .../jetbrains/mps/logic/reactor/core/Controller.kt | 6 +++--- reactor/Test/src/solver/EqualsSolver.kt | 14 ++++++++------ 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/logical/LogicalContext.java b/reactor/API/src/jetbrains/mps/logic/reactor/logical/LogicalContext.java index a6dbb094..90259adf 100644 --- a/reactor/API/src/jetbrains/mps/logic/reactor/logical/LogicalContext.java +++ b/reactor/API/src/jetbrains/mps/logic/reactor/logical/LogicalContext.java @@ -24,7 +24,6 @@ package jetbrains.mps.logic.reactor.logical; */ public interface LogicalContext { - Logical variable(MetaLogical metaLogical); } diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/program/Program.java b/reactor/API/src/jetbrains/mps/logic/reactor/program/Program.java index 61c4dd88..3ebbe392 100644 --- a/reactor/API/src/jetbrains/mps/logic/reactor/program/Program.java +++ b/reactor/API/src/jetbrains/mps/logic/reactor/program/Program.java @@ -17,6 +17,7 @@ package jetbrains.mps.logic.reactor.program; +import jetbrains.mps.logic.reactor.evaluation.InvocationContext; import jetbrains.mps.logic.reactor.logical.LogicalContext; import java.util.List; @@ -38,6 +39,16 @@ public abstract class Program { public abstract Iterable handlers(); - public abstract List instantiateArguments(List arguments, LogicalContext logicalContext); + /** + * @deprecated use the overloaded method with InvocationContext parameter + */ + @Deprecated + public List instantiateArguments(List arguments, LogicalContext logicalContext) { + throw new UnsupportedOperationException(); + } + + public List instantiateArguments(List arguments, LogicalContext logicalContext, InvocationContext ignore) { + return instantiateArguments(arguments, logicalContext); + } } diff --git a/reactor/Core/src/jetbrains/mps/logic/reactor/core/Controller.kt b/reactor/Core/src/jetbrains/mps/logic/reactor/core/Controller.kt index 9e6170e5..4407ed20 100644 --- a/reactor/Core/src/jetbrains/mps/logic/reactor/core/Controller.kt +++ b/reactor/Core/src/jetbrains/mps/logic/reactor/core/Controller.kt @@ -271,7 +271,7 @@ class Controller( } private fun activateConstraint(constraint: Constraint, context: Context) : Boolean { - val args = program.instantiateArguments(constraint.arguments(), context.logicalContext) + val args = program.instantiateArguments(constraint.arguments(), context.logicalContext, context) return context.updateState { state -> process(constraint.occurrence(context.logicalContext, args, frameStack), state) } @@ -281,7 +281,7 @@ class Controller( profiler.profile("ask_${predicate.symbol()}") { context.evalSafe { state -> - val args = program.instantiateArguments(predicate.arguments(), context.logicalContext) + val args = program.instantiateArguments(predicate.arguments(), context.logicalContext, context) if (session.sessionSolver().ask(predicate.invocation(args, context.logicalContext, context))) state else @@ -294,7 +294,7 @@ class Controller( profiler.profile("tell_${predicate.symbol()}") { context.runSafe { - val args = program.instantiateArguments(predicate.arguments(), context.logicalContext) + val args = program.instantiateArguments(predicate.arguments(), context.logicalContext, context) session.sessionSolver().tell(predicate.invocation(args, context.logicalContext, context)) } diff --git a/reactor/Test/src/solver/EqualsSolver.kt b/reactor/Test/src/solver/EqualsSolver.kt index 056b61e4..aa804284 100644 --- a/reactor/Test/src/solver/EqualsSolver.kt +++ b/reactor/Test/src/solver/EqualsSolver.kt @@ -112,20 +112,22 @@ class EqualsSolver : Solver { infix fun T.is_eq(value: T): Boolean = EvaluationSession.current().let { session -> val logicalContext = mockLogicalContext() val predicate = EqualsSolver.eq(this, value) - val args = session.program().instantiateArguments(predicate.arguments(), logicalContext) - val inv = predicate.invocation(args, logicalContext, object : InvocationContext { + val invocationContext: InvocationContext = object : InvocationContext { override fun report(feedback: EvaluationFeedback) = TODO() - }) + } + val args = session.program().instantiateArguments(predicate.arguments(), logicalContext, invocationContext) + val inv = predicate.invocation(args, logicalContext, invocationContext) session.sessionSolver().ask(inv) } infix fun T.eq(value: T) = EvaluationSession.current().let { session -> val logicalContext = mockLogicalContext() val predicate = EqualsSolver.eq(this, value) - val args = session.program().instantiateArguments(predicate.arguments(), logicalContext) - val inv = predicate.invocation(args, logicalContext, object : InvocationContext { + val invocationContext: InvocationContext = object : InvocationContext { override fun report(feedback: EvaluationFeedback) = TODO() - }) + } + val args = session.program().instantiateArguments(predicate.arguments(), logicalContext, invocationContext) + val inv = predicate.invocation(args, logicalContext, invocationContext) session.sessionSolver().tell(inv) }