Pseudocode: Consume value of true condition in while-loop

This commit is contained in:
Alexey Sedunov
2014-07-23 12:47:01 +04:00
parent e11ffb8542
commit b0bf11c51e
5 changed files with 72 additions and 57 deletions
@@ -802,6 +802,13 @@ public class JetControlFlowProcessor {
if (!conditionIsTrueConstant) {
builder.jumpOnFalse(loopInfo.getExitPoint(), expression, builder.getBoundValue(condition));
}
else {
assert condition != null : "Invalid while condition: " + expression.getText();
List<PseudoValue> values = ContainerUtil.createMaybeSingletonList(builder.getBoundValue(condition));
Map<PseudoValue, TypePredicate> typePredicates =
PseudocodePackage.expectedTypeFor(new SingleType(KotlinBuiltIns.getInstance().getBooleanType()), values);
builder.magic(condition, null, values, typePredicates, MagicKind.VALUE_CONSUMER);
}
builder.bindLabel(loopInfo.getBodyEntryPoint());
JetExpression body = expression.getBody();