* Return value in the no-op case for non-simple-strings must not be the underlying simple string object. * Correct return type (per spec) for STRING-TRIM &co is STRING-DESIGNATOR, but as long as we take care, we can make it STRING -- but the old SIMPLE-STRING is still wrong. * Instead of making WITH-STRING a full-blown Evil Macro, just use WITH-ARRAY-DATA at the call site. * Two more test-cases. patch by James Knight.
* Also refactor some code * Patch by Travis Cross
* Reported by Xach
* Patch by Josh Elsasser.
(from Andy Hefner sbcl-devel 2008-06-11)
(from Michael Weber sbcl-devel 2008-06-12)
… escaping * Reinstate :CONSTANT-VALUE in the infodb as :XC-CONSTANT-VALUE during cross-compilation, since we can't override our host's standard constants. * Avoid recursive escaping in BLOCK-GENSYM.
…NSI-STREAM. Reported by Yoshinori Tahara.
The basic idea here is reducing the number of functions whose discriminating function and effective method cache are precomputed; in particular, to reduce the number where users can both legitimately define their own methods, and where a large number of methods will be applicable to different classes. The biggest culprit in both of those categories is the PRINT-OBJECT generic function, which would recompute its entire dispatch structure every time any method was added or removed. So, turn off precomputation for names in the CL package; deal with the bootstrap metacircles that that provokes; special-case PRINT-OBJECT in COMPUTE-DISCRIMINATING-FUNCTION so that we can always print certain critical pieces of infrastructure; also, warn the user if they break our assumptions in PRINT-OBJECT's specialization. Fix one broken "how did it ever work" test.
* Make MAYBE-EMIT-MAKE-LOAD-FORM can dump _all_ references to non-trivial named constants using the name (well, not FP constants for SBCL itself.) This means that after (DEFCONSTANT +FOO+ "FOO") all references to +FOO+ are EQ, even in different files. ...some people are going to use this as an unportable performance hack, and their code will break horribly sooner or later, but more importantly we need to grovel less things, and more sharing means less memory use and better cache behaviour. * Tests.
* Package mismatch: ANSI-STREAM-FILE-POSITION was not exported from SB-KERNEL.
* When MAYBE-EMIT-MAKE-LOAD-FORMS elects to use the name to dump something, it better use the name to refer to the _whole_ object, and not just a subpart... * Use XSET for niceness in there as well. ...but XSET should really be replaced by a sane tree-based version... * Test-case by Kevin Reid.
* Between 1.0.16 and 1.0.17 LOAD began to return NIL when the argument had a non-NIL type and didn't name a file. Fixed with tests. * Additionally, writing the tests exposed an odd type restriction: LOAD's IF-DOES-NOT-EXIST argument was declared as having type (MEMBER :ERROR :CREATE NIL), but the CLHS just says it's a generalized boolean.
* While ANSI does not require us to do this, supporting this allows users to write code like: (unless (boundp 'f) (defconstant f (lambda () 'foo!))) (defun foo () f) ...which pre 184.108.40.206 SBCL also allowed.
* Coalesce non-circular lists, bit-vectors, and non-base-strings in the file-compiler. (We could do more, but these are the "easy" ones.) Takes care of OPTIMIZATIONS #34 in practice: outside the file compiler one can still trick the system into similar behaviour, but that seems a fairly academic concern. * Never go through SYMBOL-VALUE at runtime to fetch the value of a constant variable in compiled code. * Use (SYMBOL-VALUE <NAME>) as the load-form to dump references to named constants into fasls. * Signal a continuable error if an attempt to change the SYMBOL-VALUE of a constant variable is made. * Assignments to undefined variables go through SET, so that one cannot accidentally modify a constant by doing something like: (defun set-foo (x) (setq foo x)) (defconstant foo 42) (set-foo 13) * Gets rid of INFO :VARIABLE :CONSTANT-VALUE, and just uses SYMBOL-VALUE to store constant values. * Move definition of SB!XC:LAMBDA-LIST-KEYWORDS to be beginning of the build, and use it instead of the host LAMBDA-LIST-KEYWORDS where appropriate. * Tests.
…sion 220.127.116.11) * Revealed by ansi-tests.
…0.12.23) * Revealed by ansi-tests.
* Revealed by ansi-tests.
* Revealed by ansi-tests.
….0.17.4) * Add full definition for %MAKE-STRUCTURE-INSTANCE. * Test-case.
* DX-FLET doesn't currently handle non-required arguments, so don't use it when there are any. * Test-case.
* Fill the lists of buffer pointers with NIL after producing the string. This reduces the likelyhood of the conservative GC hanging on to all of the buffers at once.
* No point in having the install scripts install the html files produced while running tests. This was causing problems for some Linux distributions that require all installed files to have completely predictable names, whereas the test output files would have names that depended on the exact build directory name.
* Disable type-checks in full calls to LIST*, because we know the &REST list is a proper list. * Handle 1 argument case in the source-transform. * Add a derive-type optimizer, so we can figure out the common case when the return value is know to be a CONS.
* Added support for wallclock profiling. (Good for noticing waits that do not incur run time penalties.) * Added keyword arguments :SORT-ORDER (:ASCENDING or :DESCENDING) and :SORT-BY (:SAMPLES or :CUMULATIVE-SAMPLES) to REPORT, defaulting to :DESCENDING and :SAMPLES as before. Makes eyeballing flat reports easier, since often cumulative samples are the ones one should pay attention to (esp. for :CPU and :TIME profiling.) * Added support for profiling specific threads. New default is to profile only the current thread when using WITH-PROFILING, and all threads when using START-PROFILING -- :THREADS argument to both WITH-PROFILING and START-PROFILING can be used to specify other either a specific list of threads to profile, or :ALL to profile all threads. (In the future we might want to add eg. :CHILDREN to WITH-PROFILING, etc.) ** For :CPU profiling the signal handler simply filters out the threads we are not profiling. ** For :ALLOC profiling, *ALLOC-SIGNAL* is now thread local, and the profiler frobs the global *DEFAULT-ALLOC-SIGNAL* and local *ALLOC-SIGNAL*s as needed. Before the runtime delivers the allocation SIGPROF, it sets *ALLOC-SIGNAL* to T to prevent problems with recursive allocation signals (seem better then binding it in the handler, since we cannot really bind it quite early enough no matter what we do.) ** For :TIME profiling, we set up a timer that uses SIGPROF and pthread_kill to notify threads. * Use system locking macros instead of separate WITHOUT-GCING and WITHOUT-INTERRUPTS for cleanliness. * Make REPORT report the correct sample/alloction interval, and list the threads sampled.
* 16 bytes at the point of call, not 16 bytes at some random-point- then-push-two-words.
* Make REAL-ADD-METHOD suck slightly less: instead of paying for generic dispatch for all METHOD-FOO accessors, use a single call to a method that gets the benefit of permutation vectors and returns all we want as multiple values. ...this assumes that users are not allowed to override METHOD-FOO accessors. My current reading of AMOP is that overriding them is not specified at all -- but if someone needs it, we can use CLASS-EQ specializer magic to make that work. * A smattering of :TEST #'EQs for PUSHNEW, MEMBER, and ADJOIN. * Global specializer tables need to be synchronized now that our hash-tables aren't thread safe by default anymore.