X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Finternal%2Fcodegen%2Fssa%2Fexits%2FIf.java;h=ee69106cdb5f8dccace0220fcee6ebbf9adf0883;hb=refs%2Fchanges%2F34%2F1534%2F3;hp=296ec6d1f461545c72222ff8ad49cde1310ef267;hpb=cb5fc8d606d8b322563e9345c441eecfa7f01753;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/exits/If.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/exits/If.java index 296ec6d1f..ee69106cd 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/exits/If.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/exits/If.java @@ -31,7 +31,8 @@ public class If extends SSAExit implements ValRefBinder { private ContRef thenTarget; private ContRef elseTarget; - public If(ValRef condition, ContRef thenTarget, ContRef elseTarget) { + public If(int lineNumber, ValRef condition, ContRef thenTarget, ContRef elseTarget) { + super(lineNumber); setCondition(condition); setThenTarget(thenTarget); setElseTarget(elseTarget); @@ -54,6 +55,7 @@ public class If extends SSAExit implements ValRefBinder { @Override public void generateCode(MethodBuilder mb) { + mb.lineNumber(lineNumber); Val binding = condition.getBinding(); simplifyTestCode: if(binding instanceof BoundVar) { BoundVar boundVar = (BoundVar)binding; @@ -147,9 +149,11 @@ public class If extends SSAExit implements ValRefBinder { @Override public SSAExit copy(CopyContext context) { - return new If(context.copy(condition), + If copy = new If(lineNumber, + context.copy(condition), context.copy(thenTarget), context.copy(elseTarget)); + return copy; } @Override @@ -163,11 +167,11 @@ public class If extends SSAExit implements ValRefBinder { if(cond instanceof BooleanConstant) { SSAExit newExit; if(((BooleanConstant) cond).getValue()) { - newExit = new Jump(thenTarget); + newExit = new Jump(lineNumber, thenTarget); elseTarget.remove(); } else { - newExit = new Jump(elseTarget); + newExit = new Jump(lineNumber, elseTarget); thenTarget.remove(); } condition.remove(); @@ -177,7 +181,7 @@ public class If extends SSAExit implements ValRefBinder { else if(thenTarget.getBinding() == elseTarget.getBinding()) { elseTarget.remove(); condition.remove(); - getParent().setExit(new Jump(thenTarget)); + getParent().setExit(new Jump(lineNumber, thenTarget)); context.markModified("equal-branches-if"); } } @@ -223,4 +227,9 @@ public class If extends SSAExit implements ValRefBinder { public void forValRefs(ValRefVisitor visitor) { visitor.visit(condition); } + + @Override + public void cleanup() { + condition.remove(); + } }