abc.weaving.residues
Class BindMaskResidue

java.lang.Object
  extended by abc.weaving.residues.Residue
      extended by abc.weaving.residues.BindMaskResidue

public class BindMaskResidue
extends Residue

Author:
Sascha Kuzins, Ondrej Lhotak Needed for ambiguous bindings. Generates code to set bits in a mask that express this particular binding.

Nested Class Summary
 
Nested classes/interfaces inherited from class abc.weaving.residues.Residue
Residue.Bindings
 
Method Summary
 Stmt codeGen(SootMethod method, LocalGeneratorEx localgen, Chain units, Stmt begin, Stmt fail, boolean sense, WeavingContext wc)
          Generates code to set the bits in the mask, then generates the Bind code.
 void getAdviceFormalBindings(Residue.Bindings bindings, AndResidue andRoot)
          Fills the Bindings object with information of possible advice-formal bindings.
 Residue getOp()
           
 java.util.List getResidueBoxes()
           
 Residue inline(ConstructorInliningMap cim)
          Make a copy of the residue applying to an inlined version of the code.
 Residue optimize()
          Optimize the residue by rebuilding it, invoking the smart constructors along the way.
 Residue resetForReweaving()
           
 Residue restructureToCreateBindingsMask(soot.Local bindingsMaskLocal, Residue.Bindings bindings)
          Returns residue that replaces the old residue.
 java.lang.String toString()
          Must provide a toString method
 
Methods inherited from class abc.weaving.residues.Residue
succeed
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Method Detail

optimize

public Residue optimize()
Description copied from class: Residue
Optimize the residue by rebuilding it, invoking the smart constructors along the way.

Specified by:
optimize in class Residue

inline

public Residue inline(ConstructorInliningMap cim)
Description copied from class: Residue
Make a copy of the residue applying to an inlined version of the code.

Specified by:
inline in class Residue

codeGen

public Stmt codeGen(SootMethod method,
                    LocalGeneratorEx localgen,
                    Chain units,
                    Stmt begin,
                    Stmt fail,
                    boolean sense,
                    WeavingContext wc)
Generates code to set the bits in the mask, then generates the Bind code.

Specified by:
codeGen in class Residue
Parameters:
method - The method the code is being inserted into
localgen - A local generator for the method
units - The chain the code is being inserted into
begin - Code will be inserted just after this statement
fail - If the residue "fails", the inserted code will jump to this point; otherwise it will fall through
sense - If this is false, inverts the meaning of failure and success for the residue
wc - The weaving context
Returns:
The last statement that was inserted into the chain (or begin if nothing was).

toString

public java.lang.String toString()
Description copied from class: Residue
Must provide a toString method

Specified by:
toString in class Residue

resetForReweaving

public Residue resetForReweaving()
Overrides:
resetForReweaving in class Residue

getAdviceFormalBindings

public void getAdviceFormalBindings(Residue.Bindings bindings,
                                    AndResidue andRoot)
Description copied from class: Residue
Fills the Bindings object with information of possible advice-formal bindings. Has to be overwritten by all Residue classes that have children. andRoot is the outermost directly enclosing AndResidue (or null). (see implementation in AndResidue)

Overrides:
getAdviceFormalBindings in class Residue

restructureToCreateBindingsMask

public Residue restructureToCreateBindingsMask(soot.Local bindingsMaskLocal,
                                               Residue.Bindings bindings)
Description copied from class: Residue
Returns residue that replaces the old residue. This way, BindMaskResidue is inserted throughout the tree in the appropriate places. Has to be overridden by all Residue classes that have children.

Overrides:
restructureToCreateBindingsMask in class Residue

getOp

public Residue getOp()

getResidueBoxes

public java.util.List getResidueBoxes()
Overrides:
getResidueBoxes in class Residue