private void updateThrowPaths(State state) {
    List<EKey> throwKeys = interpreter.throwKeys;
    interpreter.throwKeys = null;
    if (myThrowKeys == null) return;
    Set<EKey> prevKeys = myThrowKeys.remove(state);
    if (myNextStates.isEmpty()) {
      updateFinalKeys(prevKeys);
      return;
    }
    if (prevKeys == null || prevKeys.isEmpty()) {
      prevKeys = throwKeys != null ? Set.copyOf(throwKeys) : Collections.emptySet();
    } else {
      if (throwKeys != null && !throwKeys.isEmpty()) {
        prevKeys = new HashSet<>(prevKeys);
        prevKeys.addAll(throwKeys);
        if (prevKeys.size() > 8) {
          myThrowKeys = null;
          return;
        }
      }
    }
    for (State next : myNextStates) {
      myThrowKeys.put(next, prevKeys);
    }
  }
private void updateThrowPaths(State state)