sbcl.git
16 years ago1.0.9.6: remove :UNIX from *FEATURES* on Windows
Nikodemus Siivola [Wed, 29 Aug 2007 14:51:55 +0000 (14:51 +0000)]
1.0.9.6: remove :UNIX from *FEATURES* on Windows

Thanks to Luis Oliveira.

16 years agokeep docstrings from PCL bootstrap around
Nikodemus Siivola [Mon, 27 Aug 2007 15:47:55 +0000 (15:47 +0000)]
keep docstrings from PCL bootstrap around

* Keep documentation strings from early generics and methods.

16 years agoadded .gdb_history to .gitignore
Nikodemus Siivola [Mon, 27 Aug 2007 15:33:04 +0000 (15:33 +0000)]
added .gdb_history to .gitignore

16 years agomicro-optimize SKIP-FAST-SLOT-ACCESS-P
Nikodemus Siivola [Mon, 27 Aug 2007 15:31:36 +0000 (15:31 +0000)]
micro-optimize SKIP-FAST-SLOT-ACCESS-P

* It's the only caller of SKIP-OPTIMIZE-SLOT-SLOT-VALUE-BY-CLASS-P, so
  inline the latter's body and remove the duplicate *BOOT-STATE* check
  and FIND-SLOT-DEFINITION call. Add FIXME due to apparent strangeness
  re existense of the slot definition.

16 years agofaster SLOT-VALUE &co with variable slot names
Nikodemus Siivola [Mon, 27 Aug 2007 15:13:27 +0000 (15:13 +0000)]
faster SLOT-VALUE &co with variable slot names

* Cache the slot-location and typecheckfun in the class-slots-vector
  in addition to the slot-definition for STANDARD-CLASS and
  FUNCALLABLE-STANDARD-CLASS.

* New function CHECK-OBSOLETE-INSTANCE/CLASS-OF, which combines the
  two. Faster then calling both separately, since both need to grab
  the wrapper -- used by SLOT-VALUE &co.

* Unoptimized SLOT-VALUE, (SETF SLOT-VALUE), SLOT-BOUNDP, and
  SLOT-MAKUNBOUND can now directly access instance and class slots the
  typecheckfun in normal cases, giving upto 20-25% performance boost
  for these functions.

* Obsolete-instance protocol tests using variable slot-names.

16 years ago1.0.9.1: faster MAKE-MEMBER-TYPE, UNION, and NUNION
Nikodemus Siivola [Mon, 27 Aug 2007 14:44:21 +0000 (14:44 +0000)]
1.0.9.1: faster MAKE-MEMBER-TYPE, UNION, and NUNION

* MAKE-MEMBER-TYPE was doing several SUBSETP calls,
  instead just walk once over the list of members.

* UNION and NUNION were using an O(N^2) implementation
  for all input sizes. Use a hashtable (giving O(N))
  for large inputs when :TEST is something we can
  use with a hash-table.

Thanks to Damien Diederen for catching a typo in the new UNION /
NUNION code.

16 years ago1.0.9: release, will be tagged as sbcl_1_0_9
William Harold Newman [Mon, 27 Aug 2007 00:10:15 +0000 (00:10 +0000)]
1.0.9: release, will be tagged as sbcl_1_0_9

16 years ago1.0.8.48: Update comment.
Thiemo Seufer [Sun, 26 Aug 2007 20:53:34 +0000 (20:53 +0000)]
1.0.8.48: Update comment.

16 years ago1.0.8.47: Declare alien input parameters as such.
Thiemo Seufer [Sun, 26 Aug 2007 20:32:09 +0000 (20:32 +0000)]
1.0.8.47: Declare alien input parameters as such.

16 years ago1.0.8.46: attempt to answer the "executables" FAQ in the manual
Rudi Schlatte [Tue, 21 Aug 2007 09:56:21 +0000 (09:56 +0000)]
1.0.8.46: attempt to answer the "executables" FAQ in the manual

* The information was there, but hidden in the second part of a
  somewhat-related paragraph in a generic section.

* Including "Executables" in the first page of the table of contents
  should make the function easier to find, one hopes...

16 years ago1.0.8.45: Fix sb-sprof on non-x86oids
Juho Snellman [Tue, 21 Aug 2007 06:15:07 +0000 (06:15 +0000)]
1.0.8.45: Fix sb-sprof on non-x86oids

         * Patch by Pierre Mai

16 years ago1.0.8.44: Fix EQUALP on structures with raw slots
Juho Snellman [Tue, 21 Aug 2007 05:18:42 +0000 (05:18 +0000)]
1.0.8.44: Fix EQUALP on structures with raw slots

         * Old version was basically accessing raw slots with %INSTANCE-REF,
           and doing EQUALP on the results. This was most obviously wrong
           for raw slots that were larger than a word (double-floats on 32-bit
           platforms). Less obviously this is also wrong for some float
           corner-cases, like negative zeroes.
         * Add RAW-INSTANCE-SLOTS-EQUALP which instead grovels the layout for
           the slot definitions and determines the proper accessor functions
           for each slot from that.
         * Reported by Vjacheslav Fyodorov.

16 years ago1.0.8.43: Fix GCD on most-negative-fixnum on x86-64
Juho Snellman [Tue, 21 Aug 2007 05:12:33 +0000 (05:12 +0000)]
1.0.8.43: Fix GCD on most-negative-fixnum on x86-64

         * Bogus type declarations.
         * Reported by Gregory Vanuxem on sbcl-devel.

16 years ago1.0.8.42: Fix some source-location bugs, alternate sb-cover annotation mode
Juho Snellman [Mon, 20 Aug 2007 17:12:49 +0000 (17:12 +0000)]
1.0.8.42: Fix some source-location bugs, alternate sb-cover annotation mode

         * Bug introduced in the code coverage commit caused sldb-show-source
           to highlight the wrong forms in many cases.
         * Changes in 1.0.6.23 caused branch forms to be not annotated as
           such in sb-cover.
         * Add a new annotation mode to sb-cover, which basically uses
           the source location information of the car of the form instead
           of using the information for the form itself. This mode shows
           explicitly which forms have been instrumented. According to
           a #lisp poll, the old version looks nicer, so it's been retained
           as the default.

