Package soot.shimple

Class Shimple


  • public class Shimple
    extends Object
    Contains the constructors for the components of the SSA Shimple 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.

    Author:
    Navindra Umanee
    See Also:
    Jimple, Efficiently Computing Static Single Assignment Form and the Control Dependence Graph
    • Method Detail

      • newBody

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

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

        public ShimpleBody newBody​(Body b,
                                   Map<String,​String> options)
        Returns a ShimpleBody constructed from b, using provided option Map.
      • newPhiExpr

        public PhiExpr newPhiExpr​(Local leftLocal,
                                  List<Block> 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​(List<Value> args,
                                  List<Unit> 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.
      • isPhiExpr

        public static boolean isPhiExpr​(Value value)
        Returns true if the value is a Phi expression, false otherwise.
      • isPhiNode

        public static boolean isPhiNode​(Unit unit)
        Returns true if the unit is a Phi node, false otherwise.
      • getPhiExpr

        public static PhiExpr getPhiExpr​(Unit unit)
        Returns the corresponding PhiExpr if the unit is a Phi node, null otherwise.
      • isPiExpr

        public static boolean isPiExpr​(Value value)
      • isPiNode

        public static boolean isPiNode​(Unit unit)
      • getPiExpr

        public static PiExpr getPiExpr​(Unit unit)
      • getLhsLocal

        public static Local getLhsLocal​(Unit unit)
        Returns the corresponding left Local if the unit is a Shimple node, null otherwise.
      • redirectToPreds

        public static void redirectToPreds​(Body body,
                                           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 referencing the first Unit to instead reference the second Unit.

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