From 251bba903d362f8968d769293ffa83f54e4add2d Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 8 Mar 1999 12:12:27 +0000 Subject: [PATCH] mapStackToLocal had some bugs git-svn-id: https://svn.code.sf.net/p/jode/code/trunk@343 379699f6-c40d-0410-875b-85095c16579e --- jode/jode/flow/LoopBlock.java | 45 +++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/jode/jode/flow/LoopBlock.java b/jode/jode/flow/LoopBlock.java index e8bd353..8f66fe6 100644 --- a/jode/jode/flow/LoopBlock.java +++ b/jode/jode/flow/LoopBlock.java @@ -320,19 +320,38 @@ public class LoopBlock extends StructuredBlock implements BreakableBlock { * otherwise the stack after the block has executed. */ public VariableStack mapStackToLocal(VariableStack stack) { - continueStack = stack; - VariableStack newStack; - int params = cond.getOperandCount(); - if (params > 0) { - condStack = stack.peek(params); - newStack = stack.pop(params); - } else - newStack = stack; - - VariableStack afterBody = bodyBlock.mapStackToLocal(newStack); - if (afterBody != null) - mergeContinueStack(afterBody); - + if (type == DOWHILE) { + VariableStack afterBody = bodyBlock.mapStackToLocal(stack); + if (afterBody != null) + mergeContinueStack(afterBody); + + if (continueStack != null) { + VariableStack newStack; + int params = cond.getOperandCount(); + if (params > 0) { + condStack = continueStack.peek(params); + newStack = continueStack.pop(params); + } else + newStack = continueStack; + + if (cond != TRUE) + mergeBreakedStack(newStack); + } + } else { + continueStack = stack; + VariableStack newStack; + int params = cond.getOperandCount(); + if (params > 0) { + condStack = stack.peek(params); + newStack = stack.pop(params); + } else + newStack = stack; + if (cond != TRUE) + breakedStack = newStack; + VariableStack afterBody = bodyBlock.mapStackToLocal(newStack); + if (afterBody != null) + mergeContinueStack(afterBody); + } return breakedStack; }