Iterable<Instruction> (@NotNull CallEnvironment environment) { final Deque<CallInstruction> callStack = environment.callStack(this); if (callStack.isEmpty()) return Collections.emptyList(); //can be true in case env was not populated (e.g. by DFA) final CallInstruction callInstruction = callStack.peek(); final Iterable<Instruction> successors = callInstruction.allSuccessors(); final Deque<CallInstruction> copy = new ArrayDeque<>(callStack); copy.pop(); for (Instruction instruction : successors) { environment.update(copy, instruction); } return successors; }