--- /dev/null
+package org.simantics.scl.compiler.environment;\r
+\r
+import gnu.trove.procedure.TObjectProcedure;\r
+\r
+import org.simantics.scl.compiler.elaboration.expressions.ESimpleLambda;\r
+import org.simantics.scl.compiler.elaboration.expressions.Expression;\r
+import org.simantics.scl.compiler.elaboration.expressions.Variable;\r
+import org.simantics.scl.compiler.types.Type;\r
+import org.simantics.scl.compiler.types.Types;\r
+import org.simantics.scl.compiler.types.util.ProcedureType;\r
+\r
+public abstract class AbstractLocalEnvironment implements LocalEnvironment {\r
+\r
+ @Override\r
+ public void forNames(TObjectProcedure<String> proc) {\r
+ }\r
+\r
+ protected Variable[] getContextVariables() {\r
+ return Variable.EMPTY_ARRAY;\r
+ }\r
+ \r
+ @Override\r
+ public Expression preDecorateExpression(Expression expression) {\r
+ return expression;\r
+ }\r
+ \r
+ @Override\r
+ public Expression postDecorateExpression(Expression expression) {\r
+ Variable[] contextVariables = getContextVariables();\r
+ for(int i=contextVariables.length-1;i>=0;--i)\r
+ expression = new ESimpleLambda(contextVariables[i], expression);\r
+ return expression;\r
+ }\r
+\r
+ @Override\r
+ public ProcedureType decorateExpectedType(Type expectedType, Type expectedEffect) {\r
+ /*Variable[] contextVariables = getContextVariables();\r
+ for(int i=contextVariables.length-1;i>=0;--i) {\r
+ expectedType = Types.functionE(contextVariables[i].getType(), expectedEffect, expectedType);\r
+ expectedEffect = Types.NO_EFFECTS;\r
+ }*/\r
+ return new ProcedureType(expectedType, expectedEffect);\r
+ }\r
+\r
+}\r