import org.simantics.db.Resource;
import org.simantics.scl.compiler.common.names.Name;
import org.simantics.scl.compiler.common.names.Names;
+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;
@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.iterateMaybe(location, w, variables[1],
w.apply(location,
- env.getValue(POSSIBLE_RELATED_VALUE).getValue().createSpecialization(valueType),
- typeConstraintEvidenceParameters[0].toVal(env, w),
- expressions[0].toVal(env, w),
+ compilationContext.environment.getValue(POSSIBLE_RELATED_VALUE).getValue().createSpecialization(valueType),
+ typeConstraintEvidenceParameters[0].toVal(compilationContext, w),
+ expressions[0].toVal(compilationContext, w),
w.getModuleWriter().getExternalConstant(propertyRelation, Types.RESOURCE)));
break;
case BB:
- context.checkEqualsJust(location, w, expressions[1].toVal(env, w),
+ context.checkEqualsJust(location, w, expressions[1].toVal(compilationContext, w),
w.apply(location,
- env.getValue(POSSIBLE_RELATED_VALUE).getValue().createSpecialization(valueType),
- typeConstraintEvidenceParameters[0].toVal(env, w),
- expressions[0].toVal(env, w),
+ compilationContext.environment.getValue(POSSIBLE_RELATED_VALUE).getValue().createSpecialization(valueType),
+ typeConstraintEvidenceParameters[0].toVal(compilationContext, w),
+ expressions[0].toVal(compilationContext, w),
w.getModuleWriter().getExternalConstant(propertyRelation, Types.RESOURCE)));
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_RELATED_VALUE).getValue().createSpecialization(valueType),
- typeConstraintEvidenceParameters[0].toVal(env, w),
- parameters[0].toVal(env, w),
+ compilationContext.environment.getValue(CLAIM_RELATED_VALUE).getValue().createSpecialization(valueType),
+ typeConstraintEvidenceParameters[0].toVal(compilationContext, w),
+ parameters[0].toVal(compilationContext, w),
w.getModuleWriter().getExternalConstant(propertyRelation, 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;
}
}