+ /* Detect a dynamic doc string and save it for the next expression. */
+ if (c == '#')
+ {
+ c = getc (infile);
+ if (c == '@')
+ {
+ int length = 0;
+ int i;
+
+ /* Read the length. */
+ while ((c = getc (infile),
+ c >= '0' && c <= '9'))
+ {
+ length *= 10;
+ length += c - '0';
+ }
+
+ /* The next character is a space that is counted in the length
+ but not part of the doc string.
+ We already read it, so just ignore it. */
+ length--;
+
+ /* Read in the contents. */
+ if (saved_string != 0)
+ free (saved_string);
+ saved_string = (char *) malloc (length);
+ for (i = 0; i < length; i++)
+ saved_string[i] = getc (infile);
+ /* The last character is a ^_.
+ That is needed in the .elc file
+ but it is redundant in DOC. So get rid of it here. */
+ saved_string[length - 1] = 0;
+ /* Skip the newline. */
+ c = getc (infile);
+ while (c != '\n')
+ c = getc (infile);
+ }
+ continue;
+ }
+