]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/CompilationContext.java
Merge "Ensure GetElementClassRequest is not constructed without elementFactory"
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / compilation / CompilationContext.java
1 package org.simantics.scl.compiler.compilation;\r
2 \r
3 import org.simantics.scl.compiler.common.names.Name;\r
4 import org.simantics.scl.compiler.elaboration.contexts.EnvironmentalContext;\r
5 import org.simantics.scl.compiler.elaboration.expressions.EConstant;\r
6 import org.simantics.scl.compiler.elaboration.expressions.EError;\r
7 import org.simantics.scl.compiler.elaboration.expressions.Expression;\r
8 import org.simantics.scl.compiler.elaboration.modules.SCLValue;\r
9 import org.simantics.scl.compiler.environment.Environment;\r
10 import org.simantics.scl.compiler.errors.ErrorLog;\r
11 import org.simantics.scl.compiler.errors.Locations;\r
12 import org.simantics.scl.compiler.internal.codegen.types.JavaTypeTranslator;\r
13 import org.simantics.scl.compiler.internal.codegen.utils.JavaNamingPolicy;\r
14 import org.simantics.scl.compiler.module.ConcreteModule;\r
15 import org.simantics.scl.compiler.types.Type;\r
16 \r
17 import gnu.trove.map.hash.THashMap;\r
18 \r
19 public class CompilationContext implements EnvironmentalContext {\r
20     public final ErrorLog errorLog = new ErrorLog();\r
21     public Environment environment;\r
22     public JavaTypeTranslator javaTypeTranslator;\r
23     public JavaNamingPolicy namingPolicy;\r
24     public ConcreteModule module;\r
25     \r
26     private THashMap<Name, SCLValue> valueCache = new THashMap<Name, SCLValue>();\r
27 \r
28     public SCLValue getValue(Name name) {\r
29         if(valueCache.containsKey(name))\r
30             return valueCache.get(name);\r
31         SCLValue value = environment.getValue(name);\r
32         if(value == null)\r
33             errorLog.log(Locations.NO_LOCATION, "Couldn't find " + name + ".");\r
34         valueCache.put(name, value);\r
35         return value;\r
36     }\r
37     \r
38     public Expression getConstant(Name name, Type ... typeParameters) {\r
39         SCLValue value = getValue(name);\r
40         if(value == null)\r
41             return new EError(Locations.NO_LOCATION);\r
42         return new EConstant(value, typeParameters);\r
43     }\r
44 }\r