NOT in feature expressions is specified to accept exactly one argument. The previous implementation of FEATUREP allowed zero or one argument, so tighten that check. Might need to fix CLRFI-1, as well (-:
* Use GCC's Thread-Local Storage to store current thread. (Tested on Linux x86 and x86-64, too) * Restore lisp level TLS segment register at interrupt handler.
It was missing an apply (or, equivalently, a ~?) for printing the simple-condition part of the error.
* added a new (partially #+NILed out) test case for a bug in STREAM-ERROR :REPORT, where it expects STREAM-ERROR to have SIMPLE-CONDITION-like properties * partial fix for bug in test case: ** Define SB-INT:SIMPLE-READER-ERROR which portably behaves the way that pre-ANSI code expected READER-ERROR to behave. ** Redo most internal references to READER-ERROR as references to SB-INT:SIMPLE-READER-ERROR. * (This is only a partial fix because PARSE-ERROR and STREAM-ERROR still have similar issues.)
Thanks to Paul Khuong for the translation.
The usual thing: the VOP was written in the belief that the compiler had already proved that the shift couldn't be too large. (Include test cases which should catch the analogous problem on x86-64 as well as the problem just fixed.)
* For each optimized access, store both the slot location and the typecheck function in the permutation vector. If the write is in safe code, use the typecheck function to validate the new value before using it. * Approximately ~5x as fast as SAFE-SET-SLOT-VALUE -- which is still needed in a few places as ACCESSOR-SET-SLOT-VALUE doesn't do type checking.
* Fetch the type-check-fun from wrapper-slot-table, not from the slot-definition.
* There hasn't been a :DEFAULT kind in permutation vector code for ages -- delete the code that handled it.
* Since the vectors that are updated are referred to by stale wrappers, this seems to be quite useless: if an instance has an invalid wrapper it will still have the old layout as well.
(I had batched these up as a "git baby steps" commit, but now that's been delayed...)
* Don't allow copy propagation to a local call argument, thus preserving parallel assignment semantics -- to judge by the comment above OK-COPY-REF, this is what it was ment to do in the first place. Reported by Paul Khuong on sbcl-devel.
…FORMATION * Based on work done by Larry D'Anna. * Rewire VARIABLE-INFORMATION in a similar manner. Add a FIXME note about lexically apparent special bindings, and document the current state of affairs. Improve the documentation string. * Tests, and more tests for VARIABLE-INFORMATION as well.
* Use self-pointer instead of NULL to mark the end of scavenged weak pointer list in GC, which allows identifying unscavenged pointers by the NULL next pointers. * Scavenging a single weak pointer in gencgc is now an O(1) operation instead of O(#scanned pointers so far). Thanks to Paul Khuong.
No ptsname() and friends on NetBSD.
It looks likely that texi2dvi is more ubiquitous than texi2pdf, so just apply the patch. ... (plus whitespace and .cvsignore collateral changes).
* Renamed CHECK-OBSOLETE-INSTANCE/WRAPPER-OF, and fixed the semantics so that it always returns the fresh wrapper. * Add FIXME re CHECK-WRAPPER-VALIDITY name.
* Use NIL instead of T in the CAR of the SLOT-TABLE cells to indicate "slot location not saved for some reason". * Better slot location computation for SLOT-TABLES: remaining wrapper copies now also copy the slot-table, and bootstrapping computes the slot locations for rest of the interesting cases. * Use SLOT-TABLE to obtain the slot location for permutation vectors instead of WRAPPER-CLASS-SLOTS and WRAPPER-INSTANCE-SLOTS-LAYOUT. Faster, and slowly point the way to getting rid of WRAPPER/LAYOUT distinction. * We deal with slot names in permutation vectors: remove the unused code that computed things for non-slot-name places in them.
* Rename the global interning tables and comment on their purpose for easier understanding. * Simplify by-slot indexing: PV-OFFSETS are not needed in the global table. * Lock around hash-table accesses.
* Now that .CALLS. are gone we can get rid of the extra indirection. (Maybe we have to add it back later, but worry about that then.) * Since .PV. is magical, also localize its bindings to vector.lisp, instead of exposing the variable in PV-BINDING1's interface (which is used elsewhere as well.)
* Permutation vector code contained infrastructure for optimizing GF calls inside method bodies in a similar manner as slot accesses are optimized, but this support was never finished. While it would be nice to have it, right now clarity of the code seems like a higher priority -- it seems to be simple enough to reinstate when we want, and the end result is liable to be easier to understand. * Add a big FIXME with a short explanation of the optimization and a pointer to this commit.
* Need to cast (BACKEND_PAGE_SIZE-1) to an unsigned long before bit flipping, otherwise we're potentially cutting the high bits off the allocation address.
* Since 126.96.36.199 we pad & align the per-thread areas after allocation -- but we need to still pass the original address and size to os_invalidate(), or else we leak. * Also refactor the freeable_thread_stack stuff slightly for less OAOOM. * Whitespace in tests.
* :COMPARE-AND-SWAP-VOPS, not :COMPARE-AND-SWAP-VOP in *FEATURES*. * Threaded cas tests. (threads.impure.lisp currently broken for unrelated reasons since .30 or so.)
The wonders of copy & paste ...
At that place, the header tag is written, and we have nothing like closure-header-slot.