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;
}

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 ; }
merges this frame with the given frame .
