docs: private void lookForVariableAccess(OptFunctionNode fn, Node n)
      {
          switch (n.getType()) {
              case Token.TYPEOFNAME:
              {
                  // TYPEOFNAME may be used with undefined names, which is why
                  // this is handled separately from GETVAR above.
                  int varIndex = fn.fnode.getIndexForNameNode(n);
                  if (varIndex > -1 && !itsNotDefSet.get(varIndex))
                      itsUseBeforeDefSet.set(varIndex);
              }
              break;
              case Token.DEC :
              case Token.INC :
              {
                  Node child = n.getFirstChild();
                  if (child.getType() == Token.GETVAR) {
                      int varIndex = fn.getVarIndex(child);
                      if (!itsNotDefSet.get(varIndex))
                          itsUseBeforeDefSet.set(varIndex);
                      itsNotDefSet.set(varIndex);
                  } else {
                      lookForVariableAccess(fn, child);
                  }
              }
              break;
              case Token.SETVAR :
              case Token.SETCONSTVAR :
              {
                  Node lhs = n.getFirstChild();
                  Node rhs = lhs.getNext();
                  lookForVariableAccess(fn, rhs);
                  itsNotDefSet.set(fn.getVarIndex(n));
              }
              break;
              case Token.GETVAR :
              {
                  int varIndex = fn.getVarIndex(n);
                  if (!itsNotDefSet.get(varIndex))
                      itsUseBeforeDefSet.set(varIndex);
              }
              break;
              default :
                  Node child = n.getFirstChild();
                  while (child != null) {
                      lookForVariableAccess(fn, child);
                      child = child.getNext();
                  }
                  break;
          }
      }