+buffer and all are integers or @code{nil} if matching was done on a
+string with @code{string-match}. If @var{integers} is
+non-@code{nil}, then the elements are integers or @code{nil}, even if
+matching was done on a buffer. In that case, the buffer itself is
+appended as an additional element at the end of the list
+to facilitate complete restoration of the match data. Also,
+@code{match-beginning} and
+@code{match-end} always return integers or @code{nil}.
+
+If @var{reuse} is non-@code{nil}, it should be a list. In that case,
+@code{match-data} stores the match data in @var{reuse}. That is,
+@var{reuse} is destructively modified. @var{reuse} does not need to
+have the right length. If it is not long enough to contain the match
+data, it is extended. If it is too long, the length of @var{reuse}
+stays the same, but the elements that were not used are set to
+@code{nil}. The purpose of this feature is to avoid producing too
+much garbage, that would later have to be collected.