--- /dev/null
+package org.simantics.scl.compiler.compilation;\r
+\r
+import org.simantics.scl.compiler.common.names.Name;\r
+import org.simantics.scl.compiler.elaboration.contexts.EnvironmentalContext;\r
+import org.simantics.scl.compiler.elaboration.expressions.EConstant;\r
+import org.simantics.scl.compiler.elaboration.expressions.EError;\r
+import org.simantics.scl.compiler.elaboration.expressions.Expression;\r
+import org.simantics.scl.compiler.elaboration.modules.SCLValue;\r
+import org.simantics.scl.compiler.environment.Environment;\r
+import org.simantics.scl.compiler.errors.ErrorLog;\r
+import org.simantics.scl.compiler.errors.Locations;\r
+import org.simantics.scl.compiler.internal.codegen.types.JavaTypeTranslator;\r
+import org.simantics.scl.compiler.internal.codegen.utils.JavaNamingPolicy;\r
+import org.simantics.scl.compiler.module.ConcreteModule;\r
+import org.simantics.scl.compiler.types.Type;\r
+\r
+import gnu.trove.map.hash.THashMap;\r
+\r
+public class CompilationContext implements EnvironmentalContext {\r
+ public final ErrorLog errorLog = new ErrorLog();\r
+ public Environment environment;\r
+ public JavaTypeTranslator javaTypeTranslator;\r
+ public JavaNamingPolicy namingPolicy;\r
+ public ConcreteModule module;\r
+ \r
+ private THashMap<Name, SCLValue> valueCache = new THashMap<Name, SCLValue>();\r
+\r
+ public SCLValue getValue(Name name) {\r
+ if(valueCache.containsKey(name))\r
+ return valueCache.get(name);\r
+ SCLValue value = environment.getValue(name);\r
+ if(value == null)\r
+ errorLog.log(Locations.NO_LOCATION, "Couldn't find " + name + ".");\r
+ valueCache.put(name, value);\r
+ return value;\r
+ }\r
+ \r
+ public Expression getConstant(Name name, Type ... typeParameters) {\r
+ SCLValue value = getValue(name);\r
+ if(value == null)\r
+ return new EError(Locations.NO_LOCATION);\r
+ return new EConstant(value, typeParameters);\r
+ }\r
+}\r