1 package org.simantics.scl.compiler.elaboration.query;
3 import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext;
4 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
5 import org.simantics.scl.compiler.elaboration.expressions.Expression;
6 import org.simantics.scl.compiler.elaboration.expressions.QueryTransformer;
7 import org.simantics.scl.compiler.elaboration.query.compilation.ConstraintCollectionContext;
8 import org.simantics.scl.compiler.elaboration.query.compilation.UnsolvableQueryException;
9 import org.simantics.scl.compiler.errors.Locations;
10 import org.simantics.scl.compiler.types.Types;
12 public class QIf extends Query {
13 public Expression condition;
14 public Query thenQuery;
15 public Query elseQuery;
17 public QIf(Expression condition, Query thenQuery, Query elseQuery) {
18 this.condition = condition;
19 this.thenQuery = thenQuery;
20 this.elseQuery = elseQuery;
24 public void checkType(TypingContext context) {
25 condition.checkType(context, Types.BOOLEAN);
26 thenQuery.checkType(context);
27 elseQuery.checkType(context);
31 public void collectConstraints(ConstraintCollectionContext context) throws UnsolvableQueryException {
32 // TODO Auto-generated method stub
37 public Query replace(ReplaceContext context) {
39 condition.replace(context),
40 thenQuery.replace(context),
41 elseQuery.replace(context));
45 public void setLocationDeep(long loc) {
46 if(location == Locations.NO_LOCATION) {
48 condition.setLocationDeep(loc);
49 elseQuery.setLocationDeep(loc);
50 thenQuery.setLocationDeep(loc);
55 public void accept(QueryVisitor visitor) {
60 public Query accept(QueryTransformer transformer) {
61 return transformer.transform(this);