code: private void sawBranch(int seen, int pc) {
          int target = getBranchTarget();
          if (target > pc) {
              if ((seen == Const.GOTO) || (seen == Const.GOTO_W)) {
                  int nextPC = getNextPC();
                  if (!switchTargets.get(nextPC)) {
                      ScopeBlock sb = findScopeBlockWithTarget(rootScopeBlock, pc, nextPC);
                      if (sb == null) {
                          sb = new ScopeBlock(pc, target);
                          sb.setLoop();
                          sb.setGoto();
                          rootScopeBlock.addChild(sb);
                      } else {
                          sb = new ScopeBlock(nextPC, target);
                          sb.setGoto();
                          rootScopeBlock.addChild(sb);
                      }
                  }
              } else {
                  ScopeBlock sb = findScopeBlockWithTarget(rootScopeBlock, pc, target);
                  if ((sb != null) && !sb.isLoop() && !sb.isCase() && !sb.hasChildren()) {
                      if (sb.isGoto()) {
                          ScopeBlock parent = sb.getParent();
                          sb.pushUpLoadStores();
                          if (parent != null) {
                              parent.removeChild(sb);
                          }
                          sb = new ScopeBlock(pc, target);
                          rootScopeBlock.addChild(sb);
                      } else {
                          sb.pushUpLoadStores();
                          sb.setStart(pc);
                      }
                  } else {
                      sb = new ScopeBlock(pc, target);
                      rootScopeBlock.addChild(sb);
                  }
              }
          } else {
              ScopeBlock sb = findScopeBlock(rootScopeBlock, pc);
              if (sb != null) {
                  ScopeBlock parentSB = sb.getParent();
                  while (parentSB != null) {
                      if (parentSB.getStart() >= target) {
                          sb = parentSB;
                          parentSB = parentSB.getParent();
                      } else {
                          break;
                      }
                  }
  
                  if (sb.getStart() > target) {
                      ScopeBlock previous = findPreviousSiblingScopeBlock(sb);
                      if ((previous != null) && (previous.getStart() >= target)) {
                          sb = previous;
                      }
                  }
                  sb.setLoop();
              }
          }
      }
docs: creates a scope block to describe this branch location.
  
  @param seen
  the currently parsed opcode
  @param pc
  the current program counter