]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ETypeAnnotation.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 / ETypeAnnotation.java
1 package org.simantics.scl.compiler.elaboration.expressions;
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.errors.Locations;
7 import org.simantics.scl.compiler.internal.parsing.types.TypeAst;
8 import org.simantics.scl.compiler.types.Type;
9 import org.simantics.scl.compiler.types.exceptions.MatchException;
10
11 public class ETypeAnnotation extends SimplifiableExpression {
12     public Expression value;
13     Type type;
14     TypeAst typeAst;
15         
16     public ETypeAnnotation(Expression value, TypeAst typeAst) {
17         this.value = value;
18         this.typeAst = typeAst;
19     }
20
21     public ETypeAnnotation(long loc, Expression value, Type type) {
22         super(loc);
23         this.value = value;
24         this.type = type;
25     }
26
27     @Override
28     protected void updateType() throws MatchException {
29         setType(type);
30     }
31
32     @Override
33     public Expression simplify(SimplificationContext context) {
34         return value.simplify(context);
35     }
36
37     @Override
38     public Expression resolve(TranslationContext context) {
39         value = value.resolve(context);
40         type = context.toType(typeAst);
41         return this;
42     }
43     
44     @Override
45     public Expression resolveAsPattern(TranslationContext context) {
46         value = value.resolveAsPattern(context);
47         type = context.toType(typeAst);
48         return this;
49     }
50     
51     @Override
52     public Expression inferType(TypingContext context) {
53         return value.checkType(context, type);
54     }
55     
56     @Override
57     public void setLocationDeep(long loc) {
58         if(location == Locations.NO_LOCATION) {
59             location = loc;
60             value.setLocationDeep(loc);
61         }
62     }
63     
64     @Override
65     public void accept(ExpressionVisitor visitor) {
66         visitor.visit(this);
67     }
68     
69     public Expression getValue() {
70         return value;
71     }
72     
73     @Override
74     public Expression accept(ExpressionTransformer transformer) {
75         return transformer.transform(this);
76     }
77
78 }