import org.simantics.db.Resource;
import org.simantics.scl.compiler.common.names.Name;
+import org.simantics.scl.compiler.compilation.CompilationContext;
import org.simantics.scl.compiler.elaboration.chr.plan.PlanContext;
import org.simantics.scl.compiler.elaboration.expressions.EApply;
import org.simantics.scl.compiler.elaboration.expressions.EExternalConstant;
import org.simantics.scl.compiler.elaboration.query.compilation.EnforcingContext;
import org.simantics.scl.compiler.elaboration.query.compilation.QueryCompilationContext;
import org.simantics.scl.compiler.elaboration.relations.SCLRelation;
-import org.simantics.scl.compiler.environment.Environment;
import org.simantics.scl.compiler.errors.Locations;
import org.simantics.scl.compiler.internal.codegen.writer.CodeWriter;
import org.simantics.scl.compiler.types.TVar;
@Override
public void generateIterate(PlanContext context, CodeWriter w, long location, int boundMask, Variable[] variables,
Expression[] expressions, Expression[] typeConstraintEvidenceParameters) {
- Environment env = context.context.environment;
+ CompilationContext compilationContext = context.context;
switch(boundMask) {
case BF:
context.iterateList(location, w, variables[1],
w.apply(location,
- env.getValue(GET_OBJECTS).getValue(),
- expressions[0].toVal(env, w),
+ compilationContext.environment.getValue(GET_OBJECTS).getValue(),
+ expressions[0].toVal(compilationContext, w),
w.getModuleWriter().getExternalConstant(relation, Types.RESOURCE)));
break;
case FB:
throw new IllegalArgumentException();
context.iterateList(location, w, variables[0],
w.apply(location,
- env.getValue(GET_OBJECTS).getValue(),
- expressions[1].toVal(env, w),
+ compilationContext.environment.getValue(GET_OBJECTS).getValue(),
+ expressions[1].toVal(compilationContext, w),
w.getModuleWriter().getExternalConstant(inverseRelation, Types.RESOURCE)));
break;
case BB:
context.check(location, w,
inverseRelation == null || relationSelectivity <= inverseRelationSelectivity
- ? w.apply(location, env.getValue(HAS_STATEMENT).getValue(),
- expressions[0].toVal(env, w),
+ ? w.apply(location, compilationContext.environment.getValue(HAS_STATEMENT).getValue(),
+ expressions[0].toVal(compilationContext, w),
w.getModuleWriter().getExternalConstant(relation, Types.RESOURCE),
- expressions[1].toVal(env, w))
- : w.apply(location, env.getValue(HAS_STATEMENT).getValue(),
- expressions[1].toVal(env, w),
+ expressions[1].toVal(compilationContext, w))
+ : w.apply(location, compilationContext.environment.getValue(HAS_STATEMENT).getValue(),
+ expressions[1].toVal(compilationContext, w),
w.getModuleWriter().getExternalConstant(inverseRelation, Types.RESOURCE),
- expressions[0].toVal(env, w)));
+ expressions[0].toVal(compilationContext, w)));
break;
default: throw new IllegalArgumentException();
}
@Override
public void generateEnforce(PlanContext context, CodeWriter w, long location, Expression[] parameters,
Expression[] typeConstraintEvidenceParameters) {
- Environment env = context.context.environment;
+ CompilationContext compilationContext = context.context;
w.apply(location,
- env.getValue(CLAIM).getValue(),
- parameters[0].toVal(env, w),
+ compilationContext.environment.getValue(CLAIM).getValue(),
+ parameters[0].toVal(compilationContext, w),
w.getModuleWriter().getExternalConstant(relation, Types.RESOURCE),
- parameters[1].toVal(env, w));
+ parameters[1].toVal(compilationContext, w));
+ }
+
+ @Override
+ public Type getEnforceEffect() {
+ return Types.WRITE_GRAPH;
+ }
+
+ @Override
+ public Type getQueryEffect() {
+ return Types.READ_GRAPH;
}
}