public void setAnalyzedRange(final Statement start, final Statement end, final boolean startInclusive, final boolean endInclusive) { final Map<Statement, DefiniteAssignmentNode> startMap = startInclusive ? beginNodeMap : endNodeMap; final Map<Statement, DefiniteAssignmentNode> endMap = endInclusive ? endNodeMap : beginNodeMap; assert startMap.containsKey(start) && endMap.containsKey(end); final int startIndex = startMap.get(start).getIndex(); final int endIndex = endMap.get(end).getIndex(); if (startIndex > endIndex) { throw new IllegalStateException("The start statement must lexically precede the end statement."); } this.analyzedRangeStart = startIndex; this.analyzedRangeEnd = endIndex; }
public void setAnalyzedRange(final Statement start, final Statement end, final boolean startInclusive, final boolean endInclusive) { final Map<Statement, DefiniteAssignmentNode> startMap = startInclusive ? beginNodeMap : endNodeMap; final Map<Statement, DefiniteAssignmentNode> endMap = endInclusive ? endNodeMap : beginNodeMap; assert startMap.containsKey(start) && endMap.containsKey(end); final int startIndex = startMap.get(start).getIndex(); final int endIndex = endMap.get(end).getIndex(); if (startIndex > endIndex) { throw new IllegalStateException("The start statement must lexically precede the end statement."); } this.analyzedRangeStart = startIndex; this.analyzedRangeEnd = endIndex; }
public void setAnalyzedRange(final Statement start, final Statement end, final boolean startInclusive, final boolean endInclusive) { final Map<Statement, DefiniteAssignmentNode> startMap = startInclusive ? beginNodeMap : endNodeMap; final Map<Statement, DefiniteAssignmentNode> endMap = endInclusive ? endNodeMap : beginNodeMap; assert startMap.containsKey(start) && endMap.containsKey(end); final int startIndex = startMap.get(start).getIndex(); final int endIndex = endMap.get(end).getIndex(); if (startIndex > endIndex) { throw new IllegalStateException("The start statement must lexically precede the end statement."); } this.analyzedRangeStart = startIndex; this.analyzedRangeEnd = endIndex; }
private void changeEdgeStatus(final ControlFlowEdge edge, final DefiniteAssignmentStatus newStatus) { final DefiniteAssignmentStatus oldStatus = edgeStatus.get(edge); if (oldStatus == newStatus) { return; } // // Ensure that status cannot change after it is definitely assigned.. // if (oldStatus == DefiniteAssignmentStatus.DEFINITELY_ASSIGNED) { return; } // // Ensure that status cannot change back to unreachable after it was once reachable. // if (newStatus == DefiniteAssignmentStatus.CODE_UNREACHABLE || newStatus == DefiniteAssignmentStatus.ASSIGNED_AFTER_FALSE_EXPRESSION || newStatus == DefiniteAssignmentStatus.ASSIGNED_AFTER_TRUE_EXPRESSION) { throw new IllegalStateException("Illegal edge output status:" + newStatus); } edgeStatus.put(edge, newStatus); final DefiniteAssignmentNode targetNode = (DefiniteAssignmentNode) edge.getTo(); if (analyzedRangeStart <= targetNode.getIndex() && targetNode.getIndex() <= analyzedRangeEnd) { nodesWithModifiedInput.add(targetNode); } }
private void changeEdgeStatus(final ControlFlowEdge edge, final DefiniteAssignmentStatus newStatus) { final DefiniteAssignmentStatus oldStatus = edgeStatus.get(edge); if (oldStatus == newStatus) { return; } // // Ensure that status cannot change after it is definitely assigned.. // if (oldStatus == DefiniteAssignmentStatus.DEFINITELY_ASSIGNED) { return; } // // Ensure that status cannot change back to unreachable after it was once reachable. // if (newStatus == DefiniteAssignmentStatus.CODE_UNREACHABLE || newStatus == DefiniteAssignmentStatus.ASSIGNED_AFTER_FALSE_EXPRESSION || newStatus == DefiniteAssignmentStatus.ASSIGNED_AFTER_TRUE_EXPRESSION) { throw new IllegalStateException("Illegal edge output status:" + newStatus); } edgeStatus.put(edge, newStatus); final DefiniteAssignmentNode targetNode = (DefiniteAssignmentNode) edge.getTo(); if (analyzedRangeStart <= targetNode.getIndex() && targetNode.getIndex() <= analyzedRangeEnd) { nodesWithModifiedInput.add(targetNode); } }
private void changeEdgeStatus(final ControlFlowEdge edge, final DefiniteAssignmentStatus newStatus) { final DefiniteAssignmentStatus oldStatus = edgeStatus.get(edge); if (oldStatus == newStatus) { return; } // // Ensure that status cannot change after it is definitely assigned.. // if (oldStatus == DefiniteAssignmentStatus.DEFINITELY_ASSIGNED) { return; } // // Ensure that status cannot change back to unreachable after it was once reachable. // if (newStatus == DefiniteAssignmentStatus.CODE_UNREACHABLE || newStatus == DefiniteAssignmentStatus.ASSIGNED_AFTER_FALSE_EXPRESSION || newStatus == DefiniteAssignmentStatus.ASSIGNED_AFTER_TRUE_EXPRESSION) { throw new IllegalStateException("Illegal edge output status:" + newStatus); } edgeStatus.put(edge, newStatus); final DefiniteAssignmentNode targetNode = (DefiniteAssignmentNode) edge.getTo(); if (analyzedRangeStart <= targetNode.getIndex() && targetNode.getIndex() <= analyzedRangeEnd) { nodesWithModifiedInput.add(targetNode); } }