]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QIf.java
(refs #7375) Replaced collectVars method by a visitor
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / query / QIf.java
1 package org.simantics.scl.compiler.elaboration.query;
2
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;
11
12 public class QIf extends Query {
13     public Expression condition;
14     public Query thenQuery;
15     public Query elseQuery;
16     
17     public QIf(Expression condition, Query thenQuery, Query elseQuery) {
18         this.condition = condition;
19         this.thenQuery = thenQuery;
20         this.elseQuery = elseQuery;
21     }
22     
23     @Override
24     public void checkType(TypingContext context) {
25         condition.checkType(context, Types.BOOLEAN);
26         thenQuery.checkType(context);
27         elseQuery.checkType(context);
28     }
29
30     @Override
31     public void collectConstraints(ConstraintCollectionContext context) throws UnsolvableQueryException {
32         // TODO Auto-generated method stub
33         
34     }
35
36     @Override
37     public Query replace(ReplaceContext context) {
38         return new QIf(
39                 condition.replace(context),
40                 thenQuery.replace(context),
41                 elseQuery.replace(context));
42     }
43
44     @Override
45     public void setLocationDeep(long loc) {
46         if(location == Locations.NO_LOCATION) {
47             this.location = loc;
48             condition.setLocationDeep(loc);
49             elseQuery.setLocationDeep(loc);
50             thenQuery.setLocationDeep(loc);
51         }
52     }
53
54     @Override
55     public void accept(QueryVisitor visitor) {
56         visitor.visit(this);
57     }
58     
59     @Override
60     public Query accept(QueryTransformer transformer) {
61         return transformer.transform(this);
62     }
63     
64 }