Effectful constants and variables now correctly declare their effects.
refs #7140
[PRIVATE-13312]
Change-Id: Ie40c3985ac61acb707293161b8aefb361d691732
(cherry picked from commit
6f75cd65e0ba87535a4b92003604f8f5fc94e9d5)
- return applyPUnit(context.getCompilationContext());
+ return applyPUnit(context);
- return applyPUnit(context.getCompilationContext());
+ return applyPUnit(context);
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.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;
import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext;
import org.simantics.scl.compiler.elaboration.contexts.SimplificationContext;
import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
return context.subsume(inferType(context), requiredType);
}
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();
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);