edu.cmu.cs.crystal.analysis.constant
Class ConstantTransferFunction

java.lang.Object
  extended by edu.cmu.cs.crystal.analysis.constant.ConstantTransferFunction
All Implemented Interfaces:
IFlowAnalysisDefinition<TupleLatticeElement<Variable,BooleanConstantLE>>, ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>

public class ConstantTransferFunction
extends Object
implements ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>


Constructor Summary
ConstantTransferFunction()
           
 
Method Summary
 TupleLatticeElement<Variable,BooleanConstantLE> createEntryValue(MethodDeclaration m)
          Creates entry analysis information for analyzing a given method.
 AnalysisDirection getAnalysisDirection()
          Informs Crystal in which direction to perform the analysis.
 ILatticeOperations<TupleLatticeElement<Variable,BooleanConstantLE>> getLatticeOperations()
          Gets the lattice operations for computing flow analysis results for a given method.
 void setAnalysisContext(ITACAnalysisContext analysisContext)
          This method is used to pass a variable query interface to the transfer function.
 IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(ArrayInitInstruction instr, List<ILabel> labels, TupleLatticeElement<Variable,BooleanConstantLE> value)
           
 IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(BinaryOperation binop, List<ILabel> labels, TupleLatticeElement<Variable,BooleanConstantLE> value)
           
 IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(CastInstruction instr, List<ILabel> labels, TupleLatticeElement<Variable,BooleanConstantLE> value)
           
 IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(ConstructorCallInstruction instr, List<ILabel> labels, TupleLatticeElement<Variable,BooleanConstantLE> value)
           
 IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(CopyInstruction instr, List<ILabel> labels, TupleLatticeElement<Variable,BooleanConstantLE> value)
           
 IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(DotClassInstruction instr, List<ILabel> labels, TupleLatticeElement<Variable,BooleanConstantLE> value)
           
 IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(EnhancedForConditionInstruction instr, List<ILabel> labels, TupleLatticeElement<Variable,BooleanConstantLE> value)
           
 IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(InstanceofInstruction instr, List<ILabel> labels, TupleLatticeElement<Variable,BooleanConstantLE> value)
           
 IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(LoadArrayInstruction instr, List<ILabel> labels, TupleLatticeElement<Variable,BooleanConstantLE> value)
           
 IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(LoadFieldInstruction instr, List<ILabel> labels, TupleLatticeElement<Variable,BooleanConstantLE> value)
           
 IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(LoadLiteralInstruction instr, List<ILabel> labels, TupleLatticeElement<Variable,BooleanConstantLE> value)
           
 IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(MethodCallInstruction instr, List<ILabel> labels, TupleLatticeElement<Variable,BooleanConstantLE> value)
           
 IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(NewArrayInstruction instr, List<ILabel> labels, TupleLatticeElement<Variable,BooleanConstantLE> value)
           
 IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(NewObjectInstruction instr, List<ILabel> labels, TupleLatticeElement<Variable,BooleanConstantLE> value)
           
 IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(ReturnInstruction instr, List<ILabel> labels, TupleLatticeElement<Variable,BooleanConstantLE> value)
           
 IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(SourceVariableDeclaration instr, List<ILabel> labels, TupleLatticeElement<Variable,BooleanConstantLE> value)
           
 IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(SourceVariableReadInstruction instr, List<ILabel> labels, TupleLatticeElement<Variable,BooleanConstantLE> value)
           
 IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(StoreArrayInstruction instr, List<ILabel> labels, TupleLatticeElement<Variable,BooleanConstantLE> value)
           
 IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(StoreFieldInstruction instr, List<ILabel> labels, TupleLatticeElement<Variable,BooleanConstantLE> value)
           
 IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(UnaryOperation unop, List<ILabel> labels, TupleLatticeElement<Variable,BooleanConstantLE> value)
           
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ConstantTransferFunction

public ConstantTransferFunction()
Method Detail

getLatticeOperations

public ILatticeOperations<TupleLatticeElement<Variable,BooleanConstantLE>> 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.

Specified by:
getLatticeOperations in interface IFlowAnalysisDefinition<TupleLatticeElement<Variable,BooleanConstantLE>>
Returns:
lattice operations to be used for computing flow analysis results for a given method.

createEntryValue

public TupleLatticeElement<Variable,BooleanConstantLE> createEntryValue(MethodDeclaration m)
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.

Specified by:
createEntryValue in interface IFlowAnalysisDefinition<TupleLatticeElement<Variable,BooleanConstantLE>>
Parameters:
m - 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,BooleanConstantLE>>
Returns:
the direction of the analysis; never null.

setAnalysisContext

