docs: public FrameType getFactBeforeExceptionCheck(CFG cfg, int pc) throws DataflowAnalysisException {
          FrameType result = createFact();
          makeFactTop(result);
  
          for (Location loc : cfg.getLocationsContainingInstructionWithOffset(pc)) {
              BasicBlock b = loc.getBasicBlock();
              BasicBlock b2 = null;
              if (b.getFirstInstruction() != null && b.getFirstInstruction().getPosition() == pc) {
                  b2 = cfg.getPredecessorWithEdgeType(b, EdgeTypes.FALL_THROUGH_EDGE);
              }
              if(b2 != null && b2.isExceptionThrower()) {
                  for (Iterator<Edge> i = cfg.incomingEdgeIterator(b2); i.hasNext();) {
                      Edge e = i.next();
                      FrameType fact = getFactOnEdge(e);
                      if (isFactValid(fact)) {
                          mergeInto(fact, result);
                      }
                  }
              } else {
                  FrameType fact = getFactAtLocation(loc);
                  if (isFactValid(fact)) {
                      mergeInto(fact, result);
                  }
              }
          }
          return result;
      }