16 years ago1.0.8.41: doc spelling fixes.
Rudi Schlatte [Mon, 20 Aug 2007 09:14:46 +0000 (09:14 +0000)]
1.0.8.41: doc spelling fixes.

16 years ago1.0.8.40: Acrually use reset-signal-mask only for Linux/MIPS.
Thiemo Seufer [Mon, 20 Aug 2007 07:08:09 +0000 (07:08 +0000)]
1.0.8.40: Acrually use reset-signal-mask only for Linux/MIPS.

16 years ago1.0.8.39: Mark remaining MIPS test failures as known.
Thiemo Seufer [Mon, 20 Aug 2007 00:04:20 +0000 (00:04 +0000)]
1.0.8.39: Mark remaining MIPS test failures as known.

16 years ago1.0.8.38: Add missing quote sign.
Thiemo Seufer [Sun, 19 Aug 2007 23:59:46 +0000 (23:59 +0000)]
1.0.8.38: Add missing quote sign.

16 years ago1.0.8.37: Workaround (or bugfix?) for blocked SIGTRAP on SBCL/MIPS.
Thiemo Seufer [Sun, 19 Aug 2007 23:57:09 +0000 (23:57 +0000)]
1.0.8.37: Workaround (or bugfix?) for blocked SIGTRAP on SBCL/MIPS.

16 years ago1.0.8.36: Improve MIPS (and HPPA) floating pooint support.
Thiemo Seufer [Sun, 19 Aug 2007 23:46:04 +0000 (23:46 +0000)]
1.0.8.36: Improve MIPS (and HPPA) floating pooint support.
  - For MIPS/HPPA, the NaN signalling bit's meaning is inverted.
  - Implement FLOATING-POINT-MODES and SET-FLOATING-POINT-MODES in C.
  - Delete the corresponding VOPs.
  - Document the MIPS special "unimplemented" floating point trap.
  - Add handling of the floating point control word in C signal handlers.
  - Mark NAN-COMPARISIONS as expected failure on MIPS. (It still doesn't
    work due to a kernel bug, siginfo_t's si_code field doesn't get
    updated properly.)

16 years ago1.0.8.35: Fix MIPS foreign_function_call_active handling.
Thiemo Seufer [Sun, 19 Aug 2007 23:34:37 +0000 (23:34 +0000)]
1.0.8.35: Fix MIPS foreign_function_call_active handling.

16 years ago1.0.8.34: Fix MIPS spinlock implementation.
Thiemo Seufer [Sun, 19 Aug 2007 23:31:36 +0000 (23:31 +0000)]
1.0.8.34: Fix MIPS spinlock implementation.

16 years ago1.0.8.33: sample sbcl-export alias in Git for SBCL Hackers
Nikodemus Siivola [Sat, 18 Aug 2007 15:13:53 +0000 (15:13 +0000)]
1.0.8.33: sample sbcl-export alias in Git for SBCL Hackers

* Forgot to save the file, so missed from the last commit...

16 years ago1.0.8.32: improved Git for SBCL Hackers in a few places
Nikodemus Siivola [Sat, 18 Aug 2007 12:05:08 +0000 (12:05 +0000)]
1.0.8.32: improved Git for SBCL Hackers in a few places

* Grammar and typos.

* Remove references to version.lisp-expr now that we have
  branch-version.lisp-expr.

