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