From dd33ee137ea23aed4d1332f451ad948067c74a45 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 3 May 1999 10:54:50 +0000 Subject: [PATCH] new options. high level simplification git-svn-id: https://svn.code.sf.net/p/jode/code/trunk@741 379699f6-c40d-0410-875b-85095c16579e --- jode/jode/expr/ComplexExpression.java | 32 +++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/jode/jode/expr/ComplexExpression.java b/jode/jode/expr/ComplexExpression.java index efcd70d..9fb6c8c 100644 --- a/jode/jode/expr/ComplexExpression.java +++ b/jode/jode/expr/ComplexExpression.java @@ -19,6 +19,7 @@ package jode.expr; import jode.GlobalOptions; +import jode.Decompiler; import jode.type.Type; import jode.decompiler.TabbedPrintWriter; @@ -440,7 +441,7 @@ public class ComplexExpression extends Expression { return new ComplexExpression (new StringAddOperator(), new Expression[] { left, right }); - } else if (jode.Decompiler.stringDecrypting) { + } else if ((Decompiler.options & Decompiler.OPTION_DECRYPT) != 0) { Expression expr = subExpressions[0].simplifyString(); if (expr instanceof ConstOperator) { expr = invoke.deobfuscateString((ConstOperator)expr); @@ -453,7 +454,9 @@ public class ComplexExpression extends Expression { } public Expression simplify() { - if (operator instanceof IfThenElseOperator && + for (int i=0; i< subExpressions.length; i++) + subExpressions[i] = subExpressions[i].simplify(); + if (operator instanceof IfThenElseOperator && operator.getType().isOfType(Type.tBoolean)) { if (subExpressions[1].getOperator() instanceof ConstOperator && subExpressions[2].getOperator() instanceof ConstOperator) { @@ -566,13 +569,34 @@ public class ComplexExpression extends Expression { } } } - } else { + } else if (operator instanceof ConstructorOperator) { + ConstructorOperator cop = (ConstructorOperator) operator; + if (cop.getOuterClassInfo() != null) { + if (subExpressions[0] instanceof ComplexExpression + && (subExpressions[0].getOperator() + instanceof CheckNullOperator)) { + ((CheckNullOperator) subExpressions[0].getOperator()) + .removeLocal(); + subExpressions[0] = ((ComplexExpression) subExpressions[0]) + .subExpressions[0]; + cop.removedCheckNull = true; + } + } + } else if (operator instanceof GetFieldOperator) { + Expression thisExpr = + ((GetFieldOperator)operator).simplifyThis(subExpressions); + if (thisExpr != null) + return thisExpr.simplify(); + } else if (operator instanceof InvokeOperator) { + Expression accessExpr = + ((InvokeOperator)operator).simplifyAccess(subExpressions); + if (accessExpr != null) + return accessExpr.simplify(); Expression stringExpr = simplifyString(); if (stringExpr != this) return stringExpr.simplify(); } for (int i=0; i< subExpressions.length; i++) { - subExpressions[i] = subExpressions[i].simplify(); subExpressions[i].parent = this; } return this;