]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListSeq.java
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / expressions / list / ListSeq.java
1 package org.simantics.scl.compiler.elaboration.expressions.list;
2
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.elaboration.expressions.Expression;
7 import org.simantics.scl.compiler.elaboration.expressions.Variable;
8 import org.simantics.scl.compiler.errors.Locations;
9
10 public class ListSeq extends ListQualifier {
11     public ListQualifier a;
12     public ListQualifier b;
13     
14     public ListSeq(ListQualifier a, ListQualifier b) {
15         this.a = a;
16         this.b = b;
17     }
18
19     @Override
20     public void checkType(TypingContext context) {
21         a.checkType(context);
22         b.checkType(context);  
23     }
24
25     @Override
26     public CompiledQualifier compile(SimplificationContext context) {
27         CompiledQualifier cA = a.compile(context);
28         CompiledQualifier cB = b.compile(context);      
29         
30         Variable x = new Variable("xTemp", cA.pattern.getType());
31         Variable y = new Variable("yTemp", cB.pattern.getType());
32         
33         Expression value = context.concatMap( 
34                 context.lambda(context.var(x), context.mapList(
35                         context.lambda(context.var(y), context.tuple(context.var(x), context.var(y))),
36                         context.match(context.var(x), cA.pattern, cB.value))), 
37                         cA.value);
38         /*try {
39             value.validateType(context.getEnvironment());
40         } catch (TypeValidationException e) {
41             e.printStackTrace();
42         }*/
43         return new CompiledQualifier(value, context.tuple(cA.pattern, cB.pattern));
44     }
45
46     @Override
47     public void resolve(TranslationContext context) {
48         a.resolve(context);
49         b.resolve(context);
50     }
51     
52     @Override
53     public void setLocationDeep(long loc) {
54         if(location == Locations.NO_LOCATION) {
55             location = loc;
56             a.setLocationDeep(loc);
57             b.setLocationDeep(loc);
58         }
59     }
60     
61     @Override
62     public void accept(ListQualifierVisitor visitor) {
63         visitor.visit(this);
64     }
65     
66     @Override
67     public ListQualifier accept(ListQualifierTransformer transformer) {
68         return transformer.transform(this);
69     }
70 }