mapStackToLocal had some bugs

git-svn-id: https://svn.code.sf.net/p/jode/code/trunk@343 379699f6-c40d-0410-875b-85095c16579e
stable
jochen 26 years ago
parent 5407fb0089
commit 251bba903d
  1. 45
      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;
}

Loading…
Cancel
Save