Other Xref functions (WHO-CALLS etc.) are very liberal at what they accept as input. Adjust the two new Xref functions WHO-SPECIALIZES-DIRECTLY and WHO-SEPCIALIZES-GENERALLY accordingly.
A stray backquote caused compilation warnings and run-time errors if, within a method, a symbol macro with a type declaration was given a new value with SETQ. Fixes bug #485019, reported by Iban Hatchondo
Special-case the hairy type (SATISFIES KEYWORDP) and its interaction with the SYMBOL type. (We could potentially be cleverer at this point and additionally tell the system that all non-symbols are non-(SATISFIES KEYWORDP) types, but we're somewhat late in the development cycle now) Fixes bug #485972
* It wasn't going to work right in any case, so better to refuse up front. * Remove invalid FIXME from globaldb.lisp: DO-INFO is also used by SB-INTROSPECT.
...that was not supposed to go in! *blush*
* Define +HIGHEST-NORMAL-GENERATION+ and +PSEUDO-STATIC-GENERATION+ in lisp, and let genesis tell C about them. * Make various generations[gen].foo tweakable from lisp, give them nice interface functions and document the same. * Bits of manual prettification in related parts.
…array)) Taken to mean the <array-type> with COMPLEXP T (rather than :MAYBE). Adjust the type test transform to use the old technique for testing for complex arrays (using an explicit (NOT SIMPLE-ARRAY) test rather than a full call to %TYPEP, as you would otherwise get; this is a KLUDGE, but no worse than before). Include a test case for bug #309129, which this fixes.
Enabling :sb-xref-for-internals in customize-target-features.lisp, will make Sbcl collect Xref data about itself during the build. This increases the core size drastically by about 5-6mb, but it's useful for SBCL developers because they can now use M-? (slime-edit-uses) to get a list of call/expansion/reference sites for internal stuff. It may be interesting to Lisp advocacy who can now show off with finding the use sites of standardized functions like CONS, etc. :-) Additionally -- regardless of :sb-xref-for-internals --, we now also collect xref data for keywords because they're "fine" names for functions and macros, and I know of people who use MACROLET on keywords for their DSLs.
Whoops. The external-format changes broke read-char-no-hang after an unread-char: very noticeable indeed just as soon as an error occurs in slime. In my defence, this was already broken on bivalent streams; I just propagated that brokenness to all fd-streams. Include a run-program-based test, because that produces the kind of streams that can have no data and yet not be at EOF. In the slime context, they're sockets, so it's a bit difficult to test the slime case exactly; ideas for good simulations welcome.
…ult values Fasdumping of a function arglist was breaking if there was a structure or other instance as a default value because the arglist wasn't processed for dumping as a literal constant. * Process the arglist for dumping as a literal constant when creating entry-info for external entry points. This is https://bugs.launchpad.net/sbcl/+bug/310132 .
* Allows unboxed objects in saved cores to be written to without write-protection & later scavenging.
…reams For *terminal-io*, a bidirectional stream, we have to make an arbitrary choice on Windows, where in theory the input and output code pages can differ. We arbitrarily choose the output format; I have no idea whether this matters.
All the unibyte-mapper-based external-formats had huge amounts of cut-and-pasted code, differing only in names of functions. This is, oddly enough, a clear case for abstracting away the repeated code into a macro. In the process, convert them to the multibyte apparatus, which has support for the nice restarts, and remove the too-simple unibyte DEFINE-EXTERNAL-FORMAT (and EXTERNAL-FORMAT-DECODING-ERROR) which are now unused. Include a far-from-comprehensive set of tests, which are mostly for iso-8859-x formats
* handling undefined codepoints: There's a difference between "unassigned codepoint", represented as (<code> nil), and "codepoint mapping to character with that codepoint", represented by the absence of an entry in the exceptions list. Simply testing for trueness of (cadr (assoc <code> exceptions)) isn't good enough; test for trueness of (cdr (assoc ...)) and use the car if so. * undefined codepoints as the first exception: If the first exception to code<->byte is an undefined character, as for example in iso-8859-8, the lowest-code exception was computed wrongly, leading to incorrect encoding.
For a given keyword :foo naming an encoding, allow an external-format (:foo :replacement <character>) such that any stream or octet coding errors are automatically treated by using the <character> as replacement instead. To do this, wrap each of the functions in the external-format object named by the keyword with a function establishing handlers for the exceptional conditions. At the moment, the output restarts for c-string external format conversion are not implemented (so handle specific condition types like STREAM-FOOCODING-ERROR, not general FOOCODING-ERROR).
* SB-INTROSPECT:ALLOCATION-INFORMATION also reports on boxedness of the page the object resides on. * When heap statistics are printed, always print the details of the pseudo-static generation. Make print_generation_stats extern so it can be called from lisp.
Detect all malformed sequences, including attempts to decode or encode Unicode surrogate codepoints (disallowed by the Unicode definition of UTF-8). Some error tests change behaviour, and some (unexported) condition classes are not triggered under the same circumstances any more. Also, handle null-termination on a successful conversion of an empty range of a nil array.
* OUTPUT-REPLACEMENT restart for fd-stream external-formats, taking a string designator argument and attempting to encode that instead of the erroneous output; * fixes for the FORCE-END-OF-FILE fd-stream external-format restart, using a somewhat involved call / return protocol for communicating out-of-band information between output routines and drivers; * INPUT-REPLACEMENT restart for fd-stream external-formats, again with complicated out-of-band information communication. This also interacts with UNREAD-CHAR; * fix the ATTEMPT-RESYNC restart (and similar) at or near the end of file, ensuring that there is always a valid CATCH tag to be THROWN to; * fix a double-error case in the USE-VALUE restart for unibyte octet conversions; * bandage fix for mb-util decoding-error USE-VALUE restart -- there's more factoring to be done, but this fixes lp #314939
We do still need also to update a small bit of code, but at least the explanatory comment now makes it obvious which bits.
…TCH*... ...'cuz CLHS says so. We bind it to the standard pprint dispatch table, and guard against its modification in SET-PPRINT-DISPATCH, mimicking the guard against modification of the standard readtable introduced in 1.0.24.
The slot accessors' functions were being computed too early, requiring a wrapper (for the PV optimization) when none was available. The fix delays the computation by the usual trick of installing a closure that will perform the slot accessor computation on demand. Include a correct MOP test for this (slightly hard because of constraints about order of instantiation: see lp #473699, reported by Lars Rune Nodstal).
Typo in the external format definition. Include a test case; reported by Attila Lendvai (in lp #471689)
Reported by Leslie P. Polzer. https://bugs.launchpad.net/sbcl/+bug/460283
Users of this OUTPUT-BYTES/FOO function must have been perfect.
One wonders if the profusion of array access VOPs are merely bloat...
EQ-COMPARABLE-TYPE wasn't being defined properly, so things like (EQL FOO :KEYWORD) were going through GENERIC-EQL. Thanks to Christophe for pointing out the fix.
* Add two new Xref functions to SB-INTROSPECT: WHO-SPECIALIZES-DIRECTLY returns method definitions which specialize one the designated class itself. WHO-SPECIALIZES-GENERALLY returns methods definitions which specialize on the designated class, or subclasses of it. Both take CLASS-EQ, and EQL specializers into account. * Refactor xref tests, and add tests for the two new functions. * Fix sb-introspect.asd to perform the test-op with a *D-P-D* bound to contrib/sb-introspect/.