[f486d6] by Nikodemus Siivola
22.214.171.124: better end-of-the-world handling
* Implicit QUIT.
* Make sure we have %END-OF-THE-WORLD visible while doing cleanups.
* Handle errors from cleanups.
* Disable interrupts in places where the environment might now be up to
* If user calls QUIT, and exit hooks run without serious trouble, report the
* Also make SAVE-LISP-AND-DIE signal an error if SAVE returns. (When there is
[a7a4ca] by Nikodemus Siivola
126.96.36.199: make TRULY-THE macroexpandable
* MACRO-FUNCTION no longer checks :FUNCTION :KIND, allowing us to have
* Add %MACROEXPAND and %MACROEXPAND which are careful not to expand special
* Set the :FUNCTION :MACRO-FUNCTION into an expander that just converts
* Also add a SETF-expander.
[e8011f] by Nikodemus Siivola
188.8.131.52: automatic &rest to &more conversion
when possible, making functions such as
(defun foo (f1 f2 &rest args)
The conversion is done iff:
* The rest arg is never assigned to.
* The rest arg only appears in VALUES-LIST (incl. APPLY)
* Those calls are all in either the same lambda that
The way this works is as follows:
1. When we convert a lambda with a non-ignored &rest argument, as add
2. When we source-transform a values-list form, we check if its argument is
(%values-list-or-context list context count)
3. When we are optimizing, a deftransform fires for the form above. It
The reason for this roundabout way of doing things lies in locall analysis:
[b16362] by Nikodemus Siivola
184.108.40.206: fix performance / type derivation regression from 220.127.116.11
Since global/special variables are now always converted using
Remedy this by adding a DERIVE-TYPE optimizer for both.
[54d68c] by Nikodemus Siivola
18.104.22.168: faster with-arguments CALL-NEXT-METHOD
* Make the correctness-checking code for changed arguments in safe
This makes things like (apply #'call-next-method r1 r2 :foo foo rest)
Could still be better, but this much was quick and easy.
* Make the &REST list in CALL-NEXT-METHOD dynamic-extent. This helps
[edb7ac] by Nikodemus Siivola
22.214.171.124: explicitly indefinite-extent leaves, safer dynamic-extent &REST
Change LEAF-DYNAMIC-EXTENT to LEAF-EXTENT. Setting it to :INDEFINITE stops
Use this in CONVERT-MORE-CALL / CONVERT-HAIRY-FUN-ENTRY by proclaiming the
The upshot is that dynamic-extent &REST will only stack allocate the spine
Document this in the manual and attach appropriate caveats re. portability.
[94b4d5] by Nikodemus Siivola
126.96.36.199: deadlock detection fixes
* The same deadlock may be reported in multiple threads: adjust tests
* CHECK-DEADLOCK/DEADLOCK-CHAIN could signal an error if the deadlock
To flush out issues like this a bit better, added looping to some
[6bc7c1] by Nikodemus Siivola
188.8.131.52: fix null broadcast-streams as RUN-PROGRAM output streams
Regression from 184.108.40.206.
Since they have element-type T, COPY-DESCRIPTOR-TO-STREAM complains
Also add a missing error message about unknown element types for input
...and fix numbering of RUN-PROGRAM-CAT-* tests.
[dd9f2a] by Nikodemus Siivola
220.127.116.11: more conservative global variable conversion
Based on patch by Roman Marynchak.
* Modify IR1-CONVERT-VAR to emit SYMBOL-VALUE wrapper
* Modify IR1-STEP-FORM-P to return false for SYMBOL-VALUE
[f71445] by Nikodemus Siivola
18.104.22.168: SET-SYNTAX-FROM-CHAR and dispatch-macro characterness
Previously when the to-char was a dispatch-macro character in to-readtable,
CLHS says "If the character is a dispatching macro character, its entire
[23e319] by Nikodemus Siivola
22.214.171.124: add deadlock detection to spinlocks and mutexes
Each thread gets a WAITING-FOR slot which holds the lock it is
After initial try at lock acquisition fails, we check for deadlocks:
Print thread as having state WAITING if it is waiting for a lock.
Add a PRINT-OBJECT methods for MUTEXes and SPINLOCKs.
SB-THREAD:THREAD-DEADLOCK-CYCLE contains a list of the
[a1a34a] by Nikodemus Siivola
126.96.36.199: better source information for compile-time type errors
Compile-time warning: in addition to the context, also tell exactly
Run-time error: include both the error context and exact form in the
Delete VALUES-TYPE-ERROR, and use SIMPLE-TYPE-ERROR for both legs in
[5b96a0] by Nikodemus Siivola
188.8.131.52: better binary stream support in RUN-PROGRAM
* In COPY-DESCRIPTOR-TO-STREAM, decode octets only if the stream has
For :DEFAULT and (UNSIGNED-BYTE 8) just copy the octets over
For others, signal an error. (Would be nice to support, but not a
* Similarly for copying to temporary files from non-fd input
[b67c2d] by Nikodemus Siivola
184.108.40.206: add FD-STREAM-FD-TYPE, use it to decide when to poll the fd
220.127.116.11 introduced a regression that caused reads from non-regular files
This was a win for regular files, because filling the input buffer then
...but since uninterruptible blocking reads aren't fun for anyone, let's
* When creating an FD-STREAM, use fstat() to get the type of the fd, and
* REFILL-INPUT-BUFFER now calls SYSREAD-MAY-BLOCK-P always if the file