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