* implement ARRAY :SIMPLE-UNION2, and don't use CSUBTYPEP to shortcut unions where both types are array types -- fixes bug #306a. (Move to tests.) * move comments in UNION-COMPLEX-SUBTYPEP-ARG2 slightly for clarity. * bug #367 went with #368. * bug #387 is fixed nowadays.
Make ENSURE-CLASS and ENSURE-GENERIC-FUNCTION do what AMOP says regarding the :METACLASS and :GENERIC-FUNCTION-CLASS default arguments. I don't like it, but that's what it says, and as Bruno points out on sbcl-devel, no default is right in all circumstances. ... we didn't call ENSURE-CLASS ourselves except as part of DEFCLASS' expansion; we did call ENSURE-GENERIC-FUNCTION, so arrange to call it only when necessary and only with the right :generic-function-class argument. ... while we're at it, fix a bug in ENSURE-CLASS, which got the metaclass wrong if the argument was provided more than once. ... document one or two more small MOP deviations in the manual.
* TYPE-INTERSECTION of arrays preserves the specialized type when appropriate -- even if the intersection of the expressed types is empty. * Delete bug 217 -- has been fixed, is in the test-suite. * Note about bug 235. * Not more *USE-IMPLEMENTATION-TYPES*, behave always as if it was T.
* Indentation changes to target-hash-table.lisp to make the lines fit into a 80 char wide emacs. * Small refactoring of hash table related code in gencgc: of the x86/x86-64 version of scav_vector a function called scav_hash_table_entries is split off and some repetitive code is factored out.
* Caused bogus wakeups in CONDITION-WAIT on Linux from SIGCONT.
Implement the :FUNCTION initarg for method initialization ... half of the battle here was altering the propagation of information about methods around the system. Prior to this checkin, information was kept in a (non-weak) hash table holding plists for method functions and method fast functions. Instead, we associate the plist with the method itself. ... implement method-qualifiers as a proper slot reader, rather than through the plist; ... method-function-get-DIE-DIE-DIE ... constant-method-call and constant-fast-method-call structures for the special case of constant-value (e.g. predicate) generic functions ... remove :METHOD-SPEC initarg, since it's useless ... rely more on interning instead of METHOD-FUNCTION-PV-TABLE ... remove dead code (e.g. METHOD-FUNCTION-CLOSURE-GENERATOR, MAKE-INTERNAL-READER-METHOD-FUNCTION) ... define a %METHOD-FUNCTION funcallable structure, to bind function and fast-function closely together. ... remove the :FAST-FUNCTION initarg. Now, if the system wants a fast-function, it creates a %method-function structure with the fast-function in the fast-function slot (and an ordinary method-function as the funcallable-instance-function) ... some test cases. (This fixes bug #361 among others, and we have no current failures against the Closer mop-feature-tests)
* INVOKE-EFFECTIVE-METHOD was missing a binding for the effective-method-form, causing potential multiple evaluation and also creating one source of confusion when step instrumenting CLOS code, manifesting as: Asserted type (MOD 536870911) conflicts with derived type (VALUES (OR FUNCTION SB-PCL::METHOD-CALL SB-PCL::FAST-METHOD-CALL) &OPTIONAL). * If the form being instrumented is a call to a known single-valued function we can instrument it in a way that doesn't kill the type-inference. This alone is enough to get rid of most warnings such as above. * Add rudimentary (B)acktrace command to the built-in stepper.
More baby steps to the removal of the :fast-function initarg. This time, some permutation vector cleanups, partly motivated by similar changes in CMUCL and partly by the need to communicate information between a method function and the other method initargs. ... remove the "interning" of permutation vectors themselves. ... the first element of a permutation vector is no longer "for information" ... destructively update the slots of a pv when the class changes. (NB: this has threadsafety implications: revisit when the dust settles.) ... delete the PV-TABLE-SYMBOL code; replace the somewhat crufty fashion of getting access to the method's pv-table (using symbol-value of an uninterned symbol, which is SET by INITIALIZE-METHOD-FUNCTION) by a LOAD-TIME-VALUE, relying on INTERN-PV-TABLE to, well, intern a PV table. (NB: this has performance implications if method functions are not compiled.) ... some test cases: some simple tests of class redefinition and slot value, and some where there is a make-method-lambda customization. Also log a failing case where the PV slot-value optimization is broken.
Before I forget: since working on a %method-function branch to fix the :function / :fast-function initarg to methods has uncovered some related-but-fixable bugs, do an early merge to clear them up: ... the special declaration for pv-table-symbol was in the wrong place, so spurious warnings were generated; ... make-emf-from-method can return a method-call (not a fast-method-call), so fix cases where both the caller and callee of a MAKE-METHOD form were non-standard. ... remove an ancient workaround for a KCL bug related to pv-table-symbol.
* Don't instrument inline-expansions of known functions. Fixes at least some of the "step-instrumentation confusing the compiler" problems. * Rename IR1-CONVERT-LAMBDA-FOR-DEFUN to IR1-CONVERT-INLINE-EXPANSION, since that is the only way it is currently used. Refactor slightly for simplicity, given the way it is actually used. * Test-case.
* Refactor the compiler to first consider special forms and compiler-macro expansions before other options. (Necessary for the rest.) * FUNCALL forms now get compiler-macro expansion when applicable. * COMPILER-MACRO-FUNCTION takes shadowing by local functions into account. * Local INLINE declarations no longer inhibit compiler-macro expansion. * Tests.
* We previously handled only the &WHOLE case, and also failed to handle the argument count checking correct. Now things should work, but FUNCALL forms are not still subject to compiler-macroexpansion -- yet. (Reported by James Y Knight) * Refactor the macro-lambda-list parsing code slightly for easier comprehension.
* Bug reported by Robert Dodier.
* Patch by Troels Henriksen. * Test-case missing from 0.9.15.22.
* Reported by Antonio Martinez.
* Analogous to 0.9.15.13. * Fix the test from 0.9.15.13 to actually test a failing case. * Add an explanatory comment with the test-cases.
Allow forward-referenced-classes as specializers ... they are SPECIALIZERP, they have proper names... ... but it's at least slightly ANSIly-extending, so signal a STYLE-WARNING. Take this opportunity to rework the method initarg checking code ... no more LEGAL-FOO generic functions.
OK then. Fix %INSTANCE-TYPEP deftransform ... if we're testing for a structure-classoid, then any object with an invalid layout is neccessarily not typep that class. ... if we're testing for something with a fixed depthoid (i.e. something which is always at a given position in the layout-inherits), then if we get an object with an invalid layout we mustn't throw an error before trying to update the object.