1 package org.simantics.scl.compiler.elaboration.expressions;
3 import org.simantics.scl.compiler.elaboration.contexts.SimplificationContext;
4 import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
5 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
6 import org.simantics.scl.compiler.errors.Locations;
7 import org.simantics.scl.compiler.types.TPred;
8 import org.simantics.scl.compiler.types.exceptions.MatchException;
10 public class EGetConstraint extends SimplifiableExpression {
12 public EVariable evidence;
14 public EGetConstraint(long loc, TPred constraint) {
16 this.constraint = constraint;
20 public Expression inferType(TypingContext context) {
21 Variable variable = new Variable("evidence");
22 variable.setType(constraint);
23 evidence = new EVariable(getLocation(), variable);
24 evidence.setType(variable.getType());
25 context.addConstraintDemand(evidence);
30 protected void updateType() throws MatchException {
35 public Expression simplify(SimplificationContext context) {
36 return evidence.simplify(context);
40 public Expression resolve(TranslationContext context) {
45 public void setLocationDeep(long loc) {
46 if(location == Locations.NO_LOCATION) {
49 evidence.setLocationDeep(loc);
54 public void accept(ExpressionVisitor visitor) {
59 public Expression accept(ExpressionTransformer transformer) {
60 return transformer.transform(this);