edu.cmu.cs.crystal.analysis.live
Class LiveVariableTransferFunction

java.lang.Object
  extended by edu.cmu.cs.crystal.simple.AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>
      extended by edu.cmu.cs.crystal.analysis.live.LiveVariableTransferFunction
All Implemented Interfaces:
IFlowAnalysisDefinition<TupleLatticeElement<Variable,LiveVariableLE>>, ITACTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>

public class LiveVariableTransferFunction
extends AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>


Constructor Summary
LiveVariableTransferFunction()
           
 
Method Summary
 TupleLatticeElement<Variable,LiveVariableLE> createEntryValue(MethodDeclaration d)
          Creates entry analysis information for analyzing a given method.
 AnalysisDirection getAnalysisDirection()
          Informs Crystal in which direction to perform the analysis.
 ILatticeOperations<TupleLatticeElement<Variable,LiveVariableLE>> getLatticeOperations()
          Gets the lattice operations for computing flow analysis results for a given method.
 TupleLatticeElement<Variable,LiveVariableLE> transfer(ArrayInitInstruction instr, TupleLatticeElement<Variable,LiveVariableLE> value)
           
 TupleLatticeElement<Variable,LiveVariableLE> transfer(BinaryOperation binop, TupleLatticeElement<Variable,LiveVariableLE> value)
           
 TupleLatticeElement<Variable,LiveVariableLE> transfer(CastInstruction instr, TupleLatticeElement<Variable,LiveVariableLE> value)
           
 TupleLatticeElement<Variable,LiveVariableLE> transfer(ConstructorCallInstruction instr, TupleLatticeElement<Variable,LiveVariableLE> value)
           
 TupleLatticeElement<Variable,LiveVariableLE> transfer(CopyInstruction instr, TupleLatticeElement<Variable,LiveVariableLE> value)
           
 TupleLatticeElement<Variable,LiveVariableLE> transfer(DotClassInstruction instr, TupleLatticeElement<Variable,LiveVariableLE> value)
           
 TupleLatticeElement<Variable,LiveVariableLE> transfer(EnhancedForConditionInstruction instr, TupleLatticeElement<Variable,LiveVariableLE> value)
           
 TupleLatticeElement<Variable,LiveVariableLE> transfer(InstanceofInstruction instr, TupleLatticeElement<Variable,LiveVariableLE> value)
           
 TupleLatticeElement<Variable,LiveVariableLE> transfer(LoadArrayInstruction instr, TupleLatticeElement<Variable,LiveVariableLE> value)
           
 TupleLatticeElement<Variable,LiveVariableLE> transfer(LoadFieldInstruction instr, TupleLatticeElement<Variable,LiveVariableLE> value)
           
 TupleLatticeElement<Variable,LiveVariableLE> transfer(LoadLiteralInstruction instr, TupleLatticeElement<Variable,LiveVariableLE> value)
           
 TupleLatticeElement<Variable,LiveVariableLE> transfer(MethodCallInstruction instr, TupleLatticeElement<Variable,LiveVariableLE> value)
           
 TupleLatticeElement<Variable,LiveVariableLE> transfer(NewArrayInstruction instr, TupleLatticeElement<Variable,LiveVariableLE> value)
           
 TupleLatticeElement<Variable,LiveVariableLE> transfer(NewObjectInstruction instr, TupleLatticeElement<Variable,LiveVariableLE> value)
           
 TupleLatticeElement<Variable,LiveVariableLE> transfer(ReturnInstruction instr, TupleLatticeElement<Variable,LiveVariableLE> value)
           
 TupleLatticeElement<Variable,LiveVariableLE> transfer(SourceVariableDeclaration instr, TupleLatticeElement<Variable,LiveVariableLE> value)
           
 TupleLatticeElement<Variable,LiveVariableLE> transfer(SourceVariableReadInstruction instr, TupleLatticeElement<Variable,LiveVariableLE> value)
           
 TupleLatticeElement<Variable,LiveVariableLE> transfer(StoreArrayInstruction instr, TupleLatticeElement<Variable,LiveVariableLE> value)
           
 TupleLatticeElement<Variable,LiveVariableLE> transfer(StoreFieldInstruction instr, TupleLatticeElement<Variable,LiveVariableLE> value)
           
 TupleLatticeElement<Variable,LiveVariableLE> transfer(UnaryOperation unop, TupleLatticeElement<Variable,LiveVariableLE> value)
           
 
Methods inherited from class edu.cmu.cs.crystal.simple.AbstractingTransferFunction
getAnalysisContext, setAnalysisContext, transfer, transfer, transfer, transfer, transfer
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LiveVariableTransferFunction

public LiveVariableTransferFunction()
Method Detail

getLatticeOperations

public ILatticeOperations<TupleLatticeElement<Variable,LiveVariableLE>> getLatticeOperations()
Description copied from interface: IFlowAnalysisDefinition
Gets the lattice operations for computing flow analysis results for a given method. Crystal uses the result of this method to compare and join intermediate results.

Returns:
lattice operations to be used for computing flow analysis results for a given method.

createEntryValue

public TupleLatticeElement<Variable,LiveVariableLE> createEntryValue(MethodDeclaration d)
Description copied from interface: IFlowAnalysisDefinition
Creates entry analysis information for analyzing a given method. Crystal's flow analysis uses the result of this method as the incoming analysis information to transfer over the first (or last, for backwards analyses) instruction in the given method.

Parameters:
d - the method to create the lattice operations for
Returns:
entry analysis information for analyzing a given method.

getAnalysisDirection

public AnalysisDirection getAnalysisDirection()
Description copied from interface: IFlowAnalysisDefinition
Informs Crystal in which direction to perform the analysis.

