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