code: public void addCatchClause(TypeId<? extends Throwable> toCatch, Label catchClause) {
          if (catchTypes.contains(toCatch)) {
              throw new IllegalArgumentException("Already caught: " + toCatch);
          }
          adopt(catchClause);
          catchTypes.add(toCatch);
          catches = toTypeList(catchTypes);
          catchLabels.add(catchClause);
      }
docs: Registers {@code catchClause} as a branch target for all instructions
  in this frame that throw a class assignable to {@code toCatch}. This
  includes methods invoked from this frame. Deregister the clause using
  {@link #removeCatchClause removeCatchClause()}. It is an error to
  register a catch clause without also {@link #mark marking it} in the same
  {@code Code} instance.