diff options
Diffstat (limited to 'src/org/jetbrains/java/decompiler/modules/decompiler/exps/FunctionExprent.java')
-rw-r--r-- | src/org/jetbrains/java/decompiler/modules/decompiler/exps/FunctionExprent.java | 62 |
1 files changed, 32 insertions, 30 deletions
diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/exps/FunctionExprent.java b/src/org/jetbrains/java/decompiler/modules/decompiler/exps/FunctionExprent.java index 4fa2ab3..8c8862b 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/exps/FunctionExprent.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/exps/FunctionExprent.java @@ -16,6 +16,7 @@ package org.jetbrains.java.decompiler.modules.decompiler.exps; import org.jetbrains.java.decompiler.code.CodeConstants; +import org.jetbrains.java.decompiler.main.collectors.BytecodeMappingTracer; import org.jetbrains.java.decompiler.modules.decompiler.ExprProcessor; import org.jetbrains.java.decompiler.modules.decompiler.vars.CheckTypesResult; import org.jetbrains.java.decompiler.struct.gen.VarType; @@ -446,31 +447,32 @@ public class FunctionExprent extends Exprent { } } - public String toJava(int indent) { + @Override + public String toJava(int indent, BytecodeMappingTracer tracer) { if (functype <= FUNCTION_USHR) { - return wrapOperandString(lstOperands.get(0), false, indent) + operators[functype] + - wrapOperandString(lstOperands.get(1), true, indent); + return wrapOperandString(lstOperands.get(0), false, indent, tracer) + operators[functype] + + wrapOperandString(lstOperands.get(1), true, indent, tracer); } if (functype >= FUNCTION_EQ) { - return wrapOperandString(lstOperands.get(0), false, indent) + operators[functype - FUNCTION_EQ + 11] + - wrapOperandString(lstOperands.get(1), true, indent); + return wrapOperandString(lstOperands.get(0), false, indent, tracer) + operators[functype - FUNCTION_EQ + 11] + + wrapOperandString(lstOperands.get(1), true, indent, tracer); } switch (functype) { case FUNCTION_BITNOT: - return "~" + wrapOperandString(lstOperands.get(0), true, indent); + return "~" + wrapOperandString(lstOperands.get(0), true, indent, tracer); case FUNCTION_BOOLNOT: - return "!" + wrapOperandString(lstOperands.get(0), true, indent); + return "!" + wrapOperandString(lstOperands.get(0), true, indent, tracer); case FUNCTION_NEG: - return "-" + wrapOperandString(lstOperands.get(0), true, indent); + return "-" + wrapOperandString(lstOperands.get(0), true, indent, tracer); case FUNCTION_CAST: - return "(" + lstOperands.get(1).toJava(indent) + ")" + wrapOperandString(lstOperands.get(0), true, indent); + return "(" + lstOperands.get(1).toJava(indent, tracer) + ")" + wrapOperandString(lstOperands.get(0), true, indent, tracer); case FUNCTION_ARRAYLENGTH: Exprent arr = lstOperands.get(0); - String res = wrapOperandString(arr, false, indent); + String res = wrapOperandString(arr, false, indent, tracer); if (arr.getExprType().arraydim == 0) { VarType objarr = VarType.VARTYPE_OBJECT.copy(); objarr.arraydim = 1; // type family does not change @@ -479,52 +481,52 @@ public class FunctionExprent extends Exprent { } return res + ".length"; case FUNCTION_IIF: - return wrapOperandString(lstOperands.get(0), true, indent) + "?" + wrapOperandString(lstOperands.get(1), true, indent) + ":" + - wrapOperandString(lstOperands.get(2), true, indent); + return wrapOperandString(lstOperands.get(0), true, indent, tracer) + "?" + wrapOperandString(lstOperands.get(1), true, indent, tracer) + ":" + + wrapOperandString(lstOperands.get(2), true, indent, tracer); case FUNCTION_IPP: - return wrapOperandString(lstOperands.get(0), true, indent) + "++"; + return wrapOperandString(lstOperands.get(0), true, indent, tracer) + "++"; case FUNCTION_PPI: - return "++" + wrapOperandString(lstOperands.get(0), true, indent); + return "++" + wrapOperandString(lstOperands.get(0), true, indent, tracer); case FUNCTION_IMM: - return wrapOperandString(lstOperands.get(0), true, indent) + "--"; + return wrapOperandString(lstOperands.get(0), true, indent, tracer) + "--"; case FUNCTION_MMI: - return "--" + wrapOperandString(lstOperands.get(0), true, indent); + return "--" + wrapOperandString(lstOperands.get(0), true, indent, tracer); case FUNCTION_INSTANCEOF: - return wrapOperandString(lstOperands.get(0), true, indent) + " instanceof " + wrapOperandString(lstOperands.get(1), true, indent); + return wrapOperandString(lstOperands.get(0), true, indent, tracer) + " instanceof " + wrapOperandString(lstOperands.get(1), true, indent, tracer); case FUNCTION_LCMP: // shouldn't appear in the final code return "__lcmp__(" + - wrapOperandString(lstOperands.get(0), true, indent) + + wrapOperandString(lstOperands.get(0), true, indent, tracer) + "," + - wrapOperandString(lstOperands.get(1), true, indent) + + wrapOperandString(lstOperands.get(1), true, indent, tracer) + ")"; case FUNCTION_FCMPL: // shouldn't appear in the final code return "__fcmpl__(" + - wrapOperandString(lstOperands.get(0), true, indent) + + wrapOperandString(lstOperands.get(0), true, indent, tracer) + "," + - wrapOperandString(lstOperands.get(1), true, indent) + + wrapOperandString(lstOperands.get(1), true, indent, tracer) + ")"; case FUNCTION_FCMPG: // shouldn't appear in the final code return "__fcmpg__(" + - wrapOperandString(lstOperands.get(0), true, indent) + + wrapOperandString(lstOperands.get(0), true, indent, tracer) + "," + - wrapOperandString(lstOperands.get(1), true, indent) + + wrapOperandString(lstOperands.get(1), true, indent, tracer) + ")"; case FUNCTION_DCMPL: // shouldn't appear in the final code return "__dcmpl__(" + - wrapOperandString(lstOperands.get(0), true, indent) + + wrapOperandString(lstOperands.get(0), true, indent, tracer) + "," + - wrapOperandString(lstOperands.get(1), true, indent) + + wrapOperandString(lstOperands.get(1), true, indent, tracer) + ")"; case FUNCTION_DCMPG: // shouldn't appear in the final code return "__dcmpg__(" + - wrapOperandString(lstOperands.get(0), true, indent) + + wrapOperandString(lstOperands.get(0), true, indent, tracer) + "," + - wrapOperandString(lstOperands.get(1), true, indent) + + wrapOperandString(lstOperands.get(1), true, indent, tracer) + ")"; } if (functype <= FUNCTION_I2S) { - return "(" + ExprProcessor.getTypeName(types[functype - FUNCTION_I2L]) + ")" + wrapOperandString(lstOperands.get(0), true, indent); + return "(" + ExprProcessor.getTypeName(types[functype - FUNCTION_I2L]) + ")" + wrapOperandString(lstOperands.get(0), true, indent, tracer); } // return "<unknown function>"; @@ -543,7 +545,7 @@ public class FunctionExprent extends Exprent { return types[functype - FUNCTION_I2L]; } - private String wrapOperandString(Exprent expr, boolean eq, int indent) { + private String wrapOperandString(Exprent expr, boolean eq, int indent, BytecodeMappingTracer tracer) { int myprec = getPrecedence(); int exprprec = expr.getPrecedence(); @@ -559,7 +561,7 @@ public class FunctionExprent extends Exprent { } } - String res = expr.toJava(indent); + String res = expr.toJava(indent, tracer); if (parentheses) { res = "(" + res + ")"; |