1 package org.simantics.scl.compiler.compilation;
\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
17 import gnu.trove.map.hash.THashMap;
\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
26 private THashMap<Name, SCLValue> valueCache = new THashMap<Name, SCLValue>();
\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
33 errorLog.log(Locations.NO_LOCATION, "Couldn't find " + name + ".");
\r
34 valueCache.put(name, value);
\r
38 public Expression getConstant(Name name, Type ... typeParameters) {
\r
39 SCLValue value = getValue(name);
\r
41 return new EError(Locations.NO_LOCATION);
\r
42 return new EConstant(value, typeParameters);
\r