X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Felaboration%2Fexpressions%2FEIf.java;h=7b56d22fa2991bba35ef28d73240015326917c8e;hb=ff1337ff96700fb157ec789cbef88b8f40e03798;hp=e3bb2fe0a313d86e24c3b82d1a32d04eb0e47a65;hpb=1b4d8b692f40d946deb5db8280eb4ca5b36a75a7;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EIf.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EIf.java old mode 100755 new mode 100644 index e3bb2fe0a..7b56d22fa --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EIf.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EIf.java @@ -1,14 +1,13 @@ package org.simantics.scl.compiler.elaboration.expressions; +import org.simantics.scl.compiler.compilation.CompilationContext; 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.TypingContext; -import org.simantics.scl.compiler.environment.Environment; import org.simantics.scl.compiler.errors.Locations; import org.simantics.scl.compiler.internal.codegen.references.IVal; import org.simantics.scl.compiler.internal.codegen.writer.CodeWriter; -import org.simantics.scl.compiler.internal.elaboration.utils.ExpressionDecorator; import org.simantics.scl.compiler.internal.interpreted.IConstant; import org.simantics.scl.compiler.internal.interpreted.IExpression; import org.simantics.scl.compiler.internal.interpreted.IIf; @@ -40,43 +39,36 @@ public class EIf extends Expression { this.else_ = else_; } - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { - condition.collectRefs(allRefs, refs); - then_.collectRefs(allRefs, refs); - if(else_ != null) - else_.collectRefs(allRefs, refs); - } - - @Override - public void collectVars(TObjectIntHashMap allVars, - TIntHashSet vars) { - condition.collectVars(allVars, vars); + @Override + public void collectVars(TObjectIntHashMap allVars, + TIntHashSet vars) { + condition.collectVars(allVars, vars); then_.collectVars(allVars, vars); if(else_ != null) else_.collectVars(allVars, vars); - } + } - @Override - protected void updateType() throws MatchException { - setType(then_.getType()); - } - - @Override - public IVal toVal(Environment env, CodeWriter w) { - IVal conditionVal = condition.toVal(env, w); + @Override + protected void updateType() throws MatchException { + setType(then_.getType()); + } + + @Override + public IVal toVal(CompilationContext context, CodeWriter w) { + IVal conditionVal = condition.toVal(context, w); CodeWriter joinPoint = w.createBlock(getType()); CodeWriter thenBlock = w.createBlock(); if(else_ != null) { CodeWriter elseBlock = w.createBlock(); w.if_(conditionVal, thenBlock.getContinuation(), elseBlock.getContinuation()); - IVal elseVal = else_.toVal(env, elseBlock); + IVal elseVal = else_.toVal(context, elseBlock); elseBlock.jump(joinPoint.getContinuation(), elseVal); } else { w.if_(conditionVal, thenBlock.getContinuation(), joinPoint.getContinuation()); } - IVal thenVal = then_.toVal(env, thenBlock); + IVal thenVal = then_.toVal(context, thenBlock); thenBlock.jump(joinPoint.getContinuation(), thenVal); w.continueAs(joinPoint); @@ -136,27 +128,10 @@ public class EIf extends Expression { return this; } - @Override - public Expression decorate(ExpressionDecorator decorator) { - condition = condition.decorate(decorator); - then_ = then_.decorate(decorator); - if(else_ != null) - else_ = else_.decorate(decorator); - return decorator.decorate(this); - } - @Override public boolean isEffectful() { return condition.isEffectful() || then_.isEffectful() || (else_ != null && else_.isEffectful()); } - - @Override - public void collectEffects(THashSet effects) { - condition.collectEffects(effects); - then_.collectEffects(effects); - if(else_ != null) - else_.collectEffects(effects); - } @Override public void setLocationDeep(long loc) { @@ -180,13 +155,6 @@ public class EIf extends Expression { else_ != null ? else_.toIExpression(target) : new IConstant(Tuple0.INSTANCE)); } - @Override - public void forVariables(VariableProcedure procedure) { - condition.forVariables(procedure); - then_.forVariables(procedure); - if(else_ != null) - else_.forVariables(procedure); - } @Override public Expression accept(ExpressionTransformer transformer) { return transformer.transform(this);