package org.simantics.scl.compiler.elaboration.chr; import org.simantics.scl.compiler.constants.Constant; import org.simantics.scl.compiler.constants.JavaConstructor; import org.simantics.scl.compiler.internal.codegen.chr.CHRRuntimeRulesetCodeGenerator; import org.simantics.scl.compiler.internal.codegen.references.BoundVar; import org.simantics.scl.compiler.internal.codegen.ssa.SSAObject; import org.simantics.scl.compiler.internal.codegen.utils.ModuleBuilder; import org.simantics.scl.compiler.types.Types; public class CHRRulesetObject extends SSAObject { CHRRuleset ruleset; public CHRRulesetObject(BoundVar target, CHRRuleset ruleset) { super(ruleset.runtimeRulesetType); this.setTarget(target); this.ruleset = ruleset; } @Override public Constant liftClosure(BoundVar newTarget, BoundVar[] parameters) { ruleset.this_ = newTarget; ruleset.parameters = parameters; return new JavaConstructor(ruleset.runtimeRulesetName, Types.PROC, ruleset.runtimeRulesetType, Types.getTypes(parameters)); } @Override public void generateCode(ModuleBuilder moduleBuilder) { CHRRuntimeRulesetCodeGenerator.generateRuntimeRuleset(moduleBuilder, ruleset); } }