         delete        @padding
         @repeat       = @pattern[@patternIndex].repeat
         @terminated   = not @pattern[@patternIndex].terminator
+        @terminates   = not @terminated
         @index        = 0
 
         @nextValue()

            return offset - start if offset is end

      # If we have not terminated, check for the termination state change.
      # Termination will simply change the loop settings, so types that have no
      # terminater start out as terminated, and this does nothing.
      if not @terminated
        if @pattern[@patternIndex].terminator.charCodeAt(0) == @value
          @terminated = true
          if @repeat == Number.MAX_VALUE
            @repeat = @index + 1
          else if @pattern[@patternIndex].padding?
            @padding = @pattern[@patternIndex].padding
          else
            @skipping = (@repeat - (++@index)) * @pattern[@patternIndex].bytes
            if @skipping
              @repeat = @index + 1
              continue

      # If we are reading an arrayed pattern and we have not read all of the
      # array elements, we repeat the current field type.

    if pattern.endianness is "x" and not @padding?
        @skipping = pattern.bytes
    else
      if @padding?
        value = @padding
      else if pattern.arrayed