* Better explanation of history cleaning (mostly for the benefit of
  non-committer hackers, shades of "How to Contribute".

* Alias for easy git-cvsexportcommit usage.

* Mention git-format-patch.

* Add link to Git User Manual.

16 years ago1.0.8.31: add missing Git for SBCL Hackers guide
Nikodemus Siivola [Sat, 18 Aug 2007 04:08:54 +0000 (04:08 +0000)]
1.0.8.31: add missing Git for SBCL Hackers guide

* Accidentally left out from 1.0.8.15.

16 years ago1.0.8.30: better standard-instance accessors
Nikodemus Siivola [Sat, 18 Aug 2007 04:07:13 +0000 (04:07 +0000)]
1.0.8.30: better standard-instance accessors

* Add SETF functions for STANDARD-INSTANCE-ACCESS and
  FUNCALLABLE-STANDARD-INSTANCE-ACCESS.

* Declare them and the readers inline.

  Thanks to Attila Lendvai.

16 years ago1.0.8.29: better printing of anonymous objects
Nikodemus Siivola [Sat, 18 Aug 2007 04:02:15 +0000 (04:02 +0000)]
1.0.8.29: better printing of anonymous objects

* In PCL, the NAMED-OBJECT-PRINT-FUNCTION prints the identity of the
  object when it has no name. Among other things, it affects the
  printing of anonymous classes.

  Thanks to Attila Lendvai.

16 years ago1.0.8.28: split REAL-MAKE-METHOD-LAMBDA back into two parts
Nikodemus Siivola [Sat, 18 Aug 2007 03:50:49 +0000 (03:50 +0000)]
1.0.8.28: split REAL-MAKE-METHOD-LAMBDA back into two parts

* Turns out my earlier merging of REAL-MAKE-METHOD-LAMBDA
  and MAKE-METHOD-LAMBDA-INTERNAL was ill adviced: the split
  is good to have so that redefining the latter in the
  final image actually changes the behaviour of the system.

* Add an explanatory comment.

16 years ago1.0.8.27: Improve error handling for (DESTRUCTURING-BIND (...) 'NOTLIST ...).
William Harold Newman [Tue, 14 Aug 2007 19:52:21 +0000 (19:52 +0000)]
1.0.8.27: Improve error handling for (DESTRUCTURING-BIND (...) 'NOTLIST ...).

16 years ago1.0.8.26: More MIPS singlestepper fixes.
Thiemo Seufer [Tue, 14 Aug 2007 15:53:26 +0000 (15:53 +0000)]
1.0.8.26: More MIPS singlestepper fixes.

16 years ago1.0.8.25: refactor CAN-OPTIMIZE-ACCESS usage and interface
Nikodemus Siivola [Mon, 13 Aug 2007 13:55:15 +0000 (13:55 +0000)]
1.0.8.25: refactor CAN-OPTIMIZE-ACCESS usage and interface

* Make the constant slot-name and the possible new-value-form
  additional return values.

* Use CONSTANT-FORM-VALUE instead of EVAL to get the constant
  slot-name. Also use the environment correctly to CONSTANTP
  and CONSTANT-FORM-VALUE.

* Call CAN-OPTIMIZE-ACCESS in the various instance-access optimizers
  and not around calls to them, so that they can directly use the
  slot-name and new-value-form results from CAN-OPTIMIZE-ACCESS
  instead of having to recompute them.

16 years ago1.0.8.24: factor (THE TYPE FORM) => FORM transformations into a function
Nikodemus Siivola [Mon, 13 Aug 2007 13:41:49 +0000 (13:41 +0000)]
1.0.8.24: factor (THE TYPE FORM) => FORM transformations into a function

* EXTRACT-THE, for now only used in PCL.

16 years ago1.0.8.23: merge CAN-OPTIMIZE-ACCESS and CAN-OPTIMIZE-ACCESS1
Nikodemus Siivola [Mon, 13 Aug 2007 13:40:40 +0000 (13:40 +0000)]
1.0.8.23: merge CAN-OPTIMIZE-ACCESS and CAN-OPTIMIZE-ACCESS1

* First is the only caller of the first, so just move
  the body to the call site.

16 years ago1.0.8.22: merge MAKE-METHOD-FUNCTION and MAKE-METHOD-FUNCTION-INTERNAL
Nikodemus Siivola [Mon, 13 Aug 2007 13:36:37 +0000 (13:36 +0000)]
1.0.8.22: merge MAKE-METHOD-FUNCTION and MAKE-METHOD-FUNCTION-INTERNAL

* First was the only caller of the latter -- just move the
  body to the call site.

16 years ago1.0.8.21: merge REAL-MAKE-METHOD-LAMBDA and MAKE-METHOD-LAMBDA-INTERNAL
Nikodemus Siivola [Mon, 13 Aug 2007 13:34:49 +0000 (13:34 +0000)]
1.0.8.21: merge REAL-MAKE-METHOD-LAMBDA and MAKE-METHOD-LAMBDA-INTERNAL

* The first was the only caller of the latter, so just make the
  body of the latter the body of the first.

16 years ago1.0.8.20: replace PVREF by SVREF
Nikodemus Siivola [Mon, 13 Aug 2007 13:33:13 +0000 (13:33 +0000)]
1.0.8.20: replace PVREF by SVREF

* PVREF was a trivial wrapper macro around SVREF, and used in only
  src/pcl/vector.lisp. This is easier to read for me at least.

16 years ago1.0.8.19: :dont-safe finalizers and fd-stream thread safety issues
Nikodemus Siivola [Thu, 9 Aug 2007 16:52:03 +0000 (16:52 +0000)]
1.0.8.19: :dont-safe finalizers and fd-stream thread safety issues

 * Add :DONT-SAVE keyword argument to FINALIZE, which causes the finalizer
   to be removed when core is saved: it is not amusing to have a finalizer
   that deallocates system memory to fire in a fresh image which happens
   to have freshly allocated memory in the same address. Also good for finalizers
   closing FDs.

   Use where appropiate.

 * Stream buffing should not use (INCF (BUFFER-FOO BUFFER) N), since if another
   thread has written to the buffer since we last looked at it this might take
   eg. the TAIL index beyond the end of the allocated memory area: by doing
   (let ((foo (buffer-foo buffer))) ... (setf (buffer-foo buffer) (+ foo n)) we might
   overwrite the data from another thread, but at least we won't trash memory.

 * Small graces: check that ALLOCATE-SYSTEM-MEMORY actually succeeds, don't accept
   finalizers for NIL (they would just run immediately on next GC, which is almost
   certainly not intended), take an extra mile to ensure old buffers from before
   SAVE-LISP-AND-DIE don't survive to the new image.

16 years ago1.0.8.18: Fix gc-safety bug in x86oid function calls
Juho Snellman [Tue, 7 Aug 2007 06:15:13 +0000 (06:15 +0000)]
1.0.8.18: Fix gc-safety bug in x86oid function calls

         * Off by one error in conservative stack scavenging, the top of the
           stack wasn't pinned.
         * In the new calling convention there is a small window during which
           the return address only exists on the top of the stack. If a gc
           was triggered during that window, the code object could move, and
           the return address would point to freed memory.

16 years ago1.0.8.16: really increment the fasl version
Nikodemus Siivola [Mon, 6 Aug 2007 11:52:16 +0000 (11:52 +0000)]
1.0.8.16: really increment the fasl version

 (file left out from previous commit)

16 years ago1.0.8.16: refactored fd-stream buffering
Nikodemus Siivola [Mon, 6 Aug 2007 11:50:46 +0000 (11:50 +0000)]
1.0.8.16: refactored fd-stream buffering

 Thanks to David Smith and Andreas Bogkt who diagnosed the memory
 leaks this patch fixes.

 * Instead of having FD-STREAM objects directly hold onto input and
   output buffer SAPs and head/tail indexes, use BUFFER objects which
   contain the SAP, size of the memory area, head/tail indexes, and
   are have finalizers to deallocate the system memory assosicated
   with the SAP. (This fixes system memory leaks when streams are not
   properly closed.)

 * Make CLOSE :ABORT release the output queue associated with the
   stream. (This was another memory leak in the old system: now
   the finalizers make not doing this safe, but it's still better
   to recycle the buffers.)

 * Slightly reduce lock contention by grabbing the *AVAILABLE-BUFFERS*
   lock only if there is something there right before the lock is
   taken, and by doing allocation outside the lock.

 * Rename and refactor FROB-OUTPUT and friends:

     BUFFER-OUTPUT is the main interface function, which always
       adds new output to the current buffer / output queue.

     WRITE-OR-BUFFER-OUTPUT tries to write immediately, falling
       back to buffering if writing is not possible.

     WRITE-OUTPUT-FROM-QUEUE is called by the SERVE-EVENT
       system to deal with output queue.

     FLUSH-OUTPUT-BUFFER writes the current buffer out if possible,
       queues it otherwise. Ensures that the output buffer of
       the stream is empty on return (and returns that buffer).

 * Deprecate SB-SYS:OUTPUT-RAW-BYTES. There doesn't seem to be any
   real reason to export this kind of stuff.

 * Increment the fasl version.

16 years ago1.0.8.15: making SBCL sources Git more friendly
Nikodemus Siivola [Sat, 4 Aug 2007 14:49:32 +0000 (14:49 +0000)]
1.0.8.15: making SBCL sources Git more friendly

 * Git for SBCL Hackers guide.

 * If branch-version.lisp-expr exists, it's value is concatenated
   after the contents of version.lisp-expr, separated out by ".".

   Doing this allows reduces spurious conflicts on branches: otherwise
   a branch announcing it's name in version.lisp-expr is going to
   conflict at every turn, which prevents automatic rebasing and
   merging from doing TRT.

 * Added .gitignore

16 years ago1.0.8.14: De-clutter C code.
Thiemo Seufer [Fri, 3 Aug 2007 22:58:24 +0000 (22:58 +0000)]
1.0.8.14: De-clutter C code.

16 years ago1.0.8.13: .cvsignore test output.
Thiemo Seufer [Fri, 3 Aug 2007 22:56:07 +0000 (22:56 +0000)]
1.0.8.13: .cvsignore test output.

16 years ago1.0.8.12: Fix tests/foreign.test.sh on FreeBSD7/amd64
NIIMI Satoshi [Tue, 31 Jul 2007 03:10:46 +0000 (03:10 +0000)]
1.0.8.12: Fix tests/foreign.test.sh on FreeBSD7/amd64

16 years ago1.0.8.11: Fix typo in comment.
Thiemo Seufer [Sun, 29 Jul 2007 19:32:10 +0000 (19:32 +0000)]
1.0.8.11: Fix typo in comment.

16 years ago1.0.8.10: Untabify.
Thiemo Seufer [Sat, 28 Jul 2007 18:42:00 +0000 (18:42 +0000)]
1.0.8.10: Untabify.

16 years ago1.0.8.9: fix a potential segfault, and make a lisp pointercheck less obscure.
Thiemo Seufer [Sat, 28 Jul 2007 12:53:00 +0000 (12:53 +0000)]
1.0.8.9: fix a potential segfault, and make a lisp pointercheck less obscure.

16 years ago1.0.8.8: restore reuse-sap value after incomplete writes in FROB-OUTPUT-LATER
Nikodemus Siivola [Fri, 27 Jul 2007 12:09:10 +0000 (12:09 +0000)]
1.0.8.8: restore reuse-sap value after incomplete writes in FROB-OUTPUT-LATER

 * Unless we do this, we leak each reusable sap that happens to hit this
   code path.

 * Thanks to David Smith.

16 years ago1.0.8.7: printer-control variables affecting MEMBER & ASSOC transforms
Nikodemus Siivola [Fri, 27 Jul 2007 11:13:22 +0000 (11:13 +0000)]
1.0.8.7: printer-control variables affecting MEMBER & ASSOC transforms

 Reported by Dan Corkill on sbcl-devel.

 * Use WRITE-STRING on SYMBOL-NAME instead of FORMAT %A to ironclad
   the specialized function name generation.

 * Tests.

16 years ago1.0.8.6: Fix typo in comment.
Thiemo Seufer [Fri, 27 Jul 2007 01:58:06 +0000 (01:58 +0000)]
1.0.8.6: Fix typo in comment.

16 years ago1.0.8.5: Conform to strict aliasing rules.
Thiemo Seufer [Wed, 25 Jul 2007 22:21:46 +0000 (22:21 +0000)]
1.0.8.5: Conform to strict aliasing rules.

16 years ago1.0.8.4: One compiler warning less...
Thiemo Seufer [Wed, 25 Jul 2007 22:08:03 +0000 (22:08 +0000)]
1.0.8.4: One compiler warning less...

16 years ago1.0.8.3: Include missing headers.
Thiemo Seufer [Wed, 25 Jul 2007 22:05:26 +0000 (22:05 +0000)]
1.0.8.3: Include missing headers.

16 years ago1.0.8.2: Silence compiler warning.
Thiemo Seufer [Wed, 25 Jul 2007 21:46:39 +0000 (21:46 +0000)]
1.0.8.2: Silence compiler warning.

16 years ago1.0.8.1: Nicer C code
Thiemo Seufer [Wed, 25 Jul 2007 21:37:31 +0000 (21:37 +0000)]
1.0.8.1: Nicer C code
- More consistent formatting.
- Spelling fixes.
- Declare empty parameter lists as void.

16 years ago1.0.8: release, will be tagged as sbcl_1_0_8
William Harold Newman [Wed, 25 Jul 2007 13:39:33 +0000 (13:39 +0000)]
1.0.8: release, will be tagged as sbcl_1_0_8

16 years ago1.0.7.39: Fix typo in comment.
Thiemo Seufer [Mon, 23 Jul 2007 20:29:55 +0000 (20:29 +0000)]
1.0.7.39: Fix typo in comment.

16 years ago1.0.7.38: Fix the MIPS single-stepper break instruction.
Thiemo Seufer [Mon, 23 Jul 2007 20:26:38 +0000 (20:26 +0000)]
1.0.7.38: Fix the MIPS single-stepper break instruction.

16 years ago1.0.7.37: fix non-x86oid builds
Nikodemus Siivola [Sat, 21 Jul 2007 13:33:53 +0000 (13:33 +0000)]
1.0.7.37: fix non-x86oid builds

 * WITH-PINNED-OBJECTS needs to be a DEF!MACRO, not DEFMACRO. No SB!SYS prefix
   needed, as SB-VM uses SB-SYS.

 (Tested on only PPC/Darwin.)

16 years ago1.0.7.36: FIND-SLOT-DEFINITION to return NIL when called with non-slot-classes
Nikodemus Siivola [Sat, 21 Jul 2007 01:55:42 +0000 (01:55 +0000)]
1.0.7.36: FIND-SLOT-DEFINITION to return NIL when called with non-slot-classes

 * Add a default method to CLASS-SLOT-VECTOR that returns #(NIL), restoring
   the pre-1.0.7.26 behaviour of calling SLOT-MISSING when trying to access
   slots in non-SLOT-CLASS instances.

 * Add a slightly dubious test-case.

16 years ago1.0.7.35: SLOT-VALUE and SET-SLOT-VALUE transforms aren't important
Nikodemus Siivola [Sat, 21 Jul 2007 00:05:15 +0000 (00:05 +0000)]
1.0.7.35: SLOT-VALUE and SET-SLOT-VALUE transforms aren't important

 * No compiler notes for default policy.

 * Test case.

16 years ago1.0.7.34: adjust lexenv frobbing in TRANSFORM-CALL to happen earlier
Nikodemus Siivola [Fri, 20 Jul 2007 23:43:21 +0000 (23:43 +0000)]
1.0.7.34: adjust lexenv frobbing in TRANSFORM-CALL to happen earlier

 * Need to replace the call lexenv with the frobbed one before
   WITH-IR1-ENVIRONMENT-FROM-NODE so that IR1-CONVERT-INLINE-LAMBDA
   gets a consistent *LEXENV* binding.

   (This has been around since 0.9.17.5, but since it only affects
   known functions with optional arguments and transformations it
   suddenly become a lot more easy to hit with the new MEMBER and
   ASSOC transforms.)

 * Test case.

16 years ago1.0.7.33: better handling of ASSOC and MEMBER on empty lists
Nikodemus Siivola [Thu, 19 Jul 2007 18:49:44 +0000 (18:49 +0000)]
1.0.7.33: better handling of ASSOC and MEMBER on empty lists

 * If the second argument is a constant NIL, remove the whole
   call in the transform and just return NIL.

16 years ago1.0.7.31: updated TODO file
Nikodemus Siivola [Thu, 19 Jul 2007 14:16:40 +0000 (14:16 +0000)]
1.0.7.31: updated TODO file

 Let the controversy begin.

 No code changes.

16 years ago1.0.7.31: paper over bug inlining known functions in high-debug code
Nikodemus Siivola [Thu, 19 Jul 2007 13:44:58 +0000 (13:44 +0000)]
1.0.7.31: paper over bug inlining known functions in high-debug code

 NOT A PROPER FIX!

 * Don't inline known functions unless let-conversion is enabled, which papers
   over the real bug -- apparently due to BIND/UNBIND-SENTINEL vop insertion.

16 years ago1.0.7.30: be more paranoid about saps
Nikodemus Siivola [Thu, 19 Jul 2007 12:58:59 +0000 (12:58 +0000)]
1.0.7.30: be more paranoid about saps

 * Since compiler transformations can introduce closures and hence
   cause "this is obviously always on stack or in register" intuition
   to be wrong, be more vigilant about pinning objects before
   sap-taking.

 * Also convert a couple of WITHOUT-GCINGs to WITH-PINNED-OBJECTS
   instead.

16 years ago1.0.7.29: better ASSOC transform
Nikodemus Siivola [Thu, 19 Jul 2007 10:28:14 +0000 (10:28 +0000)]
1.0.7.29: better ASSOC transform

 * Extend the new MEMBER optimizations to handle ASSOC as well, and define
   the corresponding %ASSOC[-KEY][-TEST][-NOT] functions as well.

 * Clean up the old ASSOC -> ASSQ and MEMBER -> MEMQ transforms that
   aren't firing anymore.

 * Tests.

16 years ago1.0.7.28: compiler being nicer to the compiler
Nikodemus Siivola [Tue, 17 Jul 2007 22:26:30 +0000 (22:26 +0000)]
1.0.7.28: compiler being nicer to the compiler

 * In MAKE-XEP-LAMBDA-EXPRESSION, use EQL instead of = and NOT <
   instead of >= to avoid additional rounds of deftransforms and
   lambda-conversion.

 * Add a source transform for %COERCE-CALLABLE-TO-FUN to pick of
   simple cases, also avoid inserting additional lambdas to the code.

 * Use %FUNCALL and %COERCE-CALLABLE-TO-FUN in MAPFOO-TRANSFORM,
   providing not just faster compilation, but also making (MAPCAR F
   ...) faster by lifting the %C-C-T-F out of the loop.

 This work was based on Juho's observation that a major source of
 compiler slowness are all the lambdas generated by transforms: not
 that this changes the big picture in any way -- just shaves a few
 corners. If you wish to get a gut feeling of what is going on, stick
 a (PRINT (LIST DEBUG-NAME BODY)) in IR1-CONVERT-INLINE-LAMBDA.

16 years ago1.0.7.27: SLOT-CLASS cleanups
Nikodemus Siivola [Tue, 17 Jul 2007 20:50:15 +0000 (20:50 +0000)]
1.0.7.27: SLOT-CLASS cleanups

 * No need for two separate implementations of FIND-SLOT-DEFINITION -- just
   move the one we care about to slots-boot.lisp along with MAKE-SLOT-VECTOR
   (which it is intimately tied up with.) Add comments for posterity.

 * There should be no (SETF CLASS-SLOTS) or (SETF CLASS-DIRECT-SLOTS), so
   :READER, not :ACCESSOR in SLOT-CLASS.

16 years ago1.0.7.26: asymptotically faster FIND-SLOT-DEFINITION
Nikodemus Siivola [Tue, 17 Jul 2007 18:36:33 +0000 (18:36 +0000)]
1.0.7.26: asymptotically faster FIND-SLOT-DEFINITION

 * Add a SLOT-VECTOR slot the SLOT-CLASS. The SLOT-VECTOR contains
   plists of slot definition objects hashed on the slot name, allowing
   O(1) lookups based on the slot name, instead of the old O(N)
   lookups -- where N is the number of slots in a class.

   Makes everything requiring slot definition lookups faster, simple
   tests showing SLOT-VALUE with variable name on a 5-slot class to be
   roughly 50% faster.

16 years ago1.0.7.25: better MEMBER transform
Nikodemus Siivola [Tue, 17 Jul 2007 13:18:06 +0000 (13:18 +0000)]
1.0.7.25: better MEMBER transform

 * Specialized versions for different keyword combinations: %MEMBER,
   %MEMBER-TEST, %MEMBER-KEY-TEST, etc. These versions have positional
   arguments, and the callable arguments are known to be functions.

 * The transform open codes for all combinations of keywords if the
   second argument is constant and (>= SPEED SPACE). Otherwise the
   transform selects the appropriate specialized version and open
   codes %COERCE-CALLABLE-TO-FUN around keyword arguments, allowing
   type inference to optimize it away for arguments known to be
   functions.

 * Tests.

16 years ago1.0.7.24: Fix CALL-NEXT-METHOD / EVAL-WHEN interaction
Christophe Rhodes [Tue, 17 Jul 2007 11:24:26 +0000 (11:24 +0000)]
1.0.7.24: Fix CALL-NEXT-METHOD / EVAL-WHEN interaction
Reported by Sascha Wilde sbcl-devel 2007-07-15.  This fix is not
the one that I sent to sbcl-devel 2007-07-16, because that's
just too horrible; instead we expand DEFMETHOD into separate
:LOAD-TOPLEVEL and :EXECUTE branches.  (This needs a minor test
adjustment)

16 years ago1.0.7.23: delete a large block of commented-out code from seqtran.lisp
Nikodemus Siivola [Tue, 17 Jul 2007 10:13:38 +0000 (10:13 +0000)]
1.0.7.23: delete a large block of commented-out code from seqtran.lisp

 * This is why we have version control. (But add a comment pointing out
   that this code exists, so that people know where to look for it.)

   The code that is deleted here contains the apparent beginnings of a
   better sequence transform infrastructure: a compiler representation
   of an iteration over a sequence.

16 years ago1.0.7.22: (SETF SYMBOL-PLIST) type checking
Nikodemus Siivola [Mon, 16 Jul 2007 16:52:52 +0000 (16:52 +0000)]
1.0.7.22: (SETF SYMBOL-PLIST) type checking

 * Disallow non-lists as the new value.

16 years ago1.0.7.21: threaded SET & BIND VOP touchups
Nikodemus Siivola [Mon, 16 Jul 2007 16:12:18 +0000 (16:12 +0000)]
1.0.7.21: threaded SET & BIND VOP touchups

 * In SET: don't check versus TLS-INDEX == 0: TLS-INDEX 0 already
   gives the NO-TLS-VALUE-MARKER. Smaller code, and common case seems
   to be assignment to a bound variable.

 * In BIND: use one register less, splitting the duties of the old
   TEMP between TLS-INDEX and EAX/RAX. Increment the *FREE-TLS-INDEX*
   directly in memory.

16 years ago1.0.7.20: note for SBCL packagers
Nikodemus Siivola [Mon, 16 Jul 2007 11:07:37 +0000 (11:07 +0000)]
1.0.7.20: note for SBCL packagers

 See doc/PACKAGING-SBCL.txt.

16 years ago1.0.7.19: SB-EXT:COMPARE-AND-SWAP
Nikodemus Siivola [Sun, 15 Jul 2007 22:28:12 +0000 (22:28 +0000)]
1.0.7.19: SB-EXT:COMPARE-AND-SWAP

 * New macro SB-EXT:COMPARE-AND-SWAP provides a supported interface to
   compare-and-swap functionality.

 * New info-type :FUNCTION :STRUCTURE-ACCESSOR allows us to map from
   defstruct slot-accessor names to defstruct descriptions.

 * Add :CAS-TRANS slot keyword to DEFINE-PRIMITIVE object, and the
   compiler machinery needed to support compare and swap on primitive
   object slots.

 * New VOPs COMPARE-AND-SWAP-SLOT and %COMPARE-AND-SWAP-SYMBOL-VALUE.

 * Delete now unnecessary DEFINE-STRUCTURE-SLOT-COMPARE-AND-SWAP.

 * Use a consistent %COMPARE-AND-SWAP-FOO naming scheme for CAS
   functions.

 * Tests.

 Tested on x86/Linux & x86/Darwin, x86-64/Darwi, and PPC/Darwin.

16 years ago1.0.7.18: automagic debugging-friendly gensyms
Nikodemus Siivola [Fri, 13 Jul 2007 18:57:23 +0000 (18:57 +0000)]
1.0.7.18: automagic debugging-friendly gensyms

 * New function: SB-INT:BLOCK-GENSYM, which appends the innermost
   enclosing non-NIL block name to the given stem. The default
   environment used is the current *LEXENV* if one exists.

 * Use it instead of GENSYM in MAKE-GENSYM-LIST and WITH-UNIQUE-NAMES.

16 years ago1.0.7.17: SLOT-VALUE and SET-SLOT-VALUE transforms (really 1.0.7.16)
Nikodemus Siivola [Thu, 12 Jul 2007 23:05:17 +0000 (23:05 +0000)]
1.0.7.17: SLOT-VALUE and SET-SLOT-VALUE transforms (really 1.0.7.16)

 This is the real commit message that was supposed to go in 1.0.7.16.
 Sorry.

 * Define SLOT-VALUE and SET-SLOT-VALUE as known functions.

 * Use &ENVIRONMENT in CONSTANTP and CONSTANT-FORM-VALUE calls in
   their compiler-macros.

 * Add transforms for SLOT-VALUE and SET-SLOT-VALUE in addition to the
   compiler-macros. The transforms are functionally equivalent to the
   compiler-macros, but catch more cases: eg.

     (define-modify-macro appendf (&rest lists) append)
     (appendf (slot-value x 'y) z)

   needs the deftransforms as setf-expansion replaces the constant
   argument with a gensym.

   Keep the compiler-macros around, since they catch the common cases
   early and don't mess up the build: the transforms are agressive
   enough that we can't enable them until the PCL boot-state is
   complete. (The compiler-macros are also slightly cheaper, since
   each transform introduces a new lambda.)

16 years ago1.0.7.14: thread-safe INTERN, EXPORT, &co
Nikodemus Siivola [Thu, 12 Jul 2007 17:28:40 +0000 (17:28 +0000)]
1.0.7.14: thread-safe INTERN, EXPORT, &co

 * Modifications to packages grab a global lock. INTERN is the only
   real potential performance bottleneck here, but as long as the
   symbol already exists it doesn't need to get the lock.

   We need a global lock instead of a per-package lock because eg.
   (EXPORT 'FOO::BAR :FOO) and (INTERN "BAR" :ZOT) can conflict, even
   though they operate on different packages.

   Since races should be rare we use a spinlock to avoid making a
   system call for every release.

   Interrupt safety? Probably no. It's likely that you can wedge the
   package system into a bad state if you really try.

16 years ago1.0.7.15: fix buglet in NAME-LAMBDALIKE
Nikodemus Siivola [Thu, 12 Jul 2007 10:31:20 +0000 (10:31 +0000)]
1.0.7.15: fix buglet in NAME-LAMBDALIKE

 * Remove stray QUOTE. Reported by David Smith.

16 years ago1.0.7.14: thread-safe INTERN, EXPORT, &co
Nikodemus Siivola [Wed, 11 Jul 2007 13:56:49 +0000 (13:56 +0000)]
1.0.7.14: thread-safe INTERN, EXPORT, &co

 * Modifications to packages grab a global lock. INTERN is the only
   real potential performance bottleneck here, but as long as the
   symbol already exists it doesn't need to get the lock.

   We need a global lock instead of a per-package lock because eg.
   (EXPORT 'FOO::BAR :FOO) and (INTERN "BAR" :ZOT) can conflict, even
   though they operate on different packages.

   Since races should be rare we use a spinlock to avoid making a
   system call for every release.

   Interrupt safety? Probably no. It's likely that you can wedge the
   package system into a bad state if you really try.

16 years ago1.0.7.13: Mistakes should be fun, error messages should be beautiful.
William Harold Newman [Wed, 4 Jul 2007 00:15:27 +0000 (00:15 +0000)]
1.0.7.13: Mistakes should be fun, error messages should be beautiful.
take one ~% down, replace it with ~_, several hundred
vintage error message strings in the repository...

16 years ago1.0.7.12: fix clos-interrupts.impure.lisp for unithreaded builds
Nikodemus Siivola [Tue, 3 Jul 2007 12:11:42 +0000 (12:11 +0000)]
1.0.7.12: fix clos-interrupts.impure.lisp for unithreaded builds

 * Forgot #+sb-thread from the test case.

16 years ago1.0.7.11: fix test WITHOUT-INTERRUPTS+GET-MUTEX
Nikodemus Siivola [Tue, 3 Jul 2007 10:21:21 +0000 (10:21 +0000)]
1.0.7.11: fix test WITHOUT-INTERRUPTS+GET-MUTEX
 * Incorrect use of JOIN-THREAD.

16 years ago1.0.7.10: added a FINISH-OUTPUT before switching streams
William Harold Newman [Mon, 2 Jul 2007 17:48:52 +0000 (17:48 +0000)]
1.0.7.10: added a FINISH-OUTPUT before switching streams
Before this little patch, compiling a source file containing
only three #\. characters gave output like this:
  * (compile-file "dots.lisp")
  ; compiling file "/tmp/dots.lisp" (written 02 JUL 2007 12:27:29 PM):
  ;
  ; compilation unit aborted
  ;   caught 1 fatal ERROR condition
  ; compilation aborted because of fatal error:
  ;   READ failure in COMPILE-FILE:
  ;     READER-ERROR at 3 (line 1, column 3) on #<SB-SYS:FD-STREAM for "file /tmp/dots.lisp" {AB65D21}>:

  ; /tmp/dots.fasl written
  ; compilation finished in 0:00:00
  #P"/tmp/dots.fasl"
  T
  ; too many dotsT
  *
        After this patch, the 'too many dots' text ends up where
it should (several lines earlier).

16 years ago1.0.7.9: DEFAULT-UNKNOWN-VALUES for more than 7 args on x86-64
Christophe Rhodes [Mon, 2 Jul 2007 16:58:20 +0000 (16:58 +0000)]
1.0.7.9: DEFAULT-UNKNOWN-VALUES for more than 7 args on x86-64
Convinced myself that my patch was right, and that JMP-SHORT was
an artifact of the previous calling convention.  Delete
the JMP-SHORT pseudo-instruction forthwith.

16 years ago1.0.7.8: micro-optimize STRING->UTF8
Nikodemus Siivola [Sun, 1 Jul 2007 18:51:19 +0000 (18:51 +0000)]
1.0.7.8: micro-optimize STRING->UTF8

 * Slight cleverness about types, and inline ADD-BYTE locally.

 * If the utf8-length is the same as the length of the subsequence use
   a faster path.

 * Up to 60% faster on my test-cases (strings of random characters in
   the full character-code range.)

16 years ago1.0.7.7: slightly less broken handling of obsolete structures
Nikodemus Siivola [Sun, 1 Jul 2007 16:35:04 +0000 (16:35 +0000)]
1.0.7.7: slightly less broken handling of obsolete structures

 * Trap them correctly in PCL.

 * Correct package so that CLASSOID-TYPEP signals the correct error
   instead of running into an undefined function.

 * Tests.

16 years ago1.0.7.6: additional test case that fails under SB-LUTEX
Nikodemus Siivola [Sun, 1 Jul 2007 15:03:34 +0000 (15:03 +0000)]
1.0.7.6: additional test case that fails under SB-LUTEX

 Buggrit, millenium hand and shrimp!

16 years ago1.0.7.5: allow WITH-INTERRUPTS inside "system locked" sections
Nikodemus Siivola [Sun, 1 Jul 2007 12:35:30 +0000 (12:35 +0000)]
1.0.7.5: allow WITH-INTERRUPTS inside "system locked" sections

 * Fixes bug reported by Kristoffer Kvello on sbcl-help. (Regression
   caused by WITHOUT-INTERRUPT change caused GET-FOREGROUND wait to
   become uninterruptible.)

 * Test-case for the above, and another to show that condition-wait
   should not be interruptible if there is a surrounding
   WITHOUT-INTERRUPTS -- which currently fails on SB-LUTEX builds.

16 years ago1.0.7.4: RESTRICT-COMPILER-POLICY
Nikodemus Siivola [Sat, 30 Jun 2007 09:21:24 +0000 (09:21 +0000)]
1.0.7.4: RESTRICT-COMPILER-POLICY

 * Allow users to set a global minimum for optimization qualities,
   overriding declarations and proclamations.

   The intended use is to make it easy to recompile large bodies of
   code with many local optimization declarations with a minimum
   SAFETY or DEBUG everywhere.

 * Changes to SBCL itself to allow building with SBCL that has minimum
   safety set to 3:

    -- Second argument of %MORE-KW-ARG is a negative: DEFKNOWN it as a
       FIXNUM, not INDEX.

    -- We don't have a deftype for SB-VM::POSITIVE-FIXNUM -- it's only
       a backend type. Use (AND UNSIGNED-BYTE FIXNUM) instead.

 * Delete some unused functions: READ-SEQUENCE-OR-DIE,
   RENAME-KEY-ARGS.

16 years ago1.0.7.3: non-consing GETHASH and (SETF GETHASH)
Nikodemus Siivola [Thu, 28 Jun 2007 23:13:45 +0000 (23:13 +0000)]
1.0.7.3: non-consing GETHASH and (SETF GETHASH)

 * Add a BLOCK for RETURN-FROM inside WITH-SPINLOCK-AND-WITHOUT-GCING,
   so that the compiler will not need to generate code to verify the
   tag existence at runtime -- which causes value-cell allocation.

   (Performance regression since new WITHOUT-INTERRUPTS implementation.)

 * Add a test-case to make sure basic hash-table functionality is non-consing.

16 years ago1.0.7.2: fix potential GC errors due to bogus objects in backtraces
Nikodemus Siivola [Thu, 28 Jun 2007 14:24:48 +0000 (14:24 +0000)]
1.0.7.2: fix potential GC errors due to bogus objects in backtraces

 Backtrace construction involves calling MAKE-LISP-OBJ on things we
 devoutly hope are tagged lisp pointers, but this is not always the
 case. When we fail to detect this, and a GC follows while the bogus
 object is at location visible to GC bad things will happen. (Pinning
 doesn't change anything, as the object still needs to be scavenged.)

 To fix this (mostly -- one can still construct bogus lisp-objects
 using MAKE-LISP-OBJ, it just takes more work / is less likely to
 happen by accident):

  * Rename MAKE-LISP-OBJ %MAKE-LISP-OBJ, and MAKE-VALID-LISP-OBJ
    MAKE-LISP-OBJ.

  * Add an optional ERRORP argument to the former MAKE-VALID-LISP-OBJ,
    defaulting to T.

  * Always use the function formerly known as MAKE-VALID-LISP-OBJ,
    passing in errorp=NIL when in doubt.

  * Improve the validation done on x86/x86-64: factor out the checking
    logic in possibly_valid_dynamic_space_pointer, and use it to
    implment valid_lisp_ponter_p. Could be done on other platforms as
    well, but better done by someone who can test the results...

 Adjust other code to suit:

  * MAP-ALLOCATED-OBJECTS uses %MAKE-LISP-OBJ for now, as the new
    MAKE-LISP-OBJ is too slow to use for groveling over the whole
    heap. (Though it does detect a bunch of bogus objects we're
    constructing in ROOM now, so the time would not be really
    wasted...)

 No test cases because I've been unable to construct one that calls
 MAKE-LISP-OBJ with bogus arguments while backtracing, but such
 backtraces have been seen in the wild.

16 years ago1.0.7.1: dynamic extent value cells
Nikodemus Siivola [Thu, 28 Jun 2007 13:04:54 +0000 (13:04 +0000)]
1.0.7.1: dynamic extent value cells

 * Pass DX information from leaf to MAKE-VALUE-CELL, and implement the
   DX allocation for it on x86 and x86-64.

 * Declare some appropriate closed-over variables dynamic-extent:
   allows non-consing WITH-SPINLOCK &co.

 * Tests.

16 years ago1.0.7: release, will be tagged as sbcl_1_0_7
William Harold Newman [Wed, 27 Jun 2007 23:44:09 +0000 (23:44 +0000)]
1.0.7: release, will be tagged as sbcl_1_0_7

16 years ago1.0.6.60: add test file that was forgotten from 1.0.6.59
Nikodemus Siivola [Thu, 21 Jun 2007 15:09:10 +0000 (15:09 +0000)]
1.0.6.60: add test file that was forgotten from 1.0.6.59

 * clos-interrupts.impure.lisp

16 years ago1.0.6.59: bogus metacircles due to interrupted applicable method comp.
Nikodemus Siivola [Wed, 20 Jun 2007 19:05:53 +0000 (19:05 +0000)]
1.0.6.59: bogus metacircles due to interrupted applicable method comp.

 * If an interrupt arrives while have stuff on the *CACHE-MISS-VALUES-STACK*
   and the interrupt handler happens to call a gf that is already there,
   we used to think this was a metacircle. Instead we need to bind
   variables like this to "empty" values for interrupt hanlers.

 * Test.

 * Note some bugs.

16 years ago1.0.6.58: better heap exhaustion information
Nikodemus Siivola [Wed, 20 Jun 2007 18:11:57 +0000 (18:11 +0000)]
1.0.6.58: better heap exhaustion information

 * Print states of *GC-PENDING*, *GC-INHIBIT*, and
   *SIG-STOP-FOR-GC-PENDING* for fatal heap exhaustions.

 * Use alloc_number instead of make_fixnum for requested/available.

16 years ago1.0.6.57: fix sb-bsd-socket build on win32
Juho Snellman [Wed, 20 Jun 2007 08:35:28 +0000 (08:35 +0000)]
1.0.6.57: fix sb-bsd-socket build on win32

         * Reported by Yaroslav Kavenchuk.