]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/CompilationContext.java
Merged changes from feature/scl to master.
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / compilation / CompilationContext.java
diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/CompilationContext.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/CompilationContext.java
new file mode 100644 (file)
index 0000000..d5cbe61
--- /dev/null
@@ -0,0 +1,44 @@
+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