code: private static boolean isScopingOrBranchingConstruct(Node node) {
      return NodeUtil.isControlStructure(node) // Branching.
          || node.isAnd() // Branching.
          || node.isOr() // Branching.
          || node.isFunction() // Branching & scoping.
          || node.isBlock(); // Scoping.
    }
docs: Returns {@code true} iff a node may change the variable bindings of its subtree or cause that
  subtree to be executed not exactly once.
  
  <p>This method does not include CLASS because CLASS does not always create a new binding and it
  is important for the success of this optimization to consider class methods.
  
  @see {@link #localNameIsDeclaredByClass()}