code: private void analyze(Analyzer analyzer,
                         boolean allowFlow,
                         IntArray pendingTargets,
                         IntArray completedTargets)
      throws Exception
    {
      pending:
      while (pendingTargets.size() > 0) {
        int pc = pendingTargets.pop();
  
        if (allowFlow) {
          if (completedTargets.contains(pc))
            continue pending;
  
          completedTargets.add(pc);
        }
  
        setOffset(pc);
  
        flow:
        do {
          pc = getOffset();
  
          if (pc < 0)
            throw new IllegalStateException();
      
          if (! allowFlow) {
            if (completedTargets.contains(pc))
              break flow;
  
            completedTargets.add(pc);
          }
  
          if (isBranch()) {
            int targetPC = getBranchTarget();
  
            if (! pendingTargets.contains(targetPC))
              pendingTargets.add(targetPC);
          }
          else if (isSwitch()) {
            int []switchTargets = getSwitchTargets();
  
            for (int i = 0; i < switchTargets.length; i++) {
              if (! pendingTargets.contains(switchTargets[i]))
                pendingTargets.add(switchTargets[i]);
            }
          }
  
          analyzer.analyze(this);
        } while (next());
      }
    }
docs: Analyzes the code for a basic block.