X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Finternal%2Fcodegen%2Fchr%2FCHRRuntimeRulesetCodeGenerator.java;fp=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Finternal%2Fcodegen%2Fchr%2FCHRCodeGenerator.java;h=003086704522773d11ebaa0e43bf4b659e00c28d;hp=3a249c5deabaf38228a9fc4b268ecf5f01272832;hb=a2df536f7fc878982c6c960a79ed49f350cddc6f;hpb=5f0ad7a26810df602600c5eddad317588fce0ac4 diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/chr/CHRCodeGenerator.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/chr/CHRRuntimeRulesetCodeGenerator.java similarity index 60% rename from bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/chr/CHRCodeGenerator.java rename to bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/chr/CHRRuntimeRulesetCodeGenerator.java index 3a249c5de..003086704 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/chr/CHRCodeGenerator.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/chr/CHRRuntimeRulesetCodeGenerator.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import org.cojen.classfile.TypeDesc; import org.objectweb.asm.Opcodes; +import org.simantics.scl.compiler.elaboration.chr.CHRRule; import org.simantics.scl.compiler.elaboration.chr.CHRRuleset; import org.simantics.scl.compiler.elaboration.chr.relations.CHRConstraint; import org.simantics.scl.compiler.internal.codegen.references.BoundVar; @@ -12,34 +13,32 @@ import org.simantics.scl.compiler.internal.codegen.utils.Constants; import org.simantics.scl.compiler.internal.codegen.utils.MethodBuilderBase; import org.simantics.scl.compiler.internal.codegen.utils.ModuleBuilder; -public class CHRCodeGenerator { +public class CHRRuntimeRulesetCodeGenerator implements CHRCodeGenerationConstants { - public static final TypeDesc FACT_ID_TYPE = TypeDesc.INT; - private static final String FactActivationQueue_name = "org/simantics/scl/runtime/chr/FactActivationQueue"; - private static final TypeDesc FactActivationQueue = TypeDesc.forClass(FactActivationQueue_name); - private static final String QUEUE = "queue"; - - public static void generateStore(ModuleBuilder moduleBuilder, CHRRuleset ruleset) { - ClassBuilder storeClassBuilder = new ClassBuilder(moduleBuilder, Opcodes.ACC_PUBLIC, ruleset.storeClassName, "java/lang/Object"); + public static void generateRuntimeRuleset(ModuleBuilder moduleBuilder, CHRRuleset ruleset) { + ClassBuilder storeClassBuilder = new ClassBuilder(moduleBuilder, Opcodes.ACC_PUBLIC, ruleset.runtimeRulesetName, CHRRuntimeRuleset_name); if(ruleset.parameters == null) ruleset.parameters = new BoundVar[0]; ruleset.parameterTypeDescs = moduleBuilder.getJavaTypeTranslator().getTypeDescs(ruleset.parameters); - ArrayList hashIndexInitializations = new ArrayList<>(); + ArrayList hashIndexInitializations = new ArrayList(); for(CHRConstraint constraint : ruleset.constraints) generateFact(storeClassBuilder, constraint, hashIndexInitializations); + + for(int i=ruleset.rules.size()-1;i>=0;--i) + generateFactContainer(storeClassBuilder, ruleset, ruleset.rules.get(i)); // Fields for(int i=0;i