]> gerrit.simantics Code Review - simantics/platform.git/blob
15201e7f0f19e935f825ffff57f974c5c1ae957e
[simantics/platform.git] /
1 package org.simantics.scl.compiler.elaboration.expressions;\r
2 \r
3 import java.util.ArrayList;\r
4 \r
5 import org.simantics.scl.compiler.constants.Constant;\r
6 import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext;\r
7 import org.simantics.scl.compiler.elaboration.contexts.SimplificationContext;\r
8 import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;\r
9 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;\r
10 import org.simantics.scl.compiler.environment.Environment;\r
11 import org.simantics.scl.compiler.errors.Locations;\r
12 import org.simantics.scl.compiler.internal.codegen.references.IVal;\r
13 import org.simantics.scl.compiler.internal.codegen.writer.CodeWriter;\r
14 import org.simantics.scl.compiler.internal.elaboration.utils.ExpressionDecorator;\r
15 import org.simantics.scl.compiler.internal.interpreted.IConstant;\r
16 import org.simantics.scl.compiler.internal.interpreted.IExpression;\r
17 import org.simantics.scl.compiler.top.ExpressionInterpretationContext;\r
18 import org.simantics.scl.compiler.types.Type;\r
19 import org.simantics.scl.compiler.types.exceptions.MatchException;\r
20 import org.simantics.scl.compiler.types.util.TypeUnparsingContext;\r
21 \r
22 import gnu.trove.map.hash.TObjectIntHashMap;\r
23 import gnu.trove.set.hash.THashSet;\r
24 import gnu.trove.set.hash.TIntHashSet;\r
25 \r
26 public class ELiteral extends Expression {\r
27     Constant value;\r
28     \r
29     public ELiteral(Constant value) {\r
30         this.value = value;\r
31         setType(value.getType());\r
32     }\r
33 \r
34     public ELiteral(long loc, Constant value) {\r
35         super(loc);\r
36         this.value = value;\r
37     }\r
38 \r
39     public Constant getValue() {\r
40         return value;\r
41     }\r
42 \r
43         public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {\r
44     }\r
45 \r
46         @Override\r
47         public void collectVars(TObjectIntHashMap<Variable> allVars,\r
48                 TIntHashSet vars) {         \r
49         }\r
50         \r
51         public void toString(StringBuilder b, TypeUnparsingContext tuc) {\r
52         b.append(value);\r
53     }\r
54         \r
55         @Override\r
56         protected void updateType() throws MatchException {\r
57             setType(value.getType());       \r
58         }\r
59 \r
60         @Override\r
61         public IVal toVal(Environment env, CodeWriter w) {\r
62         return value;\r
63     }\r
64 \r
65     @Override\r
66     public void collectFreeVariables(THashSet<Variable> vars) {\r
67     }\r
68 \r
69 \r
70     @Override\r
71     public Expression simplify(SimplificationContext context) {\r
72         return this;\r
73     }\r
74 \r
75     @Override\r
76     public Expression resolve(TranslationContext context) {\r
77         return this;\r
78     }\r
79     \r
80     @Override\r
81     public Expression resolveAsPattern(TranslationContext context) {\r
82         return this;\r
83     }\r
84     \r
85     @Override\r
86     public void getParameters(TranslationContext translationContext,\r
87             ArrayList<Expression> parameters) {\r
88     }\r
89 \r
90     @Override\r
91     public Expression replace(ReplaceContext context) {\r
92         return new ELiteral(value);\r
93     }\r
94     \r
95     @Override\r
96     public void removeFreeVariables(THashSet<Variable> vars) {     \r
97     }\r
98     \r
99     @Override\r
100     public IExpression toIExpression(ExpressionInterpretationContext target) {\r
101         return new IConstant(value.realizeValue(target.localClassBuilder));\r
102     }\r
103     \r
104     @Override\r
105     public Expression inferType(TypingContext context) {\r
106         return this;\r
107     }\r
108 \r
109     @Override\r
110     public Expression decorate(ExpressionDecorator decorator) {\r
111         return decorator.decorate(this);\r
112     }\r
113 \r
114     @Override\r
115     public void collectEffects(THashSet<Type> effects) {\r
116     }\r
117     \r
118     @Override\r
119     public void setLocationDeep(long loc) {\r
120         if(location == Locations.NO_LOCATION)\r
121             location = loc;\r
122     }\r
123     \r
124     @Override\r
125     public void accept(ExpressionVisitor visitor) {\r
126         visitor.visit(this);\r
127     }\r
128 \r
129     @Override\r
130     public void forVariables(VariableProcedure procedure) {\r
131     }\r
132     \r
133     @Override\r
134     public boolean isPattern(int arity) {\r
135         return value.constructorTag() >= 0 && value.getArity() == arity;\r
136     }\r
137     \r
138     @Override\r
139     public Expression accept(ExpressionTransformer transformer) {\r
140         return transformer.transform(this);\r
141     }\r
142 \r
143 }\r