Package soot.jimple.spark.geom.geomPA
Class IVarAbstraction
- java.lang.Object
-
- soot.jimple.spark.geom.geomPA.IVarAbstraction
-
- All Implemented Interfaces:
Numberable
- Direct Known Subclasses:
DummyNode,FullSensitiveNode,HeapInsNode,PtInsNode
public abstract class IVarAbstraction extends Object implements Numberable
Pointer/object representation in geomPTA. This interface defines the operations needed for manipulating a pointer/object.- Author:
- xiao
-
-
Field Summary
Fields Modifier and Type Field Description protected static IFigureManagerdeadManagerintidintlrf_valueNodemeprotected IVarAbstractionparentprotected static RectangleNodepresintQposprotected static IFigureManagerstubManagerinttop_valuebooleanwillUpdate
-
Constructor Summary
Constructors Constructor Description IVarAbstraction()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description abstract booleanadd_points_to_3(AllocNode obj, long I1, long I2, long L)abstract booleanadd_points_to_4(AllocNode obj, long I1, long I2, long L1, long L2)abstract booleanadd_simple_constraint_3(IVarAbstraction qv, long I1, long I2, long L)abstract booleanadd_simple_constraint_4(IVarAbstraction qv, long I1, long I2, long L1, long L2)abstract intcount_flow_intervals(IVarAbstraction qv)abstract intcount_new_pts_intervals()abstract intcount_pts_intervals(AllocNode obj)abstract voiddeleteAll()abstract voiddo_after_propagation()abstract voiddo_before_propagation()abstract voiddrop_duplicates()SootMethodenclosingMethod()abstract voidget_all_context_sensitive_objects(long l, long r, PtSensVisitor visitor)Given the pointers falling in the context range [l, r), we compute the set of context sensitive objects pointed to by those pointers.abstract Set<AllocNode>get_all_points_to_objects()Obtain context insensitive points-to result (by removing contexts).intgetNumber()IVarAbstractiongetRepresentative()TypegetType()NodegetWrappedNode()Processing the wrapped SPARK node.booleanhasPTResult()Test if this pointer currently has points-to result.abstract booleanheap_sensitive_intersection(IVarAbstraction qv)Perform context sensitive alias checking with qv.abstract voidinjectPts()abstract booleanisDeadObject(AllocNode obj)Test if the particular object has been obsoleted.booleanisLocalPointer()abstract voidkeepPointsToOnly()booleanlessThan(IVarAbstraction other)Used by ordering the nodes in priority worklist.IVarAbstractionmerge(IVarAbstraction other)Make the variable other be the parent of this variable.abstract intnum_of_diff_edges()abstract intnum_of_diff_objs()Return -1 if this pointer does not have points-to information.abstract booleanpointer_interval_points_to(long l, long r, AllocNode obj)Test if the pointer in the context range [l, R) points to object obj.abstract voidprint_context_sensitive_points_to(PrintStream outPrintStream)abstract voidpropagate(GeomPointsTo ptAnalyzer, IWorklist worklist)abstract voidput_complex_constraint(PlainConstraint cons)booleanreachable()This pointer/object is reachable if its enclosing method is reachable.abstract voidreconstruct()abstract voidremove_points_to(AllocNode obj)voidsetNumber(int number)StringtoString()
-
-
-
Field Detail
-
stubManager
protected static IFigureManager stubManager
-
deadManager
protected static IFigureManager deadManager
-
pres
protected static RectangleNode pres
-
me
public Node me
-
id
public int id
-
Qpos
public int Qpos
-
willUpdate
public boolean willUpdate
-
top_value
public int top_value
-
lrf_value
public int lrf_value
-
parent
protected IVarAbstraction parent
-
-
Method Detail
-
lessThan
public boolean lessThan(IVarAbstraction other)
Used by ordering the nodes in priority worklist.
-
getRepresentative
public IVarAbstraction getRepresentative()
-
merge
public IVarAbstraction merge(IVarAbstraction other)
Make the variable other be the parent of this variable.- Parameters:
other-- Returns:
-
setNumber
public void setNumber(int number)
- Specified by:
setNumberin interfaceNumberable
-
getNumber
public int getNumber()
- Specified by:
getNumberin interfaceNumberable
-
reachable
public boolean reachable()
This pointer/object is reachable if its enclosing method is reachable. Pleas always call this method to check the status before querying points-to information.
-
hasPTResult
public boolean hasPTResult()
Test if this pointer currently has points-to result. The result can be computed in the last iteration of geomPTA, although its willUpdate = false this round.
-
getWrappedNode
public Node getWrappedNode()
Processing the wrapped SPARK node.
-
getType
public Type getType()
-
isLocalPointer
public boolean isLocalPointer()
-
enclosingMethod
public SootMethod enclosingMethod()
-
add_points_to_3
public abstract boolean add_points_to_3(AllocNode obj, long I1, long I2, long L)
-
add_points_to_4
public abstract boolean add_points_to_4(AllocNode obj, long I1, long I2, long L1, long L2)
-
add_simple_constraint_3
public abstract boolean add_simple_constraint_3(IVarAbstraction qv, long I1, long I2, long L)
-
add_simple_constraint_4
public abstract boolean add_simple_constraint_4(IVarAbstraction qv, long I1, long I2, long L1, long L2)
-
put_complex_constraint
public abstract void put_complex_constraint(PlainConstraint cons)
-
reconstruct
public abstract void reconstruct()
-
do_before_propagation
public abstract void do_before_propagation()
-
do_after_propagation
public abstract void do_after_propagation()
-
propagate
public abstract void propagate(GeomPointsTo ptAnalyzer, IWorklist worklist)
-
drop_duplicates
public abstract void drop_duplicates()
-
remove_points_to
public abstract void remove_points_to(AllocNode obj)
-
deleteAll
public abstract void deleteAll()
-
keepPointsToOnly
public abstract void keepPointsToOnly()
-
injectPts
public abstract void injectPts()
-
num_of_diff_objs
public abstract int num_of_diff_objs()
Return -1 if this pointer does not have points-to information. This function can be used for testing if the pointer has been processed by geomPTA.
-
num_of_diff_edges
public abstract int num_of_diff_edges()
-
count_pts_intervals
public abstract int count_pts_intervals(AllocNode obj)
-
count_new_pts_intervals
public abstract int count_new_pts_intervals()
-
count_flow_intervals
public abstract int count_flow_intervals(IVarAbstraction qv)
-
heap_sensitive_intersection
public abstract boolean heap_sensitive_intersection(IVarAbstraction qv)
Perform context sensitive alias checking with qv.- Parameters:
qv-- Returns:
-
pointer_interval_points_to
public abstract boolean pointer_interval_points_to(long l, long r, AllocNode obj)Test if the pointer in the context range [l, R) points to object obj.- Parameters:
l-r-obj-- Returns:
-
isDeadObject
public abstract boolean isDeadObject(AllocNode obj)
Test if the particular object has been obsoleted. It's mainly for points-to developer use.- Parameters:
obj-- Returns:
-
get_all_points_to_objects
public abstract Set<AllocNode> get_all_points_to_objects()
Obtain context insensitive points-to result (by removing contexts).- Returns:
-
get_all_context_sensitive_objects
public abstract void get_all_context_sensitive_objects(long l, long r, PtSensVisitor visitor)Given the pointers falling in the context range [l, r), we compute the set of context sensitive objects pointed to by those pointers. This function is designed in visitor pattern.- See Also:
Obj_1cfa_extractor,Obj_full_extractor
-
print_context_sensitive_points_to
public abstract void print_context_sensitive_points_to(PrintStream outPrintStream)
-
-