public void setAnalysisContext(ITACAnalysisContext analysisContext)
Description copied from interface: ITACBranchSensitiveTransferFunction
This method is used to pass a variable query interface to the transfer function. Transfer functions can, but do not have to, store the passed object in one of their fields for future use. The provided object can be used to find Variable objects for AST nodes.

Specified by:
setAnalysisContext in interface ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>
Parameters:
analysisContext - Interface to query for variables given AST nodes.

transfer

public IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(ArrayInitInstruction instr,
                                                                         List<ILabel> labels,
                                                                         TupleLatticeElement<Variable,BooleanConstantLE> value)
Specified by:
transfer in interface ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>

transfer

public IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(BinaryOperation binop,
                                                                         List<ILabel> labels,
                                                                         TupleLatticeElement<Variable,BooleanConstantLE> value)
Specified by:
transfer in interface ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>

transfer

public IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(CastInstruction instr,
                                                                         List<ILabel> labels,
                                                                         TupleLatticeElement<Variable,BooleanConstantLE> value)
Specified by:
transfer in interface ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>

transfer

public IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(DotClassInstruction instr,
                                                                         List<ILabel> labels,
                                                                         TupleLatticeElement<Variable,BooleanConstantLE> value)
Specified by:
transfer in interface ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>

transfer

public IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(ConstructorCallInstruction instr,
                                                                         List<ILabel> labels,
                                                                         TupleLatticeElement<Variable,BooleanConstantLE> value)
Specified by:
transfer in interface ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>

transfer

public IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(CopyInstruction instr,
                                                                         List<ILabel> labels,
                                                                         TupleLatticeElement<Variable,BooleanConstantLE> value)
Specified by:
transfer in interface ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>

transfer

public IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(InstanceofInstruction instr,
                                                                         List<ILabel> labels,
                                                                         TupleLatticeElement<Variable,BooleanConstantLE> value)
Specified by:
transfer in interface ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>

transfer

public IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(LoadLiteralInstruction instr,
                                                                         List<ILabel> labels,
                                                                         TupleLatticeElement<Variable,BooleanConstantLE> value)
Specified by:
transfer in interface ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>

transfer

public IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(LoadArrayInstruction instr,
                                                                         List<ILabel> labels,
                                                                         TupleLatticeElement<Variable,BooleanConstantLE> value)
Specified by:
transfer in interface ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>

transfer

public IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(LoadFieldInstruction instr,
                                                                         List<ILabel> labels,
                                                                         TupleLatticeElement<Variable,BooleanConstantLE> value)
Specified by:
transfer in interface ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>

transfer

public IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(MethodCallInstruction instr,
                                                                         List<ILabel> labels,
                                                                         TupleLatticeElement<Variable,BooleanConstantLE> value)
Specified by:
transfer in interface ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>

transfer

public IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(NewArrayInstruction instr,
                                                                         List<ILabel> labels,
                                                                         TupleLatticeElement<Variable,BooleanConstantLE> value)
Specified by:
transfer in interface ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>

transfer

public IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(NewObjectInstruction instr,
                                                                         List<ILabel> labels,
                                                                         TupleLatticeElement<Variable,BooleanConstantLE> value)
Specified by:
transfer in interface ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>

transfer

public IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(StoreArrayInstruction instr,
                                                                         List<ILabel> labels,
                                                                         TupleLatticeElement<Variable,BooleanConstantLE> value)
Specified by:
transfer in interface ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>

transfer

public IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(StoreFieldInstruction instr,
                                                                         List<ILabel> labels,
                                                                         TupleLatticeElement<Variable,BooleanConstantLE> value)
Specified by:
transfer in interface ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>

transfer

public IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(UnaryOperation unop,
                                                                         List<ILabel> labels,
                                                                         TupleLatticeElement<Variable,BooleanConstantLE> value)
Specified by:
transfer in interface ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>

transfer

public IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(SourceVariableDeclaration instr,
                                                                         List<ILabel> labels,
                                                                         TupleLatticeElement<Variable,BooleanConstantLE> value)
Specified by:
transfer in interface ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>

transfer

public IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(SourceVariableReadInstruction instr,
                                                                         List<ILabel> labels,
                                                                         TupleLatticeElement<Variable,BooleanConstantLE> value)
Specified by:
transfer in interface ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>

transfer

public IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(EnhancedForConditionInstruction instr,
                                                                         List<ILabel> labels,
                                                                         TupleLatticeElement<Variable,BooleanConstantLE> value)
Specified by:
transfer in interface ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>

transfer

public IResult<TupleLatticeElement<Variable,BooleanConstantLE>> transfer(ReturnInstruction instr,
                                                                         List<ILabel> labels,
                                                                         TupleLatticeElement<Variable,BooleanConstantLE> value)
Specified by:
transfer in interface ITACBranchSensitiveTransferFunction<TupleLatticeElement<Variable,BooleanConstantLE>>