public virtual int GetPointerByAbsOffset(int offset) { int absoffset = offset; if (collinstr.ContainsKey(absoffset)) { return(collinstr.GetIndexByKey(absoffset)); } else { return(-1); } }
private static IGraphNode GetCommonIDom(IGraphNode node1, IGraphNode node2, VBStyleCollection <IGraphNode, IGraphNode> orderedIDoms) { IGraphNode nodeOld; if (node1 == null) { return(node2); } else if (node2 == null) { return(node1); } int index1 = orderedIDoms.GetIndexByKey(node1); int index2 = orderedIDoms.GetIndexByKey(node2); while (index1 != index2) { if (index1 > index2) { nodeOld = node1; node1 = orderedIDoms.GetWithKey(node1); if (nodeOld == node1) { // no idom - root or merging point return(null); } index1 = orderedIDoms.GetIndexByKey(node1); } else { nodeOld = node2; node2 = orderedIDoms.GetWithKey(node2); if (nodeOld == node2) { // no idom - root or merging point return(null); } index2 = orderedIDoms.GetIndexByKey(node2); } } return(node1); }
public virtual void ReplaceStatement(Statement oldstat, Statement newstat) { foreach (StatEdge edge in oldstat.GetAllPredecessorEdges()) { oldstat.RemovePredecessor(edge); edge.GetSource().ChangeEdgeNode(Direction_Forward, edge, newstat); newstat.AddPredecessor(edge); } foreach (StatEdge edge in oldstat.GetAllSuccessorEdges()) { oldstat.RemoveSuccessor(edge); edge.SetSource(newstat); newstat.AddSuccessor(edge); } int statindex = stats.GetIndexByKey(oldstat.id); stats.RemoveWithKey(oldstat.id); stats.AddWithKeyAndIndex(statindex, newstat, newstat.id); newstat.SetParent(this); newstat.post = oldstat.post; if (first == oldstat) { first = newstat; } List <StatEdge> lst = new List <StatEdge>(oldstat.GetLabelEdges()); for (int i = lst.Count - 1; i >= 0; i--) { StatEdge edge = lst[i]; if (edge.GetSource() != newstat) { newstat.AddLabeledEdge(edge); } else if (this == edge.GetDestination() || this.ContainsStatementStrict(edge.GetDestination ())) { edge.closure = null; } else { this.AddLabeledEdge(edge); } } oldstat.GetLabelEdges().Clear(); }