void (int insn, MyInterpreter interpreter) { boolean changes = false; Data oldData = data[insn]; Data newData = interpreter.getAfterData(insn); if (oldData == null) { data[insn] = newData; changes = true; } else if (newData != null) { Data mergedData = interpreter.merge(oldData, newData); data[insn] = mergedData; changes = !oldData.equals(mergedData); } if (changes && !queued[insn]) { queued[insn] = true; queue[top++] = insn; } }