• Stefan Monnier's avatar
    bytecomp.el: Rewrite the way we print dynamic docstrings · e9a66827
    Stefan Monnier authored
    We used to print dynamic docstrings "manually" for two reasons:
    
    - References should look like `(#$ . POS)` but `prin1` was unable
      to print just `#$` for an sexp.
    - `make-docfile` needed to find those docstrings and the object
      to which they belonged.
    
    The second point is moot now that we don't use `make-docfile` on
    `.elc` files.  So this patch lifts the first restriction,
    using `print-number-table`.
    
    The rest of the patch then simplifies and regularises the
    bytecompiler's generation of dynamic docstrings, which can
    now also easily be done for "inner" defvars and other places.
    
    * src/print.c (print_preprocess, print_object): Handle strings in
    `print-number-table`.
    (Vprint_number_table): Improve docstring.
    
    * lisp/emacs-lisp/bytecomp.el:
    (byte-compile--list-with-n): New function.
    (byte-compile--docstring-style-warn): Rename from
    `byte-compile-docstring-style-warn` and change calling convention.
    (byte-compile--\#$, byte-compile--docstrings): New vars.
    (byte-compile-close-variables): Bind them.
    (byte-compile--docstring): New function.
    (byte-compile-from-buffer): Set `byte-compile--\#$`.
    (byte-compile-output-file-form): Use `byte-compile--\#$` instead
    of special casing specific forms.
    (byte-compile--output-docform-recurse, byte-compile-output-docform):
    Delete functions.
    (byte-compile-file-form-autoload, byte-compile-file-form-defalias)
    (byte-compile-file-form-defvar-function, byte-compile-lambda):
    Use `byte-compile--docstring` and `byte-compile--list-with-n`.
    (byte-compile--declare-var): Add optional `not-toplevel` arg.
    (byte-compile-defvar): Add `toplevel` arg.  Use `byte-compile--docstring`.
    (byte-compile-file-form-defvar): Delegate to `byte-compile-defvar`.
    (byte-compile--custom-declare-face): New function.  Use it for
    `custom-declare-face`.
    (byte-compile-file-form-defmumble): Use `byte-compile-output-file-form`
    
    * src/doc.c (Fdocumentation_stringp): New function.
    (syms_of_doc): Defsubr it.
    (store_function_docstring): Remove left-over code from when we
    used DOC for the docstring of some Lisp files.
    
    * lisp/cus-face.el (custom-declare-face): Accept dynamic docstrings.
    * lisp/faces.el (face-documentation): Handle dynamic docstrings.
    * lisp/help-fns.el (describe-face): Simplify accordingly.
    e9a66827