com.ibm.wala.cast.tree.impl
Class CAstControlFlowRecorder

java.lang.Object
  extended by com.ibm.wala.cast.tree.impl.CAstControlFlowRecorder
All Implemented Interfaces:
CAstControlFlowMap

public class CAstControlFlowRecorder
extends java.lang.Object
implements CAstControlFlowMap

An implementation of a CAstControlFlowMap that is designed to be used by producers of CAPA asts. In addition to implementing the control flow map, it additionally allows clients to record control flow mappings in terms of some arbitrary type object that are then mapped to CAstNodes by the client. These objects can be anything, but one common use is that some type of parse tree is walked to build a capa ast, with control flow being recorded in terms of parse tree nodes and then ast nodes being mapped to parse tree nodes. Note that, at present, support for mapping control flow on ast nodes directly is clunky. It is necessary to establish that an ast nodes maps to itself, i.e. call xx.map(node, node).


Field Summary
 
Fields inherited from interface com.ibm.wala.cast.tree.CAstControlFlowMap
EXCEPTION_TO_EXIT, SWITCH_DEFAULT
 
Constructor Summary
CAstControlFlowRecorder(CAstSourcePositionMap src)
           
 
Method Summary
 void add(java.lang.Object from, java.lang.Object to, java.lang.Object label)
          Add a control-flow edge from the `from' node to the `to' node with the (possibly null) label `label'.
 java.util.Collection<CAstNode> getMappedNodes()
          Returns an iterator of all CAstNodes for which this map contains control flow mapping information.
 java.util.Collection getSourceNodes(CAstNode to)
          Return a collection of control-flow ast nodes that have this one as a possible target.
 CAstNode getTarget(CAstNode from, java.lang.Object label)
          Return the target ast node of the control-flow instruction denoted by from with respect to the given label.
 java.util.Collection getTargetLabels(CAstNode from)
          Return a collection of all labels for which the control-flow ast node from has a target.
 void map(java.lang.Object node, CAstNode ast)
          Establish a mapping between some object `node' and the ast node `ast'.
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

CAstControlFlowRecorder

public CAstControlFlowRecorder(CAstSourcePositionMap src)
Method Detail

getTarget

public CAstNode getTarget(CAstNode from,
                          java.lang.Object label)
Description copied from interface: CAstControlFlowMap
Return the target ast node of the control-flow instruction denoted by from with respect to the given label.

Specified by:
getTarget in interface CAstControlFlowMap

getTargetLabels

public java.util.Collection getTargetLabels(CAstNode from)
Description copied from interface: CAstControlFlowMap
Return a collection of all labels for which the control-flow ast node from has a target.

Specified by:
getTargetLabels in interface CAstControlFlowMap

getSourceNodes

public java.util.Collection getSourceNodes(CAstNode to)
Description copied from interface: CAstControlFlowMap
Return a collection of control-flow ast nodes that have this one as a possible target.

Specified by:
getSourceNodes in interface CAstControlFlowMap

getMappedNodes

public java.util.Collection<CAstNode> getMappedNodes()
Description copied from interface: CAstControlFlowMap
Returns an iterator of all CAstNodes for which this map contains control flow mapping information.

Specified by:
getMappedNodes in interface CAstControlFlowMap

add

public void add(java.lang.Object from,
                java.lang.Object to,
                java.lang.Object label)
Add a control-flow edge from the `from' node to the `to' node with the (possibly null) label `label'. These nodes must be mapped by the client to CAstNodes using the `map' call; this mapping can happen before or after this add call.


map

public void map(java.lang.Object node,
                CAstNode ast)
Establish a mapping between some object `node' and the ast node `ast'. Objects used a endpoints in a control flow edge must be mapped to ast nodes using this call.


toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object