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=149c52f500235d5f732aa4a12f744b3d75851bc7;hb=refs%2Fchanges%2F34%2F1534%2F3;hp=418ba69c9cda9c2e3b1c352daedc02176e8b1570;hpb=dcb08ba8db427e1e9951e61892c653c23977a8cc;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 index 418ba69c9..149c52f50 100644 --- 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 @@ -17,10 +17,6 @@ import org.simantics.scl.compiler.types.Types; import org.simantics.scl.compiler.types.exceptions.MatchException; import org.simantics.scl.runtime.tuple.Tuple0; -import gnu.trove.map.hash.TObjectIntHashMap; -import gnu.trove.set.hash.THashSet; -import gnu.trove.set.hash.TIntHashSet; - public class EIf extends Expression { public Expression condition; public Expression then_; @@ -39,57 +35,33 @@ 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 + protected void updateType() throws MatchException { + setType(then_.getType()); } - @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(CompilationContext context, CodeWriter w) { + @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()); + w.if_(location, conditionVal, thenBlock.getContinuation(), elseBlock.getContinuation()); IVal elseVal = else_.toVal(context, elseBlock); - elseBlock.jump(joinPoint.getContinuation(), elseVal); + elseBlock.jump(location, joinPoint.getContinuation(), elseVal); } else { - w.if_(conditionVal, thenBlock.getContinuation(), joinPoint.getContinuation()); + w.if_(location, conditionVal, thenBlock.getContinuation(), joinPoint.getContinuation()); } IVal thenVal = then_.toVal(context, thenBlock); - thenBlock.jump(joinPoint.getContinuation(), thenVal); + thenBlock.jump(location, joinPoint.getContinuation(), thenVal); w.continueAs(joinPoint); return w.getParameters()[0]; } - @Override - public void collectFreeVariables(THashSet vars) { - condition.collectFreeVariables(vars); - then_.collectFreeVariables(vars); - if(else_ != null) - else_.collectFreeVariables(vars); - } - @Override public Expression simplify(SimplificationContext context) { condition = condition.simplify(context); @@ -139,14 +111,6 @@ public class EIf extends Expression { 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) {