void (@NotNull InstructionKey fromKey) { if (fromKey.getOffset() >= myInstructions.size()) return; final Instruction instruction = myInstructions.get(fromKey.getOffset()); if (instruction instanceof CallInstruction) { int nextOffset = ((CallInstruction)instruction).offset; LOG.assertTrue(nextOffset != 0); int returnOffset = fromKey.getOffset() + 1; InstructionKey nextKey = fromKey.push(nextOffset, returnOffset); myWalkThroughStack.push(fromKey, nextKey); } else if (instruction instanceof ReturnInstruction) { int overriddenOffset = ((ReturnInstruction)instruction).offset; InstructionKey nextKey = fromKey.pop(overriddenOffset); myWalkThroughStack.push(fromKey, nextKey); } else { for (int no = 0; no != instruction.nNext(); no++) { final int nextOffset = instruction.getNext(fromKey.getOffset(), no); InstructionKey nextKey = fromKey.next(nextOffset); myWalkThroughStack.push(fromKey, nextKey); } } }