]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/Expression.java
Declare effects for constants and variables
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / expressions / Expression.java
index 8adf33936524d266115b25a0b706052b30e6ea9c..a0f28d190bf7340234ae5a052675f572f6275c10 100644 (file)
@@ -5,7 +5,6 @@ import java.util.ArrayList;
 import org.simantics.scl.compiler.common.exceptions.InternalCompilerError;
 import org.simantics.scl.compiler.common.precedence.Precedence;
 import org.simantics.scl.compiler.constants.NoRepConstant;
-import org.simantics.scl.compiler.elaboration.contexts.EnvironmentalContext;
 import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext;
 import org.simantics.scl.compiler.elaboration.contexts.SimplificationContext;
 import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
@@ -84,13 +83,14 @@ public abstract class Expression extends Symbol implements Typed {
         return context.subsume(inferType(context), requiredType);
     }
     
-    protected Expression applyPUnit(EnvironmentalContext context) {
+    protected Expression applyPUnit(TypingContext context) {
         Type type = Types.canonical(getType());
         if(type instanceof TFun) {
             TFun fun = (TFun)type;
             if(fun.getCanonicalDomain() == Types.PUNIT) {
                 EApply result = new EApply(location, this, new ELiteral(NoRepConstant.PUNIT));
                 result.effect = fun.getCanonicalEffect();
+                context.declareEffect(this.location, result.effect);
                 return result;
             }
         }