git-svn-id: https://svn.code.sf.net/p/jode/code/trunk@23 379699f6-c40d-0410-875b-85095c16579estable
parent
b6eb6a495b
commit
80463e085e
@ -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)); |
||||
} |
||||
} |
@ -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 |
Loading…
Reference in new issue