From 80463e085e2ae95108f4a4c0733cf0fb988ee382 Mon Sep 17 00:00:00 2001 From: jochen Date: Sat, 19 Sep 1998 09:01:32 +0000 Subject: [PATCH] Initial revision git-svn-id: https://svn.code.sf.net/p/jode/code/trunk@23 379699f6-c40d-0410-875b-85095c16579e --- jode/jode/flow/CreateExpression.java | 55 ++++++++++++++++++++++++++++ jode/jode/flow/TEMPLATE | 23 ++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 jode/jode/flow/CreateExpression.java create mode 100755 jode/jode/flow/TEMPLATE diff --git a/jode/jode/flow/CreateExpression.java b/jode/jode/flow/CreateExpression.java new file mode 100644 index 0000000..21dfb34 --- /dev/null +++ b/jode/jode/flow/CreateExpression.java @@ -0,0 +1,55 @@ +/* + * CreateExpression (c) 1998 Jochen Hoenicke + * + * You may distribute under the terms of the GNU General Public License. + * + * IN NO EVENT SHALL JOCHEN HOENICKE BE LIABLE TO ANY PARTY FOR DIRECT, + * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF + * THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF JOCHEN HOENICKE + * HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * JOCHEN HOENICKE SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" + * BASIS, AND JOCHEN HOENICKE HAS NO OBLIGATION TO PROVIDE MAINTENANCE, + * SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * $Id$ + */ + +package jode; + +public class CreateExpression implements Transformation { + + public StructuredBlock transform(StructuredBlock block) { + Operator op; + Expression exprs[]; + int params; + try { + op = (Operator) block.getInstruction(); + params = op.getOperandCount(); + exprs = new Expression[params]; + for (int i = params-1; i>=0; i--) { + block = block.getSimpleUniquePredecessor(); + exprs[i] = (Expression) ih.getInstruction(); + if (exprs[i].isVoid()) { + if (i == params-1) + return null; + Expression e = exprs[i+1].tryToCombine(exprs[i]); + if (e == null) + return null; + i++; + exprs[i] = e; + ih = ih.combine(2, e); + } + } + } catch (NullPointerException ex) { + return null; + } catch (ClassCastException ex) { + return null; + } + if(Decompiler.isVerbose && params > 0) + System.err.print("x"); + return ih.combine(params+1, new Expression(op, exprs)); + } +} diff --git a/jode/jode/flow/TEMPLATE b/jode/jode/flow/TEMPLATE new file mode 100755 index 0000000..b65bc59 --- /dev/null +++ b/jode/jode/flow/TEMPLATE @@ -0,0 +1,23 @@ +/* (c) 1998 Jochen Hoenicke + * + * You may distribute under the terms of the GNU General Public License. + * + * IN NO EVENT SHALL JOCHEN HOENICKE BE LIABLE TO ANY PARTY FOR DIRECT, + * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF + * THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF JOCHEN HOENICKE + * HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * JOCHEN HOENICKE SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" + * BASIS, AND JOCHEN HOENICKE HAS NO OBLIGATION TO PROVIDE MAINTENANCE, + * SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * $Id$ + */ +package jode.flow; + +/** + * + */ +public class \ No newline at end of file