code: 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;
      }
docs: Get the dataflow fact representing the point just before given Location.
  Note "before" is meant in the logical sense, so for backward analyses,
  before means after the location in the control flow sense.
  
  @return the fact at the point just before the location