]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRLiteral.java
(refs #7371) Support expression cloning for ECHRSelect
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / chr / CHRLiteral.java
index eb0f48b20414aa35baa74b4bd0fe743f35a7ba8a..e0921dc106fa67f50944ef6ebd9c14c3080972bf 100644 (file)
@@ -5,6 +5,7 @@ import org.simantics.scl.compiler.elaboration.chr.relations.CHRConstraint;
 import org.simantics.scl.compiler.elaboration.chr.relations.ExternalCHRRelation;
 import org.simantics.scl.compiler.elaboration.chr.relations.SpecialCHRRelation;
 import org.simantics.scl.compiler.elaboration.chr.relations.UnresolvedCHRRelation;
+import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext;
 import org.simantics.scl.compiler.elaboration.contexts.SimplificationContext;
 import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
 import org.simantics.scl.compiler.elaboration.contexts.TranslationContext.ExistentialFrame;
@@ -36,11 +37,11 @@ public class CHRLiteral extends Symbol {
     public boolean negated;
     public boolean passive = true;
     
-    public CHRLiteral(long location, CHRRelation relation, Expression[] parameters, boolean remove, boolean negated) {
+    public CHRLiteral(long location, CHRRelation relation, Expression[] parameters, boolean killAfterMatch, boolean negated) {
         this.location = location;
         this.relation = relation;
         this.parameters = parameters;
-        this.killAfterMatch = remove;
+        this.killAfterMatch = killAfterMatch;
         this.negated = negated;
     }
 
@@ -169,4 +170,15 @@ public class CHRLiteral extends Symbol {
         visitor.visit(this);
         return b.toString();
     }
+
+    public CHRLiteral replace(ReplaceContext context) {
+        CHRLiteral copy = new CHRLiteral(location, relation, context.replace(parameters), killAfterMatch, negated);
+        for(int i=0;i<parameters.length;++i)
+            copy.parameters[i] = copy.parameters[i].replace(context);
+        copy.passive = passive;
+        copy.typeConstraintEvidenceParameters = context.replace(typeConstraintEvidenceParameters);
+        copy.typeParameters = context.replace(typeParameters);
+        copy.fields = context.replace(fields);
+        return copy;
+    }
 }