soot.shimple
Class Shimple

java.lang.Object
  |
  +--soot.shimple.Shimple

public class Shimple
extends java.lang.Object

Contains the constructors for the components of the Shimple (SSA Jimple) grammar. Methods are available to construct Shimple from Jimple/Shimple, create Phi nodes, and converting back from Shimple to Jimple.

This should normally be used in conjunction with the constructor methods from soot.jimple.Jimple.

Miscellaneous utility functions are also available in this class.

See Also:
Jimple, Efficiently Computing Static Single Assignment Form and the Control Dependence Graph

Field Summary
static java.lang.String PHASE
           
static java.lang.String PHI
           
 
Constructor Summary
Shimple(Singletons.Global g)
           
 
Method Summary
static Local getLhsLocal(Unit unit)
          Misc utility function.
static PhiExpr getPhiExpr(Unit unit)
          Misc utility function.
static boolean isPhiNode(Unit unit)
          Misc utility function.
 ShimpleBody newBody(Body b)
          Returns a ShimpleBody constructed from b, using default phase options.
 ShimpleBody newBody(Body b, java.util.Map options)
          Returns a ShimpleBody constructed from b, using provided option Map.
 ShimpleBody newBody(SootMethod m)
          Returns an empty ShimpleBody associated with method m, using default phase options.
 ShimpleBody newBody(SootMethod m, java.util.Map options)
          Returns an empty ShimpleBody associated with method m, using provided option map.
 JimpleBody newJimpleBody(ShimpleBody body)
          Constructs a JimpleBody from a ShimpleBody.
 PhiExpr newPhiExpr(java.util.List args, java.util.List preds)
          Create a PhiExpr with the provided list of Values (Locals or Constants) and the corresponding control flow predecessor Blocks.
 PhiExpr newPhiExpr(Local leftLocal, java.util.List preds)
          Create a trivial PhiExpr, where preds are an ordered list of the control predecessor Blocks of the Phi expression.
static void redirectPointers(Unit oldLocation, Unit newLocation)
          Redirects PhiExpr pointers to the given Unit to the new Unit.
static void redirectToPreds(Chain units, Unit remove)
          If you are removing a Unit from a Unit chain which contains PhiExpr's, you might want to call this utility function in order to update any PhiExpr pointers to the Unit to point to the Unit's predecessor(s).
static Shimple v()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

PHI

public static final java.lang.String PHI

PHASE

public static final java.lang.String PHASE
Constructor Detail

Shimple

public Shimple(Singletons.Global g)
Method Detail

v

public static Shimple v()

newBody

public ShimpleBody newBody(SootMethod m)
Returns an empty ShimpleBody associated with method m, using default phase options.

newBody

public ShimpleBody newBody(SootMethod m,
                           java.util.Map options)
Returns an empty ShimpleBody associated with method m, using provided option map.

newBody

public ShimpleBody newBody(Body b)
Returns a ShimpleBody constructed from b, using default phase options.

newBody

public ShimpleBody newBody(Body b,
                           java.util.Map options)
Returns a ShimpleBody constructed from b, using provided option Map.

newPhiExpr

public PhiExpr newPhiExpr(Local leftLocal,
                          java.util.List preds)
Create a trivial PhiExpr, where preds are an ordered list of the control predecessor Blocks of the Phi expression. Instead of a list of blocks, you may provide a list of the tail Units from the corresponding blocks.

newPhiExpr

public PhiExpr newPhiExpr(java.util.List args,
                          java.util.List preds)
Create a PhiExpr with the provided list of Values (Locals or Constants) and the corresponding control flow predecessor Blocks. Instead of a list of predecessor blocks, you may provide a list of the tail Units from the corresponding blocks.

newJimpleBody

public JimpleBody newJimpleBody(ShimpleBody body)
Constructs a JimpleBody from a ShimpleBody.
See Also:
ShimpleOptions

isPhiNode

public static boolean isPhiNode(Unit unit)
Misc utility function. Returns true if the unit is a Phi node, false otherwise.

getPhiExpr

public static PhiExpr getPhiExpr(Unit unit)
Misc utility function. Returns the corresponding PhiExpr if the unit is a Phi node, null otherwise.

getLhsLocal

public static Local getLhsLocal(Unit unit)
Misc utility function. Returns the corresponding left Local if the unit is a Phi node, null otherwise.

redirectToPreds

public static void redirectToPreds(Chain units,
                                   Unit remove)
If you are removing a Unit from a Unit chain which contains PhiExpr's, you might want to call this utility function in order to update any PhiExpr pointers to the Unit to point to the Unit's predecessor(s). This function will not modify "branch target" UnitBoxes.

Normally you should not have to call this function directly, since patching is taken care of Shimple's internal implementation of PatchingChain.


redirectPointers

public static void redirectPointers(Unit oldLocation,
                                    Unit newLocation)
Redirects PhiExpr pointers to the given Unit to the new Unit.

Normally you should not have to call this function directly, since patching is taken care of Shimple's internal implementation of PatchingChain.