docs: public boolean merge(final Frame<? extends V> frame,
              final Interpreter<V> interpreter) throws AnalyzerException {
          if (top != frame.top) {
              throw new AnalyzerException(null, "Incompatible stack heights");
          }
          boolean changes = false;
          for (int i = 0; i < locals + top; ++i) {
              V v = interpreter.merge(values[i], frame.values[i]);
              if (!v.equals(values[i])) {
                  values[i] = v;
                  changes = true;
              }
          }
          return changes;
      }