Indexes the `Pointer` field and the :attr:`data` object referenced
        by the `Pointer` field starting with the given *index* and returns the
        :class:`Index` after the `Pointer` field.

        :param Index index: :class:`Index` for the `Pointer` field.
        :keyword bool nested: if ``True`` all :class:`Pointer` fields in the
            :attr:`data` object referenced by the `Pointer` field indexes their
            referenced :attr:`~Pointer.data` object fields as well
            (chained method call).

def index_fields(self, index=Index(), **options):
        """ Indexes the `Pointer` field and the :attr:`data` object referenced
        by the `Pointer` field starting with the given *index* and returns the
        :class:`Index` after the `Pointer` field.

        :param Index index: :class:`Index` for the `Pointer` field.
        :keyword bool nested: if ``True`` all :class:`Pointer` fields in the
            :attr:`data` object referenced by the `Pointer` field indexes their
            referenced :attr:`~Pointer.data` object fields as well
            (chained method call).
        """
        index = self.index_field(index)

        # Container
        if is_container(self._data):
            self._data.index_fields(Index(0, 0,
                                          self.address, self.base_address,
                                          False),
                                    **options)
        # Pointer
        elif is_pointer(self._data) and get_nested(options):
            self._data.index_fields(Index(0, 0,
                                          self.address, self.base_address,
                                          False),
                                    **options)
        # Field
        elif is_field(self._data):
            self._data.index_field(Index(0, 0,
                                         self.address, self.base_address,
                                         False))
        return index