1 package org.simantics.scl.compiler.environment;
3 import org.simantics.scl.compiler.elaboration.expressions.ESimpleLambda;
4 import org.simantics.scl.compiler.elaboration.expressions.Expression;
5 import org.simantics.scl.compiler.elaboration.expressions.Variable;
6 import org.simantics.scl.compiler.types.Type;
7 import org.simantics.scl.compiler.types.util.ProcedureType;
9 import gnu.trove.procedure.TObjectProcedure;
11 public abstract class AbstractLocalEnvironment implements LocalEnvironment {
14 public void forNames(TObjectProcedure<String> proc) {
17 protected Variable[] getContextVariables() {
18 return Variable.EMPTY_ARRAY;
22 public Expression preDecorateExpression(Expression expression) {
27 public Expression postDecorateExpression(Expression expression) {
28 Variable[] contextVariables = getContextVariables();
29 for(int i=contextVariables.length-1;i>=0;--i)
30 expression = new ESimpleLambda(contextVariables[i], expression);
35 public ProcedureType decorateExpectedType(Type expectedType, Type expectedEffect) {
36 /*Variable[] contextVariables = getContextVariables();
37 for(int i=contextVariables.length-1;i>=0;--i) {
38 expectedType = Types.functionE(contextVariables[i].getType(), expectedEffect, expectedType);
39 expectedEffect = Types.NO_EFFECTS;
41 return new ProcedureType(expectedType, expectedEffect);