]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/CompilationContext.java
SCL compiler generates line numbers to bytecode
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / compilation / CompilationContext.java
1 package org.simantics.scl.compiler.compilation;
2
3 import org.simantics.scl.compiler.common.names.Name;
4 import org.simantics.scl.compiler.elaboration.contexts.EnvironmentalContext;
5 import org.simantics.scl.compiler.elaboration.expressions.EConstant;
6 import org.simantics.scl.compiler.elaboration.expressions.EError;
7 import org.simantics.scl.compiler.elaboration.expressions.Expression;
8 import org.simantics.scl.compiler.elaboration.modules.SCLValue;
9 import org.simantics.scl.compiler.environment.Environment;
10 import org.simantics.scl.compiler.errors.ErrorLog;
11 import org.simantics.scl.compiler.errors.Locations;
12 import org.simantics.scl.compiler.internal.codegen.types.JavaTypeTranslator;
13 import org.simantics.scl.compiler.internal.codegen.utils.JavaNamingPolicy;
14 import org.simantics.scl.compiler.internal.header.ModuleHeader;
15 import org.simantics.scl.compiler.internal.parsing.utils.LineLocator;
16 import org.simantics.scl.compiler.module.ConcreteModule;
17 import org.simantics.scl.compiler.module.debug.ModuleDebugInfo;
18 import org.simantics.scl.compiler.module.repository.ModuleRepository;
19 import org.simantics.scl.compiler.types.Type;
20
21 import gnu.trove.map.hash.THashMap;
22
23 public class CompilationContext implements EnvironmentalContext {
24     public final ErrorLog errorLog = new ErrorLog();
25     public LineLocator lineLocator;
26     public ModuleRepository moduleRepository;
27     public Environment environment;
28     public JavaTypeTranslator javaTypeTranslator;
29     public JavaNamingPolicy namingPolicy;
30     public ConcreteModule module;
31     public ModuleHeader header;
32     public ModuleDebugInfo moduleDebugInfo;
33     
34     private THashMap<Name, SCLValue> valueCache = new THashMap<Name, SCLValue>();
35
36     public SCLValue getValue(Name name) {
37         if(valueCache.containsKey(name))
38             return valueCache.get(name);
39         SCLValue value = environment.getValue(name);
40         if(value == null)
41             errorLog.log(Locations.NO_LOCATION, "Couldn't find " + name + ".");
42         valueCache.put(name, value);
43         return value;
44     }
45     
46     public Expression getConstant(Name name, Type ... typeParameters) {
47         SCLValue value = getValue(name);
48         if(value == null)
49             return new EError(Locations.NO_LOCATION);
50         return new EConstant(value, typeParameters);
51     }
52 }