final Node<V> advance() {
          Node<V> e;
          if ((e = next) != null)
              e = e.next;
          for (;;) {
              Node<V>[] t; int i, n;  // must use locals in checks
              if (e != null)
                  return next = e;
              if (baseIndex >= baseLimit || (t = tab) == null ||
                  (n = t.length) <= (i = index) || i < 0)
                  return next = null;
              if ((e = tabAt(t, i)) != null && e.hash < 0) {
                  if (e instanceof ForwardingNode) {
                      tab = ((ForwardingNode<V>)e).nextTable;
                      e = null;
                      pushState(t, i, n);
                      continue;
                  }
                  else if (e instanceof TreeBin)
                      e = ((TreeBin<V>)e).first;
                  else
                      e = null;
              }
              if (stack != null)
                  recoverState(n);
              else if ((index = i + baseSize) >= n)
                  index = ++baseIndex; // visit upper slots if present
          }
      }
final Node<V> advance()