diff --git a/jode/jode/decompiler/LocalInfo.java b/jode/jode/decompiler/LocalInfo.java index f3a0eac..30243ae 100644 --- a/jode/jode/decompiler/LocalInfo.java +++ b/jode/jode/decompiler/LocalInfo.java @@ -85,7 +85,9 @@ public class LocalInfo { LocalVarOperator lvo = (LocalVarOperator) enum.nextElement(); if (needTypeUpdate) { -// System.err.println("updating "+lvo+" in "+lvo.parent); + if (Decompiler.isTypeDebugging) + System.err.println("updating " + lvo + " in " + + ((Expression)lvo).parent); lvo.updateType(); } shadow.operators.addElement(lvo); diff --git a/jode/jode/expr/AssignOperator.java b/jode/jode/expr/AssignOperator.java index acfec78..963d4ea 100644 --- a/jode/jode/expr/AssignOperator.java +++ b/jode/jode/expr/AssignOperator.java @@ -34,6 +34,7 @@ public class AssignOperator extends Operator { public AssignOperator(int op, StoreInstruction store) { super(store.getLValueType(), op); this.store = store; + store.parent = this; } public StoreInstruction getStore() { diff --git a/jode/jode/expr/ComplexExpression.java b/jode/jode/expr/ComplexExpression.java index 9a563e7..4b2e6f1 100644 --- a/jode/jode/expr/ComplexExpression.java +++ b/jode/jode/expr/ComplexExpression.java @@ -108,10 +108,13 @@ public class ComplexExpression extends Expression { StoreInstruction store = (StoreInstruction) e.getOperator(); if (store.matches(operator)) { - ((ComplexExpression) e).operator = - new AssignOperator(store.getOperatorIndex(), store); + operator.parent = null; + operator = new AssignOperator(store.getOperatorIndex(), store); + operator.parent = this; this.subExpressions = ((ComplexExpression) e).subExpressions; - return e; + for (int i=0; i < subExpressions.length; i++) + subExpressions[i].parent = this; + return this; } for (int i=0; i < subExpressions.length; i++) { Expression combined = subExpressions[i].combine(e); diff --git a/jode/jode/expr/Expression.java b/jode/jode/expr/Expression.java index 51d5485..581fa30 100644 --- a/jode/jode/expr/Expression.java +++ b/jode/jode/expr/Expression.java @@ -22,7 +22,7 @@ package jode; public abstract class Expression { protected Type type; - ComplexExpression parent = null; + Expression parent = null; public Expression(Type type) { this.type = type; @@ -36,6 +36,11 @@ public abstract class Expression { this.type = newType; } + public void updateType() { + if (parent != null) + parent.updateType(); + } + /** * Get the number of operands. * @return The number of stack entries this expression needs.