Specified by:
getAnalysisDirection in interface IFlowAnalysisDefinition<TupleLatticeElement<Variable,LiveVariableLE>>
Overrides:
getAnalysisDirection in class AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>
Returns:
the direction of the analysis; never null.

transfer

public TupleLatticeElement<Variable,LiveVariableLE> transfer(ArrayInitInstruction instr,
                                                             TupleLatticeElement<Variable,LiveVariableLE> value)
Specified by:
transfer in interface ITACTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>
Overrides:
transfer in class AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>

transfer

public TupleLatticeElement<Variable,LiveVariableLE> transfer(BinaryOperation binop,
                                                             TupleLatticeElement<Variable,LiveVariableLE> value)
Specified by:
transfer in interface ITACTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>
Overrides:
transfer in class AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>

transfer

public TupleLatticeElement<Variable,LiveVariableLE> transfer(CastInstruction instr,
                                                             TupleLatticeElement<Variable,LiveVariableLE> value)
Specified by:
transfer in interface ITACTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>
Overrides:
transfer in class AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>

transfer

public TupleLatticeElement<Variable,LiveVariableLE> transfer(DotClassInstruction instr,
                                                             TupleLatticeElement<Variable,LiveVariableLE> value)
Specified by:
transfer in interface ITACTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>
Overrides:
transfer in class AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>

transfer

public TupleLatticeElement<Variable,LiveVariableLE> transfer(ConstructorCallInstruction instr,
                                                             TupleLatticeElement<Variable,LiveVariableLE> value)
Specified by:
transfer in interface ITACTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>
Overrides:
transfer in class AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>

transfer

public TupleLatticeElement<Variable,LiveVariableLE> transfer(CopyInstruction instr,
                                                             TupleLatticeElement<Variable,LiveVariableLE> value)
Specified by:
transfer in interface ITACTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>
Overrides:
transfer in class AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>

transfer

public TupleLatticeElement<Variable,LiveVariableLE> transfer(EnhancedForConditionInstruction instr,
                                                             TupleLatticeElement<Variable,LiveVariableLE> value)
Specified by:
transfer in interface ITACTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>
Overrides:
transfer in class AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>

transfer

public TupleLatticeElement<Variable,LiveVariableLE> transfer(InstanceofInstruction instr,
                                                             TupleLatticeElement<Variable,LiveVariableLE> value)
Specified by:
transfer in interface ITACTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>
Overrides:
transfer in class AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>

transfer

public TupleLatticeElement<Variable,LiveVariableLE> transfer(LoadLiteralInstruction instr,
                                                             TupleLatticeElement<Variable,LiveVariableLE> value)
Specified by:
transfer in interface ITACTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>
Overrides:
transfer in class AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>

transfer

public TupleLatticeElement<Variable,LiveVariableLE> transfer(LoadArrayInstruction instr,
                                                             TupleLatticeElement<Variable,LiveVariableLE> value)
Specified by:
transfer in interface ITACTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>
Overrides:
transfer in class AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>

transfer

public TupleLatticeElement<Variable,LiveVariableLE> transfer(LoadFieldInstruction instr,
                                                             TupleLatticeElement<Variable,LiveVariableLE> value)
Specified by:
transfer in interface ITACTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>
Overrides:
transfer in class AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>

transfer

public TupleLatticeElement<Variable,LiveVariableLE> transfer(MethodCallInstruction instr,
                                                             TupleLatticeElement<Variable,LiveVariableLE> value)
Specified by:
transfer in interface ITACTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>
Overrides:
transfer in class AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>

transfer

public TupleLatticeElement<Variable,LiveVariableLE> transfer(NewArrayInstruction instr,
                                                             TupleLatticeElement<Variable,LiveVariableLE> value)
Specified by:
transfer in interface ITACTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>
Overrides:
transfer in class AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>

transfer

public TupleLatticeElement<Variable,LiveVariableLE> transfer(NewObjectInstruction instr,
                                                             TupleLatticeElement<Variable,LiveVariableLE> value)
Specified by:
transfer in interface ITACTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>
Overrides:
transfer in class AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>

transfer

public TupleLatticeElement<Variable,LiveVariableLE> transfer(ReturnInstruction instr,
                                                             TupleLatticeElement<Variable,LiveVariableLE> value)
Specified by:
transfer in interface ITACTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>
Overrides:
transfer in class AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>

transfer

public TupleLatticeElement<Variable,LiveVariableLE> transfer(StoreArrayInstruction instr,
                                                             TupleLatticeElement<Variable,LiveVariableLE> value)
Specified by:
transfer in interface ITACTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>
Overrides:
transfer in class AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>

transfer

public TupleLatticeElement<Variable,LiveVariableLE> transfer(StoreFieldInstruction instr,
                                                             TupleLatticeElement<Variable,LiveVariableLE> value)
Specified by:
transfer in interface ITACTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>
Overrides:
transfer in class AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>

transfer

public TupleLatticeElement<Variable,LiveVariableLE> transfer(SourceVariableDeclaration instr,
                                                             TupleLatticeElement<Variable,LiveVariableLE> value)
Specified by:
transfer in interface ITACTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>
Overrides:
transfer in class AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>

transfer

public TupleLatticeElement<Variable,LiveVariableLE> transfer(SourceVariableReadInstruction instr,
                                                             TupleLatticeElement<Variable,LiveVariableLE> value)
Specified by:
transfer in interface ITACTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>
Overrides:
transfer in class AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>

transfer

public TupleLatticeElement<Variable,LiveVariableLE> transfer(UnaryOperation unop,
                                                             TupleLatticeElement<Variable,LiveVariableLE> value)
Specified by:
transfer in interface ITACTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>
Overrides:
transfer in class AbstractingTransferFunction<TupleLatticeElement<Variable,LiveVariableLE>>