X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Felaboration%2Fchr%2FCHRLiteral.java;h=eb0f48b20414aa35baa74b4bd0fe743f35a7ba8a;hb=refs%2Fchanges%2F59%2F759%2F1;hp=e7b3320d77758d87b023904aa880f980a99f8ec5;hpb=292e64ba21f8044df19884dc3e61fe5e292a82df;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRLiteral.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRLiteral.java index e7b3320d7..eb0f48b20 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRLiteral.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRLiteral.java @@ -12,7 +12,6 @@ import org.simantics.scl.compiler.elaboration.contexts.TypingContext; import org.simantics.scl.compiler.elaboration.expressions.ERecord; import org.simantics.scl.compiler.elaboration.expressions.Expression; import org.simantics.scl.compiler.elaboration.expressions.Variable; -import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure; import org.simantics.scl.compiler.elaboration.expressions.printing.ExpressionToStringVisitor; import org.simantics.scl.compiler.elaboration.expressions.records.FieldAssignment; import org.simantics.scl.compiler.elaboration.relations.SCLRelation; @@ -24,7 +23,6 @@ import org.simantics.scl.compiler.types.Types; import org.simantics.scl.compiler.types.kinds.Kinds; import gnu.trove.map.hash.TObjectIntHashMap; -import gnu.trove.set.hash.THashSet; import gnu.trove.set.hash.TIntHashSet; public class CHRLiteral extends Symbol { @@ -47,6 +45,11 @@ public class CHRLiteral extends Symbol { } public void resolve(TranslationContext context) { + if(relation == SpecialCHRRelation.ASSIGN) { + parameters[1] = parameters[1].resolve(context); + parameters[0] = parameters[0].resolveAsPattern(context); + return; + } if(parameters != null) { for(int i=0;i allRefs, TIntHashSet refs) { - for(Expression parameter : parameters) - parameter.collectRefs(allRefs, refs); - if(typeConstraintEvidenceParameters != null) - for(Expression parameter : typeConstraintEvidenceParameters) - parameter.collectRefs(allRefs, refs); - } - public void checkType(TypingContext context) { if(relation == SpecialCHRRelation.EXECUTE) { if(parameters.length != 1) @@ -123,6 +118,11 @@ public class CHRLiteral extends Symbol { parameters[0] = parameters[0].checkIgnoredType(context); typeConstraintEvidenceParameters = Expression.EMPTY_ARRAY; } + else if(relation == SpecialCHRRelation.ASSIGN) { + parameters[1] = parameters[1].inferType(context); + parameters[0] = parameters[0].checkTypeAsPattern(context, parameters[1].getType()); + typeConstraintEvidenceParameters = Expression.EMPTY_ARRAY; + } else { TVar[] typeVariables = relation.getTypeVariables(); typeParameters = typeVariables.length == 0 ? Type.EMPTY_ARRAY : new Type[typeVariables.length]; @@ -147,22 +147,6 @@ public class CHRLiteral extends Symbol { parameter.collectVars(allVars, vars); } - public void forVariables(VariableProcedure procedure) { - for(Expression parameter : parameters) - parameter.forVariables(procedure); - if(typeConstraintEvidenceParameters != null) - for(Expression parameter : typeConstraintEvidenceParameters) - parameter.forVariables(procedure); - } - - public void collectFreeVariables(THashSet vars) { - for(Expression parameter : parameters) - parameter.collectFreeVariables(vars); - if(typeConstraintEvidenceParameters != null) - for(Expression parameter : typeConstraintEvidenceParameters) - parameter.collectFreeVariables(vars); - } - public void setLocationDeep(long loc) { if(location == Locations.NO_LOCATION) { this.location = loc; @@ -185,12 +169,4 @@ public class CHRLiteral extends Symbol { visitor.visit(this); return b.toString(); } - - public void collectQueryEffects(THashSet effects) { - // TODO - } - - public void collectEnforceEffects(THashSet effects) { - // TODO - } }