Introduce InvocationParameter to instantiateArguments.

This commit is contained in:
Fedor Isakov 2019-02-17 14:39:09 +01:00
parent b102237bb8
commit 8c25d50ea5
4 changed files with 23 additions and 11 deletions

View File

@ -24,7 +24,6 @@ package jetbrains.mps.logic.reactor.logical;
*/
public interface LogicalContext {
<V> Logical<V> variable(MetaLogical<V> metaLogical);
}

View File

@ -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<Handler> 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);
}
}

View File

@ -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<Boolean>("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<Boolean>("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))
}

View File

@ -112,20 +112,22 @@ class EqualsSolver : Solver {
infix fun <T : Any> 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 : Any> 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)
}