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