diff --git a/jode/ChangeLog b/jode/ChangeLog index 19163b9..fe79a5f 100644 --- a/jode/ChangeLog +++ b/jode/ChangeLog @@ -1,3 +1,10 @@ +2002-02-01 Jochen Hoenicke + + * jode/flow/CreateAssignExpression.java (createAssignOp): + Bug fix: Check whether store is already a op-assign and break out. + * jode/expr/StoreInstruction.java (isOpAssign): New function to + check whether this is an op-assign. + 2002-01-16 Jochen Hoenicke Fixes by anonymous for SerializePreserver: diff --git a/jode/jode/expr/StoreInstruction.java b/jode/jode/expr/StoreInstruction.java index 538ead4..f635bb2 100644 --- a/jode/jode/expr/StoreInstruction.java +++ b/jode/jode/expr/StoreInstruction.java @@ -25,7 +25,7 @@ import jode.decompiler.TabbedPrintWriter; public class StoreInstruction extends Operator implements CombineableOperator { - boolean isOpAssign = false; + boolean opAssign = false; public StoreInstruction(LValueExpression lvalue) { super(Type.tVoid, ASSIGN_OP); @@ -41,7 +41,11 @@ public class StoreInstruction extends Operator setOperatorIndex(operatorIndex); if (subExpressions[1] instanceof NopOperator) subExpressions[1].type = Type.tUnknown; - isOpAssign = true; + opAssign = true; + } + + public boolean isOpAssign() { + return opAssign; } /** @@ -72,7 +76,7 @@ public class StoreInstruction extends Operator Type newType; - if (!isOpAssign) { + if (!opAssign) { /* An opassign (+=, -=, etc.) doesn't merge rvalue type. */ Type lvalueType = subExpressions[0].getType(); Type rvalueType = subExpressions[1].getType(); diff --git a/jode/jode/flow/CreateAssignExpression.java b/jode/jode/flow/CreateAssignExpression.java index a38975f..c887ec5 100644 --- a/jode/jode/flow/CreateAssignExpression.java +++ b/jode/jode/flow/CreateAssignExpression.java @@ -56,7 +56,7 @@ public class CreateAssignExpression { SequentialBlock opBlock = (SequentialBlock) last.outer; StoreInstruction store = (StoreInstruction) ic.getInstruction(); - if (!store.isFreeOperator()) + if (!store.isFreeOperator() || store.isOpAssign()) return false; Expression lvalue = store.getSubExpressions()[0]; int lvalueCount = lvalue.getFreeOperandCount();