]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/environment/AbstractLocalEnvironment.java
Added missing parts from SVN org.simantics.root project.
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / environment / AbstractLocalEnvironment.java
1 package org.simantics.scl.compiler.environment;\r
2 \r
3 import gnu.trove.procedure.TObjectProcedure;\r
4 \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
11 \r
12 public abstract class AbstractLocalEnvironment implements LocalEnvironment {\r
13 \r
14     @Override\r
15     public void forNames(TObjectProcedure<String> proc) {\r
16     }\r
17 \r
18     protected Variable[] getContextVariables() {\r
19         return Variable.EMPTY_ARRAY;\r
20     }\r
21     \r
22     @Override\r
23     public Expression preDecorateExpression(Expression expression) {\r
24         return expression;\r
25     }\r
26     \r
27     @Override\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
32         return expression;\r
33     }\r
34 \r
35     @Override\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
41         }*/\r
42         return new ProcedureType(expectedType, expectedEffect);\r
43     }\r
44 \r
45 }\r