Previously, the format was ad-hoc and implicitly defined by
doc/manual/docstrings.lisp. Now, it is a bit less ad-hoc and still
implicitly defined docstrings.lisp.
The syntax is now a simple, strict subset of Markdown with escaping
extensions. The long comment near the top of docstrings.lisp has the
documentation.
Some notable changes:
- Markdown backticks are supported (e.g. `exit`(3),
`/usr/local/bin/`).
- When the heuristic codification is overly eager, use backslashes to
prevent codification (e.g. \\HTTP, where the backslash is doubled
assuming that this is in a docstring).
- It is now possible to have code that's not downcased
(`\\\\AC_LOCAL`, backslashes doubled again).
- Fenced code blocks are supported (but use them sparingly).
- Texinfo @itemize is used instead of @table.
- Texinfo @var was inconsistently used at best. What used to be @var
is now simply @code.
For the user, the most visible effect of this change is that the
manual has much fewer errors in codification, and a few docstrings
have backticks and escapes in them, which should be acceptably
readable in the sources or via CL:DOCUMENTATION.
This fixes the ANSI non-compliance passed down from early
CMUCL (1991-10-31). The bug was that FDEFINITION did not return the
same value as SYMBOL-FUNCTION for symbols (lp#799533). The fix is an
incompatible change but only affects encapsulated (e.g. TRACEd and
SP-PROFILE:PROFILEd) non-generic functions.
However, encapsulations belong to the definition (the name) and not to
the function associated with the name, so (SETF (FDEFINITION NAME) FN)
strips encapsulations from FN and keeps the encapsulations of NAME.
- SB-EXT:UNENCAPSULATED-FUNCTION was added.
- Encapsulated functions are printed as
#<FUNCTION FOO ENCAPSULATED>
or, if they have no proper name, as
#<FUNCTION FOO ENCAPSULATED {B1782332}>
This is the same as for unencapsulated functions except for the
additional " ENCAPSULATED".
- Unused slots were removed from SB-PROFILE:PROFILE-INFO.
- Since generic function identity is stable in face of encapsulation,
CLOS is largely unaffected by this change.
We should not make generalized instances of TYPE-ERROR with unbound
DATUM or EXPECTED-TYPE, or where the DATUM is actually of type
EXPECTED-TYPE. With #+sb-devel, provide a special variable to check
for mismatch when creating the condition, and turn that switch on when
running tests.
Fix the issues that this reveals:
- in sequence-related code, make sure any errors relating to the
length mismatch between expressed type and sequence length have a
precise size if appropriate.
- also in sequence-related code, special-case the NIL sequence type
specifier, which is a recognizable subtype of LIST and VECTOR and
yet not a good type for making sequences.
(arguably the type error that the standard "expects" us to signal
for the bad cases of MAKE-SEQUENCE and friends is that the
constructed sequence is not of the type given by the type specifier,
rather than that the type specifier is not of some strange
VALID-MAKE-SEQUENCE-TYPE-SPECIFIER type. However, that's not what
we currently have.)
- in stream-related code, make new predicates for
{BINARY,CHARACTER}-{INPUT-OUTPUT}-STREAM-P and use them in the ILL-X
stream functions.
- make the PCL-internal MISSING-SLOT condition not be a TYPE-ERROR.
- make accessing an uninitialized structure slot, from &AUX arguments
in BOA constructors with no defaults, not be a type error (according
to the standard, accessing an uninitialized slot is undefined
behaviour).
Before this change, the wrong variable was checked for the presence of
the KEYWORD package so that no error was signaled.
The test :USE-KEYWORD-NOPE was designed to test this behavior but
didn't catch the regression because the specific test case
(use-package "KEYWORD" "CL-USER")
/did/ signal an error, but not the right one. The wrong error was a
NAME-CONFLICT between :IF and CL:IF.
Do not do anything in the :LOAD-TOPLEVEL case (the common case for
requiring the sb-md5 contrib module). Also undo the compiler policy
restriction used to compile the md5 routines at the end of the file.
In order to track whether a path has already emitted a coverage mark
in a given block, rather than have a hash-table keyed on paths with a
list of blocks as the value, give each block for which coverage is
emitted at all a table of source paths to act as a set. This means
that there are no additional links to blocks during compilation, which
therefore means that they don't cause retention of their component,
which would otherwise transitively retains a whole heap of IR2
structure.
(This allows a build storing coverage marks for the system itself to
complete in a host lisp with a dynamic-space-size of 700MB, as used in
builds in github's CI.)