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%2FCHRFactCodeGenerator.java;h=865ab22e6c8e18ed31248bfef8bb17e700a083ac;hp=06725ec2b813dc4f0693a3b7a066d2f310a1dd4c;hb=fad36d463b75c3a9944d875fc627c3533f6da74d;hpb=3e47abec5f57910d3784d34ae862cb8e0c5e5ce9 diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/chr/CHRFactCodeGenerator.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/chr/CHRFactCodeGenerator.java index 06725ec2b..865ab22e6 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/chr/CHRFactCodeGenerator.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/chr/CHRFactCodeGenerator.java @@ -6,42 +6,27 @@ import org.cojen.classfile.TypeDesc; import org.objectweb.asm.Label; import org.objectweb.asm.Opcodes; import org.simantics.scl.compiler.elaboration.chr.CHRRuleset; -import org.simantics.scl.compiler.elaboration.chr.plan.PrioritizedPlan; import org.simantics.scl.compiler.elaboration.chr.relations.CHRConstraint; import org.simantics.scl.compiler.elaboration.chr.relations.CHRConstraint.IndexInfo; -import org.simantics.scl.compiler.internal.codegen.references.BoundVar; import org.simantics.scl.compiler.internal.codegen.types.JavaTypeTranslator; import org.simantics.scl.compiler.internal.codegen.utils.ClassBuilder; -import org.simantics.scl.compiler.internal.codegen.utils.CodeBuilderUtils; import org.simantics.scl.compiler.internal.codegen.utils.Constants; import org.simantics.scl.compiler.internal.codegen.utils.LocalVariable; -import org.simantics.scl.compiler.internal.codegen.utils.MethodBuilder; import org.simantics.scl.compiler.internal.codegen.utils.MethodBuilderBase; import org.simantics.scl.compiler.internal.codegen.utils.ModuleBuilder; -import gnu.trove.list.array.TIntArrayList; -import gnu.trove.set.hash.THashSet; - -public class CHRFactCodeGenerator { - private static final TypeDesc FACT_ID_TYPE = TypeDesc.INT; - private static final String CHRHashIndex_name = "org/simantics/scl/runtime/chr/CHRHashIndex"; - private static final TypeDesc CHRHashIndex = TypeDesc.forClass(CHRHashIndex_name); - 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 Fact_name = "org/simantics/scl/runtime/chr/Fact"; - private static final TypeDesc Fact = TypeDesc.forClass(Fact_name); - private static final String QUEUE = "queue"; +public class CHRFactCodeGenerator implements CHRCodeGenerationConstants { private ModuleBuilder moduleBuilder; private JavaTypeTranslator jtt; - private CHRRuleset ruleset; private ClassBuilder storeClassBuilder; + private CHRRuleset ruleset; private CHRConstraint constraint; private String factClassName; private TypeDesc factTypeDesc; - private ClassBuilder factClassBuilder; + private ClassBuilder classBuilder; private TypeDesc storeTypeDesc; private TypeDesc[] storeTypeDescArray; @@ -49,10 +34,10 @@ public class CHRFactCodeGenerator { private TypeDesc[] parameterTypeDescs; private boolean supportsRemoval; - CHRFactCodeGenerator(ClassBuilder storeClassBuilder, CHRConstraint constraint) { + CHRFactCodeGenerator(ClassBuilder storeClassBuilder, CHRRuleset ruleset, CHRConstraint constraint) { this.storeClassBuilder = storeClassBuilder; + this.ruleset = ruleset; this.constraint = constraint; - this.ruleset = constraint.parentRuleset; this.moduleBuilder = storeClassBuilder.getModuleBuilder(); this.jtt = moduleBuilder.getJavaTypeTranslator(); @@ -61,7 +46,7 @@ public class CHRFactCodeGenerator { this.factClassName = storeClassBuilder.getClassName() + "$" + constraint.name; this.factTypeDesc = TypeDesc.forClass(factClassName); - this.factClassBuilder = new ClassBuilder(moduleBuilder, Opcodes.ACC_PUBLIC, factClassName, "java/lang/Object", Fact_name); + this.classBuilder = new ClassBuilder(moduleBuilder, Opcodes.ACC_PUBLIC, factClassName, CHRFact_name); this.parameterTypeDescs = jtt.toTypeDescs(constraint.parameterTypes); this.supportsRemoval = constraint.mayBeRemoved(); @@ -77,16 +62,10 @@ public class CHRFactCodeGenerator { if(supportsRemoval) generateRemove(); - generateIsAlive(); - - for(int i=0;i usedParameters = new THashSet(); - - private void generateActivateI(int i) { - PrioritizedPlan plan = constraint.plans.get(i); - MethodBuilder mb = factClassBuilder.addMethod(Opcodes.ACC_PUBLIC, "activate" + i, TypeDesc.BOOLEAN, storeTypeDescArray); - LocalVariable storeVar = mb.getParameter(0); - LocalVariable factVar = new LocalVariable(0, factTypeDesc); - mb.setLocalVariable(ruleset.this_, storeVar); - mb.setLocalVariable(plan.implementation.getParameters()[0], factVar); - - // Set closure parameters - usedParameters.clear(); - plan.implementation.forValRefs(valRef -> { - if(valRef.getBinding() instanceof BoundVar) - usedParameters.add((BoundVar)valRef.getBinding()); - }); - for(int j=0;j labels = new ArrayList