class SideEffectsAnalysis.VisibilityLocationAbstraction {
/**
* Return true if the storage node is an r-value.
*/
private static boolean storageNodeIsRValue(Node node) {
Preconditions.checkArgument(isStorageNode(node));
// We consider all names to be r-values unless
// LHS of Token.ASSIGN
// LHS of of for in expression
// Child of VAR
Node parent = node.getParent();
if (storageNodeIsLValue(node)) {
// Assume l-value is NOT an r-value
// unless it is a non-simple assign
// or an increment/decrement
boolean nonSimpleAssign =
NodeUtil.isAssignmentOp(parent) && parent.getType() != Token.ASSIGN;
return (nonSimpleAssign
|| parent.getType() == Token.DEC
|| parent.getType() == Token.INC);
}
return true;
}
}
|