@Override
      public void visitCallInstruction(CallInstruction instruction, int offset, int nextOffset) {
        int newOffset = instruction.offset;
        // 'procedure' pointed by call instruction should be processed regardless of whether it was already visited or not
        // clear procedure text and return instructions afterwards
        int i;
        for (i = instruction.procBegin;
             i < clientVisitor.processedInstructions.length &&
             (i < instruction.procEnd || i < instructions.size() && instructions.get(i) instanceof ReturnInstruction); i++) {
          clientVisitor.processedInstructions[i] = false;
        }
        clientVisitor.procedureEntered(instruction.procBegin, i);
        walkThroughStack.currentStack = new CallStackItem(walkThroughStack.currentStack, offset + 1);
        walkThroughStack.push(offset, newOffset);
        walkThroughStack.push(newOffset);
      }
@Override
      public void visitCallInstruction(CallInstruction instruction, int offset, int nextOffset)