<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _update_bytes(self, defns, start=0):
 """Updates the 'bytes' field in all FieldDefinition. Any FieldDefinition.bytes which is undefined (None) or '@prev' will have its bytes field computed based on its data type size and where the previous FieldDefinition ended (or the start parameter in the case of very first FieldDefinition). If bytes is set to '@prev', this has the effect of *starting* the FieldDefinition at the same place as the *previous* FieldDefinition. This reads well in YAML, e.g.: bytes: '@prev' Returns the end of the very last FieldDefinition in Python slice notation, i.e. [start, stop). This would correspond to the *start* of the next FieldDefinition, if it existed. """


        pos = slice(start, start)
        for fd in defns:
            if fd.bytes == '@prev' or fd.bytes is None:
                if fd.bytes == '@prev':
                    fd.bytes = None
                    pos      = fd.slice(pos.start)
                elif fd.bytes is None:
                    pos      = fd.slice(pos.stop)
                if pos.start == pos.stop - 1:
                    fd.bytes = pos.start
                else:
                    fd.bytes = [ pos.start, pos.stop - 1 ]
            pos = fd.slice()
        return pos.stop