sbcl.git
23 years ago0.6.9.20:
William Harold Newman [Sun, 7 Jan 2001 01:58:21 +0000 (01:58 +0000)]
0.6.9.20:
MNA patch for bug #30 and other readtable-related stuff
added tests for FIND and friends (anticipating new transforms)
fixed dumb error-reporting bug in CANONIZED-DECL-SPEC

23 years ago0.6.9.19:
William Harold Newman [Sat, 6 Jan 2001 01:46:16 +0000 (01:46 +0000)]
0.6.9.19:
set *AUTO-EVAL-IN-FRAME* default to NIL to work around failure
at debug prompt after Ctrl-C

23 years ago0.6.9.18:
William Harold Newman [Fri, 5 Jan 2001 17:10:00 +0000 (17:10 +0000)]
0.6.9.18:
fixed stupid wrong-stream bug in %DESCRIBE-COMPILED-FROM
MNA's filesys patches (from sbcl-devel 26 Dec 2000)
added DEFTRANSFORM for %WITH-ARRAY-DATA en route to speeding
up SORT, FIND, and other things

23 years ago0.6.9.17:
William Harold Newman [Tue, 2 Jan 2001 00:44:30 +0000 (00:44 +0000)]
0.6.9.17:
deleted *INITIAL-POLICY* and *INITIAL-INTERFACE-POLICY*, since
they seem irrelevant in the ANSI world of 1 source
file per compile command
deleted *INITIAL-PACKAGE* for the same reason
renamed *DEFAULT-POLICY* and *DEFAULT-INTERFACE-POLICY* to
*POLICY* and *INTERFACE-POLICY*
made PROCESS-OPTIMIZE-DECL remove duplicate alist entries

23 years ago0.6.9.16:
William Harold Newman [Mon, 1 Jan 2001 19:02:10 +0000 (19:02 +0000)]
0.6.9.16:
Happy New Year! May all your projects be on schedule.:-|
renamed POLICIES to LTN-POLICY
removed some inlining in ltn.lisp
simplified LTN-ANALYZE-BLOCK in ltn.lisp (removing caching)
added code to catch bogus full calls
tweaked PROFILE so it accepts (SETF FOO)-style names
tweaked DEFPRINTER to conserve whitespace
moved DEFPRINTER to SB-INT, since it's not compiler-specific

23 years ago0.6.9.14:
William Harold Newman [Sun, 31 Dec 2000 16:29:27 +0000 (16:29 +0000)]
0.6.9.14:
renamed more PCL stuff for unintern after warm init
CONSTANTLY now returns only a single value, as per ANSI.
removed CONSTANT-FUNCTION declaration support
PROCLAIM now recognizes ANSI abbreviated type declarations,
sharing code with DECLARE to do so.
DECLARE no longer supports old-style (CLTL1) FUNCTION decls.
removed some PCL nonstandard decls
renamed other nonstandard PCL decls to look more private
removed (DECLARE (SB-PCL::CLASS ..)) hack in DECLARE logic

23 years ago0.6.9.13:
William Harold Newman [Sat, 30 Dec 2000 01:30:20 +0000 (01:30 +0000)]
0.6.9.13:
(The "version broken" problem above was because the change
in POLICY type was not binary compatible, and I didn't
bump the version number, and I was crashing in some
private .sbclrc code compiled under the old system.
Oops..)
The POLICY-QUALITY type no longer includes NULL.
renamed more PCL stuff for unintern after warm init

23 years ago0.6.9.12:
William Harold Newman [Fri, 29 Dec 2000 18:39:01 +0000 (18:39 +0000)]
0.6.9.12:
(This version is broken. It builds, but can't build itself,
dying in vop.lisp with what looks like memory
corruption. 0.6.9.11 might be broken the same way.)
no more special support for DECLARE SB-PCL::CLASS
moved policy stuff into policy.lisp
moved !UNINTERN-INIT-ONLY-STUFF to after warm init
renamed some PCL stuff to make it be uninterned after warm init

23 years ago0.6.9.11:
William Harold Newman [Fri, 29 Dec 2000 14:36:48 +0000 (14:36 +0000)]
0.6.9.11:
more cleanups of optimization policy machinery..
renamed CSPEED slot to COMPILATION-SPEED, and BREVITY slot to
INHIBIT-WARNINGS, and got rid of other BREVITY refs
STRUCTURE-OBJECT-based POLICY caues too many cold init hassles
w/ COPY-POLICY and slot accessors. Use alists instead.
Now PROCESS-OPTIMIZE-DECLARATION can look up qualities
directly in *POLICY-BASIC-QUALITIES*.

23 years ago0.6.9.10:
William Harold Newman [Wed, 20 Dec 2000 22:42:34 +0000 (22:42 +0000)]
0.6.9.10:
ANSI fix: PARSE-NAMESTRING signals TYPE-ERROR on host mismatch.
various cleanups in optimization policy machinery..
renamed COOKIE to POLICY
used *POLICY-QUALITY-SLOTS* in POLICY-related def'ns
simplified POLICY macro: no implicit AND
factored out MAYBE-FP-WAIT policy dependence in float.lisp

23 years ago0.6.9.9:
William Harold Newman [Wed, 20 Dec 2000 03:29:21 +0000 (03:29 +0000)]
0.6.9.9:
added remaining MNA logical pathname regression tests to tests/
fixed my screwed-up CFP-OUTPUT-FILE-DEFAULT implementation
fixed PARSE-NAMESTRING so it always returns two values
added DEFKNOWNs for logical pathname stuff

23 years ago0.6.9.8:
William Harold Newman [Tue, 19 Dec 2000 14:13:04 +0000 (14:13 +0000)]
0.6.9.8:
MNA logical pathname patch (sbcl-devel Dec 12), lightly subbed
added most MNA logical pathname regression tests to tests/
belatedly bumped fasl file version because package
SB-CONDITIONS is gone

23 years ago0.6.9.7:
William Harold Newman [Thu, 14 Dec 2000 17:05:30 +0000 (17:05 +0000)]
0.6.9.7:
fixed cross-compilation under CMU CL (Viva la Alpha port!)

23 years ago0.6.9.6:
William Harold Newman [Wed, 13 Dec 2000 20:31:04 +0000 (20:31 +0000)]
0.6.9.6:
MNA patch to merge package SB!CONDITIONS into SB!KERNEL

23 years ago0.6.9.5:
William Harold Newman [Tue, 12 Dec 2000 23:59:40 +0000 (23:59 +0000)]
0.6.9.5:
BACKEND-BYTE-FASL-FILE-TYPE goes away as per 0.6.9.4.
Simplify TRY-DEFAULT-TYPES and friends by using single default
types instead of lists of default types.
more work on bug #17, loosely based on MNA's patch; still broke
started tests/pathnames.impure.lisp
failed to fix cross-compilation under CMU CL

23 years ago0.6.9.4:
William Harold Newman [Sun, 10 Dec 2000 22:22:44 +0000 (22:22 +0000)]
0.6.9.4:
MNA software-version patch + Raymond Wiker FreeBSD corrections
started fix for bug #17 (loosely based on MNA's patch) by
ANSIfying COMPILE-FILE-PATHNAME
*DEFAULT-PATHNAME-DEFAULTS* and SEARCH-LIST stuff can be
initialized in a toplevel form, so !FILESYS-COLD-INIT
can go away.

23 years ago0.6.9.3:
William Harold Newman [Thu, 7 Dec 2000 22:27:44 +0000 (22:27 +0000)]
0.6.9.3:
As per Raymond Wiker, FreeBSD really does need
CANNOT_GET_TO_SINGLE_STEP_FLAG.
applied MNA patch, fixed Linux signal handling, woo hoo!

23 years ago0.6.9.2:
William Harold Newman [Mon, 4 Dec 2000 15:30:51 +0000 (15:30 +0000)]
0.6.9.2:
renamed "linux-stubs" to "ldso-stubs"
removed old BSD-only ld.so stubs

23 years ago0.6.9.1:
William Harold Newman [Sun, 3 Dec 2000 15:12:00 +0000 (15:12 +0000)]
0.6.9.1:
added FLUSH-STANDARD-OUTPUT-STREAMS in INVOKE-DEBUGGER
applied Raymond Wiker's patch to share the stubs code from
Linux (instead of using BSD-only stubs)

23 years ago0.6.9:
William Harold Newman [Tue, 28 Nov 2000 16:48:59 +0000 (16:48 +0000)]
0.6.9:
MNA debug/error patch: fixes to help view SIGINT problems

23 years ago0.6.8.26:
William Harold Newman [Mon, 27 Nov 2000 17:20:27 +0000 (17:20 +0000)]
0.6.8.26:
MNA megapatch to src/runtime/, zillions of little fixes

23 years ago0.6.8.25:
William Harold Newman [Fri, 24 Nov 2000 18:33:50 +0000 (18:33 +0000)]
0.6.8.25:
redid DEFMETHOD macroexpansion, fixing bug 9 (problems with
IGNORE/IGNORABLE declarations) and generally
tidying up
added copyright boilerplate to tests/*.lisp

23 years ago0.6.8.24:
William Harold Newman [Fri, 24 Nov 2000 14:26:52 +0000 (14:26 +0000)]
0.6.8.24:
fixed bug 8 by replacing (ERROR 'PROGRAM-ERROR ..) by
(ERROR 'SIMPLE-PROGRAM-ERROR ..) everywhere
tweaked MNAME-SYM in DEFMETHOD to avoid dependence on *PACKAGE*

23 years ago0.6.8.23:
William Harold Newman [Tue, 21 Nov 2000 01:15:08 +0000 (01:15 +0000)]
0.6.8.23:
fixed bug 5: TYPE-ERROR-signalling stubs for Gray stream funs

23 years ago0.6.8.22:
William Harold Newman [Mon, 20 Nov 2000 02:10:29 +0000 (02:10 +0000)]
0.6.8.22:
gave up fixing bug 3, documented workaround instead:-|
fixed bug 4: no WARNING for DECLAIM FTYPE for slot accessor fun

23 years ago0.6.8.21:
William Harold Newman [Sun, 19 Nov 2000 17:42:35 +0000 (17:42 +0000)]
0.6.8.21:
rewrote DEBUG-PROMPT to be less confusing when ILISP and SBCL
fight and end up 8+ levels deep in the debugger, then
relented and gave some advance warning of prompt change
deleted unsupported *DEBUG-PROMPT*
We don't really need an END-OF-THE-WORLD restart. The point was
to make sure a naive user can get out with Ctrl-C. So
mention (SB-EXT:QUIT) in entering-the-debugger message.
reduced choice-of-output-stream chaos in debugger

23 years ago0.6.8.x:
William Harold Newman [Thu, 16 Nov 2000 15:46:14 +0000 (15:46 +0000)]
0.6.8.x:
updated NEWS and BUGS to reflect merged MNA megapatch

23 years ago0.6.8.19:
William Harold Newman [Wed, 15 Nov 2000 15:14:48 +0000 (15:14 +0000)]
0.6.8.19:
tweaked debug frame printing to discourage too-long lines
"Arg" is a great abbrev, but not great enough for error msgs.
fixed *DEBUGGER-HOOK* thinko

23 years ago0.6.8.18:
William Harold Newman [Wed, 15 Nov 2000 02:29:38 +0000 (02:29 +0000)]
0.6.8.18:
removed MNA "which patch is this?" comments
removed undocumented "MNA: locally patch" patch

23 years ago0.6.8.17:
William Harold Newman [Mon, 13 Nov 2000 18:16:46 +0000 (18:16 +0000)]
0.6.8.17:
deleted more unused stuff

23 years ago0.6.8.16:
William Harold Newman [Sat, 11 Nov 2000 22:57:14 +0000 (22:57 +0000)]
0.6.8.16:
miscellaneous cleanups

23 years ago0.6.8.15:
William Harold Newman [Sat, 11 Nov 2000 13:17:36 +0000 (13:17 +0000)]
0.6.8.15:
merged DTC's compound CONS type patches
enabled (and fixed) tests in tests/compound-cons.impure.lisp
canonicalized types (CONS *) etc. to (CONS T) etc.

23 years ago0.6.8.14:
William Harold Newman [Fri, 10 Nov 2000 20:21:09 +0000 (20:21 +0000)]
0.6.8.14:
deleted MNA's tweaked version of DTC's compound CONS type

23 years ago0.6.8.13:
William Harold Newman [Thu, 9 Nov 2000 17:51:36 +0000 (17:51 +0000)]
0.6.8.13:
added tests for compound CONS types

23 years ago0.6.8.12:
William Harold Newman [Thu, 9 Nov 2000 16:03:32 +0000 (16:03 +0000)]
0.6.8.12:
removed "MNA: open-coded-simple-array patch"
Argh! typecase-implicit-declarations doesn't add declarations
after all.. just a messy no-op! And when I rewrite it
to 'work', I finally notice it's a fundamentally broken
idea. Gads. Delete it (and hope for real fix for #62).
left small rewrites in CASE-BODY: Naming quantities is good.
exported SB-KERNEL:%PUTHASH so DEFUN sees DEFKNOWN & vice versa
removed bogus FOLDABLEness from hash table accessors

23 years ago0.6.8.11:
William Harold Newman [Wed, 8 Nov 2000 00:18:59 +0000 (00:18 +0000)]
0.6.8.11:
SANE-PACKAGE now issues TYPE-ERROR, not just vanilla ERROR.
removed *COMPILE-TIME-DEFINE-MACROS*
added DTC comments clarifying that "MNA: dump-circular hack"
is a suboptimal solution
added underlying MNA typecase-implicit-declarations problem
to the BUGS list as bug #62
finished reviewing MNA megapatch (but haven't removed
rejected open-coded-simple-array-patch yet)

23 years ago0.6.8.10:
William Harold Newman [Tue, 7 Nov 2000 17:50:11 +0000 (17:50 +0000)]
0.6.8.10:
tested for bug 21, didn't find it, removed it from BUGS.
added SANE-PACKAGE to handle non-PACKAGE values of *PACKAGE*
deleted some unused and redundant stuff from PCL

23 years ago0.6.8.9:
William Harold Newman [Sun, 5 Nov 2000 21:37:59 +0000 (21:37 +0000)]
0.6.8.9:
tweaked DEFCONSTANTs to be more ANSI-compliant (as required
when building using an XC host incorporating changes
from the previous commit) and generally cleaner
        got rid of DEFCONSTANT WRAPPER-LAYOUT completely, which was
used only by STRUCTURE-WRAPPER, which is now gone
added SB-INT:DEFCONSTANT-EQX to help ANSIfy DEFCONSTANTs
merged several small files into primordial-extensions.lisp
converted DEFMACRO DEFCONSTANT to use EVAL-WHEN instead of
IR1 magic, in order to make it ANSI enough for
DEFCONSTANT-EQX to work
removed various nested EVAL-WHENs (to help cross-compiler)
identified bug IR1-3, added workaround in DO-EVAL-WHEN-STUFF
incremented fasl file version (because of mismatch between
old IR1 magic %DEFCONSTANT/%%DEFCONSTANT behavior and
new EVAL-WHEN %DEFCONSTANT behavior)
deleted some unused code
fixed (DEFCONSTANT X 1) (DEFVAR X) (SETF X 2) bug

23 years ago0.6.8.9:
William Harold Newman [Sun, 5 Nov 2000 21:17:21 +0000 (21:17 +0000)]
0.6.8.9:
tweaked DEFCONSTANTs to be more ANSI-compliant (as required
when building using an XC host incorporating changes
from the previous commit) and generally cleaner
        got rid of DEFCONSTANT WRAPPER-LAYOUT completely, which was
used only by STRUCTURE-WRAPPER, which is now gone
added SB-INT:DEFCONSTANT-EQX to help ANSIfy DEFCONSTANTs
merged several small files into primordial-extensions.lisp
converted DEFMACRO DEFCONSTANT to use EVAL-WHEN instead of
IR1 magic, in order to make it ANSI enough for
DEFCONSTANT-EQX to work
removed various nested EVAL-WHENs (to help cross-compiler)
identified bug IR1-3, added workaround in DO-EVAL-WHEN-STUFF
incremented fasl file version (because of mismatch between
old IR1 magic %DEFCONSTANT/%%DEFCONSTANT behavior and
new EVAL-WHEN %DEFCONSTANT behavior)
deleted some unused code
fixed (DEFCONSTANT X 1) (DEFVAR X) (SETF X 2) bug

23 years ago0.6.8.8: undid "MNA: re-defconstant patch", added long explanation
William Harold Newman [Thu, 2 Nov 2000 15:27:41 +0000 (15:27 +0000)]
0.6.8.8: undid "MNA: re-defconstant patch", added long explanation

23 years ago0.6.8.7: working regression tests for problems fixed by MNA megapatch
William Harold Newman [Thu, 2 Nov 2000 00:12:26 +0000 (00:12 +0000)]
0.6.8.7: working regression tests for problems fixed by MNA megapatch

23 years ago0.6.8.6: applied MNA megapatch (will be edited shortly)
William Harold Newman [Wed, 1 Nov 2000 23:58:41 +0000 (23:58 +0000)]
0.6.8.6: applied MNA megapatch (will be edited shortly)

23 years ago0.6.8.5: fixed bug 1, and made clearer/cleaner debugger restarts
William Harold Newman [Wed, 1 Nov 2000 19:37:48 +0000 (19:37 +0000)]
0.6.8.5: fixed bug 1, and made clearer/cleaner debugger restarts

23 years ago0.6.8.3: added CODE-COMPONENT slot for NO-DEBUG-INFO condition
William Harold Newman [Wed, 1 Nov 2000 01:10:03 +0000 (01:10 +0000)]
0.6.8.3: added CODE-COMPONENT slot for NO-DEBUG-INFO condition

23 years ago0.6.8.3: added CODE-COMPONENT slot for NO-DEBUG-INFO condition
William Harold Newman [Tue, 31 Oct 2000 19:40:14 +0000 (19:40 +0000)]
0.6.8.3: added CODE-COMPONENT slot for NO-DEBUG-INFO condition

23 years ago0.6.8.2: converted /SHOW to /SHOW0 in SUB-GC to avoid infinite regress
William Harold Newman [Mon, 30 Oct 2000 18:37:17 +0000 (18:37 +0000)]
0.6.8.2: converted /SHOW to /SHOW0 in SUB-GC to avoid infinite regress

23 years ago made debugger handle errors in printing *DEBUG-CONDITION*
William Harold Newman [Sat, 28 Oct 2000 19:04:57 +0000 (19:04 +0000)]
     made debugger handle errors in printing *DEBUG-CONDITION*

23 years ago0.6.8: tweaked SXHASH DEFTRANSFORMs, fixed HANDLER-BIND
William Harold Newman [Thu, 26 Oct 2000 23:21:10 +0000 (23:21 +0000)]
0.6.8: tweaked SXHASH DEFTRANSFORMs, fixed HANDLER-BIND

23 years ago0.6.7.26: fixed breakpoints on OpenBSD
William Harold Newman [Wed, 25 Oct 2000 02:37:24 +0000 (02:37 +0000)]
0.6.7.26: fixed breakpoints on OpenBSD

23 years ago0.6.7.24: fixed some gcc warnings
William Harold Newman [Sun, 22 Oct 2000 15:31:05 +0000 (15:31 +0000)]
0.6.7.24: fixed some gcc warnings

23 years ago0.6.7.23: Use DEFTRANSFORM CONCATENATE for efficiency after all.
William Harold Newman [Sat, 21 Oct 2000 17:32:17 +0000 (17:32 +0000)]
0.6.7.23: Use DEFTRANSFORM CONCATENATE for efficiency after all.

23 years ago0.6.7.22: removed CVS dollar-Header-dollar tags from sources
William Harold Newman [Fri, 20 Oct 2000 23:30:33 +0000 (23:30 +0000)]
0.6.7.22: removed CVS dollar-Header-dollar tags from sources

23 years ago0.6.7.21: a little less cut-and-paste programming in array.lisp
William Harold Newman [Fri, 20 Oct 2000 20:41:45 +0000 (20:41 +0000)]
0.6.7.21: a little less cut-and-paste programming in array.lisp

23 years ago0.6.7.20: removed DEFTRANSFORMs for some consing string operations
William Harold Newman [Fri, 20 Oct 2000 19:23:10 +0000 (19:23 +0000)]
0.6.7.20: removed DEFTRANSFORMs for some consing string operations

23 years ago0.6.7.19: added stop-compiler-crash patch from Martin Atzmueller
William Harold Newman [Fri, 20 Oct 2000 18:05:09 +0000 (18:05 +0000)]
0.6.7.19: added stop-compiler-crash patch from Martin Atzmueller

23 years ago0.6.7.18: FINISH-OUTPUT is now called more consistently on QUIT.
William Harold Newman [Fri, 20 Oct 2000 15:57:51 +0000 (15:57 +0000)]
0.6.7.18: FINISH-OUTPUT is now called more consistently on QUIT.

23 years ago0.6.7.17: revised fasl/core file version numbers
William Harold Newman [Thu, 19 Oct 2000 18:25:08 +0000 (18:25 +0000)]
0.6.7.17: revised fasl/core file version numbers

23 years ago0.6.7.16: spaces defined as X-START and X-END (not X_START and X_SIZE)
William Harold Newman [Thu, 19 Oct 2000 15:41:08 +0000 (15:41 +0000)]
0.6.7.16: spaces defined as X-START and X-END (not X_START and X_SIZE)

23 years ago0.6.7.15: control_stack stuff redone as Lisp/C constants
William Harold Newman [Wed, 18 Oct 2000 23:08:20 +0000 (23:08 +0000)]
0.6.7.15: control_stack stuff redone as Lisp/C constants

23 years ago0.6.7.14: Some constant C vars are now constants.
William Harold Newman [Wed, 18 Oct 2000 21:39:21 +0000 (21:39 +0000)]
0.6.7.14: Some constant C vars are now constants.

23 years ago0.6.7.13: dynamic-space simplification (only one dynamic space now)
William Harold Newman [Tue, 17 Oct 2000 23:59:29 +0000 (23:59 +0000)]
0.6.7.13: dynamic-space simplification (only one dynamic space now)

23 years ago0.6.7.12: punted various multi-proc code, started cleaning up dynamic-space
William Harold Newman [Tue, 17 Oct 2000 21:38:15 +0000 (21:38 +0000)]
0.6.7.12: punted various multi-proc code, started cleaning up dynamic-space

23 years ago0.6.7.11: another step toward centralizing address map
William Harold Newman [Tue, 17 Oct 2000 18:12:39 +0000 (18:12 +0000)]
0.6.7.11: another step toward centralizing address map

23 years agoa baby step where angels fear to tread.. I'm still heading for a
William Harold Newman [Tue, 17 Oct 2000 14:10:15 +0000 (14:10 +0000)]
a baby step where angels fear to tread.. I'm still heading for a
system where all address constants are defined in one place. I've been
wandering around in a morass of increasingly broken systems (not just
broken s/w -- a flaky graphics adaptor contributed h/w flakiness too)
for quite a while. This version is starting over again with a small
step forward from the last known working state of the system.

23 years agoa step along the way to setting address space parameters in just one place
William Harold Newman [Sat, 7 Oct 2000 15:00:13 +0000 (15:00 +0000)]
a step along the way to setting address space parameters in just one place

23 years agoa step along the way to setting address space parameters in just one place
William Harold Newman [Sat, 7 Oct 2000 14:18:21 +0000 (14:18 +0000)]
a step along the way to setting address space parameters in just one place

23 years agopreparing to move address space parameter settings to a single place
William Harold Newman [Mon, 2 Oct 2000 21:45:09 +0000 (21:45 +0000)]
preparing to move address space parameter settings to a single place

23 years agotidied up OpenBSD-vs.-FreeBSD stuff, and src/runtime/Config.x86-*
William Harold Newman [Mon, 2 Oct 2000 17:27:10 +0000 (17:27 +0000)]
tidied up OpenBSD-vs.-FreeBSD stuff, and src/runtime/Config.x86-*

23 years agocrudely patched to run on OpenBSD (which was broken by dyn lib patches)
William Harold Newman [Mon, 2 Oct 2000 00:58:59 +0000 (00:58 +0000)]
crudely patched to run on OpenBSD (which was broken by dyn lib patches)

23 years agocleanup of previous CVS-check-in mistakes
William Harold Newman [Thu, 28 Sep 2000 15:28:07 +0000 (15:28 +0000)]
cleanup of previous CVS-check-in mistakes

I did "cvs add" for files which I'd overlooked in previous checkins.
I miss pcl-cvs.:-(

23 years agocleanup related to RAW's port of RUN-PROGRAM:
William Harold Newman [Wed, 27 Sep 2000 13:25:20 +0000 (13:25 +0000)]
cleanup related to RAW's port of RUN-PROGRAM:

comment fixes

resurrected SB-UNIX:UNIX-DUP, SB-UNIX:UNIX-IOCTL, and
SB-UNIX:UNIX-PIPE from old cmucl-2.4.8 sources (They'd been
deleted before 'cause nothing used them, but now RUN-PROGRAM
uses them.)

wrote simple regression test for RUN-PROGRAM

fixed dumb bug in QUIT :UNIX-STATUS (which had been exercised by
RUN-PROGRAM regression test)

made the "--noprint" option bind *LOAD-VERBOSE* to NIL (to help write
friendly-to-Unix-pipeline test programs, to help write regression
tests)

23 years agointegrated Raymond Wiker's patches to port RUN-PROGRAM from CMU CL and
William Harold Newman [Mon, 25 Sep 2000 00:11:06 +0000 (00:11 +0000)]
integrated Raymond Wiker's patches to port RUN-PROGRAM from CMU CL and
to generalize dlopen()-ish stuff from Linux to FreeBSD

23 years agoprimarily intending to integrate Colin Walter's O(N) map code and
William Harold Newman [Fri, 22 Sep 2000 15:21:23 +0000 (15:21 +0000)]
primarily intending to integrate Colin Walter's O(N) map code and
fixing BUTLAST (but doing some other stuff too, since achieving the
primary objective involved a lot of inspecting other code):

another revision of MAP stuff, part I:
  * I switched over to code inspired by Colin Walters' O(N) MAP
    code (from the cmucl-imp mailing list 2000 Sep 02) for the
    general non-DEFTRANSFORM case.
  * HIGH-SECURITY-SUPPORT error checking logic goes away, pending
    part II
  * I made some  miscellaneous cleanups of old arity-1 code too.
  * The old MAP-FOR-EFFECT, MAP-TO-LIST, and MAP-TO-SIMPLE macros,
    and the old functions MAP-WITHOUT-ERRORCHECKING, and
    GET-MINIMUM-LENGTH-SEQUENCES go away.
  * The old #+!HIGH-SECURITY length-checking logic goes
    away, to be replaced by stuff in part II.
  * New O(N) functions %MAP-FOR-EFFECT, %MAP-TO-LIST, and
    %MAP-TO-VECTOR are added, and MAP is redefined in terms of them.
  * Add a note pointing out that since MAP-INTO has not been
    rewritten to take advantage of all the new mapping technology,
    it's still slow.
  * Delete no-longer-used ELT-SLICE macro.

another revision of MAP stuff, part II: Peter Van Eynde might go into
a killing frenzy, or at least his ansi-test suite will gnaw SBCL to
death, unless we raise type errors on length mismatches like
  (MAP '(SIMPLE-VECTOR 128) #'+ #(1 2) #(1 1)).
How to do this without clobbering efficiency? More DEFTRANSFORMs, I
think..
  * MAP becomes a wrapper around %MAP. %MAP doesn't do this
    kind of length checking, MAP does. The old DEFUN MAP,
    DEFKNOWN MAP, and DEFTRANSFORM MAP stuff all turns into
    corresponding definitions for %MAP. The wrapper is
    implemented both as a DEFUN MAP and a DEFTRANSFORM MAP.
  * Now make DEFTRANSFORM MAP smarter:
    ** If necessary, check at runtime that ARRAY-DIMENSION
       matches what we pull out of SPECIFIER-TYPE.
    ** No test is done when SPEED > SAFETY.
    ** No test is needed when we can tell at compile time that
       the result type doesn't specify the length of the result.
  * Also add the same kind of ARRAY-DIMENSION/SPECIFIER-TYPE runtime
    check to DEFUN MAP.
  * While I'm at it, since DEFTRANSFORM MAP needs to think hard about
    the type of the result anyway, it might as well declare what
    it's figured out (TRULY-THE) to benefit any code downstream.

Start playing with MAP regression tests. Add tests/assertoid.lisp to
support future regression tests.

Once I started using the QUIT :UNIX-CODE keyword argument in my test
cases, I could see that it isn't very mnemonic. So I changed it to the
more-descriptive name :UNIX-STATUS, leaving the old name supported but
deprecated.

Oops! The old DEFTRANSFORM MAP (now DEFTRANSFORM %MAP) should really
only be done when (>= SPEED SPACE), but it wasn't declared that way.

While looking for an example of a DEFTRANSFORM with &REST arguments
to use as a model for the code in the new DEFTRANSFORM from MAP to
%MAP, I noticed that the problem of taking a list of names and
generating a corresponding list of gensyms is solved in many different
places in the code, in several ways. Also, the related problem of just
creating a list of N gensyms is solved in several places in in the
code. This seems unnecessarily error-prone and wasteful, so I went
looking for such cases and turned them into calls to MAKE-GENSYM-LIST.

another revision of MAP stuff, part III:
  * Search for 'map' in the output from clocc ansi-tests/tests.lisp,
    to check that the new MAP code isn't too obviously broken.
  * Add some regression tests in test/map.impure.lisp.

Oops! The various %MAP-..-ARITY-1 helper functions expect a function
argument, but DEFTRANSFORM MAP can call them passing them a function
name instead.
  * Change the helper functions so that they can handle
    function names as arguments.
  * Define %COERCE-CALLABLE-TO-FUNCTION to help with this. Note that
    this seems to be what %COERCE-NAME-TO-FUNCTION meant long ago,
    judging from DEFTRANSFORM %COERCE-NAME-TO-FUNCTION; so
    appropriate that DEFTRANSFORM for %COERCE-CALLABLE-TO-FUNCTION.
  * Use %COERCE-CALLABLE-TO-FUNCTION elsewhere that expressions
    involving %COERCE-NAME-TO-FUNCTION were used previously.

deleted the old commented-out version of DEFMACRO HANDLER-CASE
(since it was marked "Delete this when the system is stable.":-)

deleted the old commented-out version of GEN-FORMAT-DEF-FORM,
since it was supposed to be safe to do so after sbcl-0.6.4

I removed the apology for not using PRINT-OBJECT everywhere in the
printer from the bugs list in the man page, since it seems to be
rather tricky to construct a test case which exposes the system's
non-PRINT-OBJECT-ness without the test case itself violating the ANSI
spec.

I updated, cleaned up, or removed outright some other outdated or
confusing entries in the BUGS file and from the bugs list on the man
page.

Now that BUTLAST no longer blows up on the new problem cases a la
(BUTLAST NIL -1), I wonder whether I could stop it from blowing
up on the old problem cases a la (BUTLAST NIL)? It looks like
a compiler problem, since the interpreted definition of BUTLAST works,
even though the compiled one doesn't. In fact, it's a declaration
problem, since LENGTH is set to -1 when LIST=NIL, but is declared
as an INDEX. (Of course it's likely also a compiler problem, since
the compiler is supposed to signal type errors for this kind of
declaration error.) I fixed the misdeclaration, and noted the
possible compiler bug in BUGS.

After writing the new revised weird type declarations for the
not-necessarily positive LENGTH, and writing explanatory comments,
  ;; (Despite the name, LENGTH can be -1 when when LIST is an ATOM.)
for each of the cut-and-pasted (LET ((LENGTH ..)) ..) forms in BUTLAST
and NBUTLAST, I said "screw it" -- no, that's not it, I quoted Martin
Fowler and Kent Beck: "If you see the same code structure in more than
one place, you can be sure that your program will be better if you
find a way to unify them," and "It's surprising how often you look at
thickly commented code and notice that the comments are there because
the code is bad." So I just rewrote BUTLAST and NBUTLAST. Hopefully
the new versions will be better-behaved than the old ones.

Now that the INDEX type is used in DEFUN MAKE-GENSYM-LIST, which
belongs in early-extensions.lisp, INDEX should be defined before
early-extensions.lisp, i.e. earlier than its current definition in
early-c.lisp. Move it to early-extensions.lisp. Then to make that
work, since DEF!TYPE is used to define INDEX, defbangtype.lisp needs
to precede early-extensions.lisp in stems-and-flags.lisp-expr; so move
it. Also, INDEX is defined in terms of SB!XC:ARRAY-DIMENSION-LIMIT, so
early-array.lisp needs to move before the new location of
defbangtype.lisp. And then early-vm.lisp needs to move before that, so
I might as well move the rest of the early-vm-ish stuff back too. And
then DEFTYPE is used before deftype.lisp, so I need to change DEFMACRO
DEF!TYPE to DEF!MACRO DEF!TYPE, so I need to move defbangmacro.lisp
before deftype.lisp. (This is like a trip down memory lane to the
endless tweaks and recompiles it took me to find and unravel the
twisted order dependencies which make CMU CL unbootstrappable. Ah,
those were the days..:-)

The DEFTYPEs for INDEX and POSN in early-assem.lisp duplicate
the functionality of the SB-KERNEL:INDEX type.
  * Change uses of the SB-ASSEM::POSN type to uses of the INDEX type.
  * Delete the SB-ASSEM::POSN type and the SB-ASSEM::MAX-POSN constant.
  * Move SB-KERNEL:INDEX into SB-INT, since it's not really
    just a kernel-level thing, but makes sense for implementing
    user-level stuff in SB-INT and SB-EXT and SB-C (and SB-ASSEM).
  * Grep for all '[a-z]:+index[^-a-z]' and rename them (or just
    remove prefixes) to match new SB-INT-ness of INDEX.
  * Make the SB-ASSEM package use the SB-INT package; delete
    the SB-ASSEM::INDEX type and SB-ASSEM::MAX-INDEX constant.
    And since as a rule anything which can see SB-INT deserves
    to see SB-EXT too, make SB-ASSEM use SB-EXT as well.

23 years agoprimarily intending to integrate Colin Walter's O(N) map code and
William Harold Newman [Fri, 22 Sep 2000 15:04:39 +0000 (15:04 +0000)]
primarily intending to integrate Colin Walter's O(N) map code and
fixing BUTLAST (but doing some other stuff too, since achieving the
primary objective involved a lot of inspecting other code):

another revision of MAP stuff, part I:
  * I switched over to code inspired by Colin Walters' O(N) MAP
    code (from the cmucl-imp mailing list 2000 Sep 02) for the
    general non-DEFTRANSFORM case.
  * HIGH-SECURITY-SUPPORT error checking logic goes away, pending
    part II
  * I made some  miscellaneous cleanups of old arity-1 code too.
  * The old MAP-FOR-EFFECT, MAP-TO-LIST, and MAP-TO-SIMPLE macros,
    and the old functions MAP-WITHOUT-ERRORCHECKING, and
    GET-MINIMUM-LENGTH-SEQUENCES go away.
  * The old #+!HIGH-SECURITY length-checking logic goes
    away, to be replaced by stuff in part II.
  * New O(N) functions %MAP-FOR-EFFECT, %MAP-TO-LIST, and
    %MAP-TO-VECTOR are added, and MAP is redefined in terms of them.
  * Add a note pointing out that since MAP-INTO has not been
    rewritten to take advantage of all the new mapping technology,
    it's still slow.
  * Delete no-longer-used ELT-SLICE macro.

another revision of MAP stuff, part II: Peter Van Eynde might go into
a killing frenzy, or at least his ansi-test suite will gnaw SBCL to
death, unless we raise type errors on length mismatches like
  (MAP '(SIMPLE-VECTOR 128) #'+ #(1 2) #(1 1)).
How to do this without clobbering efficiency? More DEFTRANSFORMs, I
think..
  * MAP becomes a wrapper around %MAP. %MAP doesn't do this
    kind of length checking, MAP does. The old DEFUN MAP,
    DEFKNOWN MAP, and DEFTRANSFORM MAP stuff all turns into
    corresponding definitions for %MAP. The wrapper is
    implemented both as a DEFUN MAP and a DEFTRANSFORM MAP.
  * Now make DEFTRANSFORM MAP smarter:
    ** If necessary, check at runtime that ARRAY-DIMENSION
       matches what we pull out of SPECIFIER-TYPE.
    ** No test is done when SPEED > SAFETY.
    ** No test is needed when we can tell at compile time that
       the result type doesn't specify the length of the result.
  * Also add the same kind of ARRAY-DIMENSION/SPECIFIER-TYPE runtime
    check to DEFUN MAP.
  * While I'm at it, since DEFTRANSFORM MAP needs to think hard about
    the type of the result anyway, it might as well declare what
    it's figured out (TRULY-THE) to benefit any code downstream.

Start playing with MAP regression tests. Add tests/assertoid.lisp to
support future regression tests.

Once I started using the QUIT :UNIX-CODE keyword argument in my test
cases, I could see that it isn't very mnemonic. So I changed it to the
more-descriptive name :UNIX-STATUS, leaving the old name supported but
deprecated.

Oops! The old DEFTRANSFORM MAP (now DEFTRANSFORM %MAP) should really
only be done when (>= SPEED SPACE), but it wasn't declared that way.

While looking for an example of a DEFTRANSFORM with &REST arguments
to use as a model for the code in the new DEFTRANSFORM from MAP to
%MAP, I noticed that the problem of taking a list of names and
generating a corresponding list of gensyms is solved in many different
places in the code, in several ways. Also, the related problem of just
creating a list of N gensyms is solved in several places in in the
code. This seems unnecessarily error-prone and wasteful, so I went
looking for such cases and turned them into calls to MAKE-GENSYM-LIST.

another revision of MAP stuff, part III:
  * Search for 'map' in the output from clocc ansi-tests/tests.lisp,
    to check that the new MAP code isn't too obviously broken.
  * Add some regression tests in test/map.impure.lisp.

Oops! The various %MAP-..-ARITY-1 helper functions expect a function
argument, but DEFTRANSFORM MAP can call them passing them a function
name instead.
  * Change the helper functions so that they can handle
    function names as arguments.
  * Define %COERCE-CALLABLE-TO-FUNCTION to help with this. Note that
    this seems to be what %COERCE-NAME-TO-FUNCTION meant long ago,
    judging from DEFTRANSFORM %COERCE-NAME-TO-FUNCTION; so
    appropriate that DEFTRANSFORM for %COERCE-CALLABLE-TO-FUNCTION.
  * Use %COERCE-CALLABLE-TO-FUNCTION elsewhere that expressions
    involving %COERCE-NAME-TO-FUNCTION were used previously.

deleted the old commented-out version of DEFMACRO HANDLER-CASE
(since it was marked "Delete this when the system is stable.":-)

deleted the old commented-out version of GEN-FORMAT-DEF-FORM,
since it was supposed to be safe to do so after sbcl-0.6.4

I removed the apology for not using PRINT-OBJECT everywhere in the
printer from the bugs list in the man page, since it seems to be
rather tricky to construct a test case which exposes the system's
non-PRINT-OBJECT-ness without the test case itself violating the ANSI
spec.

I updated, cleaned up, or removed outright some other outdated or
confusing entries in the BUGS file and from the bugs list on the man
page.

Now that BUTLAST no longer blows up on the new problem cases a la
(BUTLAST NIL -1), I wonder whether I could stop it from blowing
up on the old problem cases a la (BUTLAST NIL)? It looks like
a compiler problem, since the interpreted definition of BUTLAST works,
even though the compiled one doesn't. In fact, it's a declaration
problem, since LENGTH is set to -1 when LIST=NIL, but is declared
as an INDEX. (Of course it's likely also a compiler problem, since
the compiler is supposed to signal type errors for this kind of
declaration error.) I fixed the misdeclaration, and noted the
possible compiler bug in BUGS.

After writing the new revised weird type declarations for the
not-necessarily positive LENGTH, and writing explanatory comments,
  ;; (Despite the name, LENGTH can be -1 when when LIST is an ATOM.)
for each of the cut-and-pasted (LET ((LENGTH ..)) ..) forms in BUTLAST
and NBUTLAST, I said "screw it" -- no, that's not it, I quoted Martin
Fowler and Kent Beck: "If you see the same code structure in more than
one place, you can be sure that your program will be better if you
find a way to unify them," and "It's surprising how often you look at
thickly commented code and notice that the comments are there because
the code is bad." So I just rewrote BUTLAST and NBUTLAST. Hopefully
the new versions will be better-behaved than the old ones.

Now that the INDEX type is used in DEFUN MAKE-GENSYM-LIST, which
belongs in early-extensions.lisp, INDEX should be defined before
early-extensions.lisp, i.e. earlier than its current definition in
early-c.lisp. Move it to early-extensions.lisp. Then to make that
work, since DEF!TYPE is used to define INDEX, defbangtype.lisp needs
to precede early-extensions.lisp in stems-and-flags.lisp-expr; so move
it. Also, INDEX is defined in terms of SB!XC:ARRAY-DIMENSION-LIMIT, so
early-array.lisp needs to move before the new location of
defbangtype.lisp. And then early-vm.lisp needs to move before that, so
I might as well move the rest of the early-vm-ish stuff back too. And
then DEFTYPE is used before deftype.lisp, so I need to change DEFMACRO
DEF!TYPE to DEF!MACRO DEF!TYPE, so I need to move defbangmacro.lisp
before deftype.lisp. (This is like a trip down memory lane to the
endless tweaks and recompiles it took me to find and unravel the
twisted order dependencies which make CMU CL unbootstrappable. Ah,
those were the days..:-)

The DEFTYPEs for INDEX and POSN in early-assem.lisp duplicate
the functionality of the SB-KERNEL:INDEX type.
  * Change uses of the SB-ASSEM::POSN type to uses of the INDEX type.
  * Delete the SB-ASSEM::POSN type and the SB-ASSEM::MAX-POSN constant.
  * Move SB-KERNEL:INDEX into SB-INT, since it's not really
    just a kernel-level thing, but makes sense for implementing
    user-level stuff in SB-INT and SB-EXT and SB-C (and SB-ASSEM).
  * Grep for all '[a-z]:+index[^-a-z]' and rename them (or just
    remove prefixes) to match new SB-INT-ness of INDEX.
  * Make the SB-ASSEM package use the SB-INT package; delete
    the SB-ASSEM::INDEX type and SB-ASSEM::MAX-INDEX constant.
    And since as a rule anything which can see SB-INT deserves
    to see SB-EXT too, make SB-ASSEM use SB-EXT as well.

23 years agoprimarily intending to integrate Colin Walter's O(N) map code and
William Harold Newman [Fri, 22 Sep 2000 14:56:53 +0000 (14:56 +0000)]
primarily intending to integrate Colin Walter's O(N) map code and
fixing BUTLAST (but doing some other stuff too, since achieving the
primary objective involved a lot of inspecting other code):

another revision of MAP stuff, part I:
  * I switched over to code inspired by Colin Walters' O(N) MAP
    code (from the cmucl-imp mailing list 2000 Sep 02) for the
    general non-DEFTRANSFORM case.
  * HIGH-SECURITY-SUPPORT error checking logic goes away, pending
    part II
  * I made some  miscellaneous cleanups of old arity-1 code too.
  * The old MAP-FOR-EFFECT, MAP-TO-LIST, and MAP-TO-SIMPLE macros,
    and the old functions MAP-WITHOUT-ERRORCHECKING, and
    GET-MINIMUM-LENGTH-SEQUENCES go away.
  * The old #+!HIGH-SECURITY length-checking logic goes
    away, to be replaced by stuff in part II.
  * New O(N) functions %MAP-FOR-EFFECT, %MAP-TO-LIST, and
    %MAP-TO-VECTOR are added, and MAP is redefined in terms of them.
  * Add a note pointing out that since MAP-INTO has not been
    rewritten to take advantage of all the new mapping technology,
    it's still slow.
  * Delete no-longer-used ELT-SLICE macro.

another revision of MAP stuff, part II: Peter Van Eynde might go into
a killing frenzy, or at least his ansi-test suite will gnaw SBCL to
death, unless we raise type errors on length mismatches like
  (MAP '(SIMPLE-VECTOR 128) #'+ #(1 2) #(1 1)).
How to do this without clobbering efficiency? More DEFTRANSFORMs, I
think..
  * MAP becomes a wrapper around %MAP. %MAP doesn't do this
    kind of length checking, MAP does. The old DEFUN MAP,
    DEFKNOWN MAP, and DEFTRANSFORM MAP stuff all turns into
    corresponding definitions for %MAP. The wrapper is
    implemented both as a DEFUN MAP and a DEFTRANSFORM MAP.
  * Now make DEFTRANSFORM MAP smarter:
    ** If necessary, check at runtime that ARRAY-DIMENSION
       matches what we pull out of SPECIFIER-TYPE.
    ** No test is done when SPEED > SAFETY.
    ** No test is needed when we can tell at compile time that
       the result type doesn't specify the length of the result.
  * Also add the same kind of ARRAY-DIMENSION/SPECIFIER-TYPE runtime
    check to DEFUN MAP.
  * While I'm at it, since DEFTRANSFORM MAP needs to think hard about
    the type of the result anyway, it might as well declare what
    it's figured out (TRULY-THE) to benefit any code downstream.

Start playing with MAP regression tests. Add tests/assertoid.lisp to
support future regression tests.

Once I started using the QUIT :UNIX-CODE keyword argument in my test
cases, I could see that it isn't very mnemonic. So I changed it to the
more-descriptive name :UNIX-STATUS, leaving the old name supported but
deprecated.

Oops! The old DEFTRANSFORM MAP (now DEFTRANSFORM %MAP) should really
only be done when (>= SPEED SPACE), but it wasn't declared that way.

While looking for an example of a DEFTRANSFORM with &REST arguments
to use as a model for the code in the new DEFTRANSFORM from MAP to
%MAP, I noticed that the problem of taking a list of names and
generating a corresponding list of gensyms is solved in many different
places in the code, in several ways. Also, the related problem of just
creating a list of N gensyms is solved in several places in in the
code. This seems unnecessarily error-prone and wasteful, so I went
looking for such cases and turned them into calls to MAKE-GENSYM-LIST.

another revision of MAP stuff, part III:
  * Search for 'map' in the output from clocc ansi-tests/tests.lisp,
    to check that the new MAP code isn't too obviously broken.
  * Add some regression tests in test/map.impure.lisp.

Oops! The various %MAP-..-ARITY-1 helper functions expect a function
argument, but DEFTRANSFORM MAP can call them passing them a function
name instead.
  * Change the helper functions so that they can handle
    function names as arguments.
  * Define %COERCE-CALLABLE-TO-FUNCTION to help with this. Note that
    this seems to be what %COERCE-NAME-TO-FUNCTION meant long ago,
    judging from DEFTRANSFORM %COERCE-NAME-TO-FUNCTION; so
    appropriate that DEFTRANSFORM for %COERCE-CALLABLE-TO-FUNCTION.
  * Use %COERCE-CALLABLE-TO-FUNCTION elsewhere that expressions
    involving %COERCE-NAME-TO-FUNCTION were used previously.

deleted the old commented-out version of DEFMACRO HANDLER-CASE
(since it was marked "Delete this when the system is stable.":-)

deleted the old commented-out version of GEN-FORMAT-DEF-FORM,
since it was supposed to be safe to do so after sbcl-0.6.4

I removed the apology for not using PRINT-OBJECT everywhere in the
printer from the bugs list in the man page, since it seems to be
rather tricky to construct a test case which exposes the system's
non-PRINT-OBJECT-ness without the test case itself violating the ANSI
spec.

I updated, cleaned up, or removed outright some other outdated or
confusing entries in the BUGS file and from the bugs list on the man
page.

Now that BUTLAST no longer blows up on the new problem cases a la
(BUTLAST NIL -1), I wonder whether I could stop it from blowing
up on the old problem cases a la (BUTLAST NIL)? It looks like
a compiler problem, since the interpreted definition of BUTLAST works,
even though the compiled one doesn't. In fact, it's a declaration
problem, since LENGTH is set to -1 when LIST=NIL, but is declared
as an INDEX. (Of course it's likely also a compiler problem, since
the compiler is supposed to signal type errors for this kind of
declaration error.) I fixed the misdeclaration, and noted the
possible compiler bug in BUGS.

After writing the new revised weird type declarations for the
not-necessarily positive LENGTH, and writing explanatory comments,
  ;; (Despite the name, LENGTH can be -1 when when LIST is an ATOM.)
for each of the cut-and-pasted (LET ((LENGTH ..)) ..) forms in BUTLAST
and NBUTLAST, I said "screw it" -- no, that's not it, I quoted Martin
Fowler and Kent Beck: "If you see the same code structure in more than
one place, you can be sure that your program will be better if you
find a way to unify them," and "It's surprising how often you look at
thickly commented code and notice that the comments are there because
the code is bad." So I just rewrote BUTLAST and NBUTLAST. Hopefully
the new versions will be better-behaved than the old ones.

Now that the INDEX type is used in DEFUN MAKE-GENSYM-LIST, which
belongs in early-extensions.lisp, INDEX should be defined before
early-extensions.lisp, i.e. earlier than its current definition in
early-c.lisp. Move it to early-extensions.lisp. Then to make that
work, since DEF!TYPE is used to define INDEX, defbangtype.lisp needs
to precede early-extensions.lisp in stems-and-flags.lisp-expr; so move
it. Also, INDEX is defined in terms of SB!XC:ARRAY-DIMENSION-LIMIT, so
early-array.lisp needs to move before the new location of
defbangtype.lisp. And then early-vm.lisp needs to move before that, so
I might as well move the rest of the early-vm-ish stuff back too. And
then DEFTYPE is used before deftype.lisp, so I need to change DEFMACRO
DEF!TYPE to DEF!MACRO DEF!TYPE, so I need to move defbangmacro.lisp
before deftype.lisp. (This is like a trip down memory lane to the
endless tweaks and recompiles it took me to find and unravel the
twisted order dependencies which make CMU CL unbootstrappable. Ah,
those were the days..:-)

The DEFTYPEs for INDEX and POSN in early-assem.lisp duplicate
the functionality of the SB-KERNEL:INDEX type.
  * Change uses of the SB-ASSEM::POSN type to uses of the INDEX type.
  * Delete the SB-ASSEM::POSN type and the SB-ASSEM::MAX-POSN constant.
  * Move SB-KERNEL:INDEX into SB-INT, since it's not really
    just a kernel-level thing, but makes sense for implementing
    user-level stuff in SB-INT and SB-EXT and SB-C (and SB-ASSEM).
  * Grep for all '[a-z]:+index[^-a-z]' and rename them (or just
    remove prefixes) to match new SB-INT-ness of INDEX.
  * Make the SB-ASSEM package use the SB-INT package; delete
    the SB-ASSEM::INDEX type and SB-ASSEM::MAX-INDEX constant.
    And since as a rule anything which can see SB-INT deserves
    to see SB-EXT too, make SB-ASSEM use SB-EXT as well.

23 years agoprimarily intending to integrate Colin Walter's O(N) map code and
William Harold Newman [Fri, 22 Sep 2000 14:45:53 +0000 (14:45 +0000)]
primarily intending to integrate Colin Walter's O(N) map code and
fixing BUTLAST (but doing some other stuff too, since achieving the
primary objective involved a lot of inspecting other code):

another revision of MAP stuff, part I:
  * I switched over to code inspired by Colin Walters' O(N) MAP
    code (from the cmucl-imp mailing list 2000 Sep 02) for the
    general non-DEFTRANSFORM case.
  * HIGH-SECURITY-SUPPORT error checking logic goes away, pending
    part II
  * I made some  miscellaneous cleanups of old arity-1 code too.
  * The old MAP-FOR-EFFECT, MAP-TO-LIST, and MAP-TO-SIMPLE macros,
    and the old functions MAP-WITHOUT-ERRORCHECKING, and
    GET-MINIMUM-LENGTH-SEQUENCES go away.
  * The old #+!HIGH-SECURITY length-checking logic goes
    away, to be replaced by stuff in part II.
  * New O(N) functions %MAP-FOR-EFFECT, %MAP-TO-LIST, and
    %MAP-TO-VECTOR are added, and MAP is redefined in terms of them.
  * Add a note pointing out that since MAP-INTO has not been
    rewritten to take advantage of all the new mapping technology,
    it's still slow.
  * Delete no-longer-used ELT-SLICE macro.

another revision of MAP stuff, part II: Peter Van Eynde might go into
a killing frenzy, or at least his ansi-test suite will gnaw SBCL to
death, unless we raise type errors on length mismatches like
  (MAP '(SIMPLE-VECTOR 128) #'+ #(1 2) #(1 1)).
How to do this without clobbering efficiency? More DEFTRANSFORMs, I
think..
  * MAP becomes a wrapper around %MAP. %MAP doesn't do this
    kind of length checking, MAP does. The old DEFUN MAP,
    DEFKNOWN MAP, and DEFTRANSFORM MAP stuff all turns into
    corresponding definitions for %MAP. The wrapper is
    implemented both as a DEFUN MAP and a DEFTRANSFORM MAP.
  * Now make DEFTRANSFORM MAP smarter:
    ** If necessary, check at runtime that ARRAY-DIMENSION
       matches what we pull out of SPECIFIER-TYPE.
    ** No test is done when SPEED > SAFETY.
    ** No test is needed when we can tell at compile time that
       the result type doesn't specify the length of the result.
  * Also add the same kind of ARRAY-DIMENSION/SPECIFIER-TYPE runtime
    check to DEFUN MAP.
  * While I'm at it, since DEFTRANSFORM MAP needs to think hard about
    the type of the result anyway, it might as well declare what
    it's figured out (TRULY-THE) to benefit any code downstream.

Start playing with MAP regression tests. Add tests/assertoid.lisp to
support future regression tests.

Once I started using the QUIT :UNIX-CODE keyword argument in my test
cases, I could see that it isn't very mnemonic. So I changed it to the
more-descriptive name :UNIX-STATUS, leaving the old name supported but
deprecated.

Oops! The old DEFTRANSFORM MAP (now DEFTRANSFORM %MAP) should really
only be done when (>= SPEED SPACE), but it wasn't declared that way.

While looking for an example of a DEFTRANSFORM with &REST arguments
to use as a model for the code in the new DEFTRANSFORM from MAP to
%MAP, I noticed that the problem of taking a list of names and
generating a corresponding list of gensyms is solved in many different
places in the code, in several ways. Also, the related problem of just
creating a list of N gensyms is solved in several places in in the
code. This seems unnecessarily error-prone and wasteful, so I went
looking for such cases and turned them into calls to MAKE-GENSYM-LIST.

another revision of MAP stuff, part III:
  * Search for 'map' in the output from clocc ansi-tests/tests.lisp,
    to check that the new MAP code isn't too obviously broken.
  * Add some regression tests in test/map.impure.lisp.

Oops! The various %MAP-..-ARITY-1 helper functions expect a function
argument, but DEFTRANSFORM MAP can call them passing them a function
name instead.
  * Change the helper functions so that they can handle
    function names as arguments.
  * Define %COERCE-CALLABLE-TO-FUNCTION to help with this. Note that
    this seems to be what %COERCE-NAME-TO-FUNCTION meant long ago,
    judging from DEFTRANSFORM %COERCE-NAME-TO-FUNCTION; so
    appropriate that DEFTRANSFORM for %COERCE-CALLABLE-TO-FUNCTION.
  * Use %COERCE-CALLABLE-TO-FUNCTION elsewhere that expressions
    involving %COERCE-NAME-TO-FUNCTION were used previously.

deleted the old commented-out version of DEFMACRO HANDLER-CASE
(since it was marked "Delete this when the system is stable.":-)

deleted the old commented-out version of GEN-FORMAT-DEF-FORM,
since it was supposed to be safe to do so after sbcl-0.6.4

I removed the apology for not using PRINT-OBJECT everywhere in the
printer from the bugs list in the man page, since it seems to be
rather tricky to construct a test case which exposes the system's
non-PRINT-OBJECT-ness without the test case itself violating the ANSI
spec.

I updated, cleaned up, or removed outright some other outdated or
confusing entries in the BUGS file and from the bugs list on the man
page.

Now that BUTLAST no longer blows up on the new problem cases a la
(BUTLAST NIL -1), I wonder whether I could stop it from blowing
up on the old problem cases a la (BUTLAST NIL)? It looks like
a compiler problem, since the interpreted definition of BUTLAST works,
even though the compiled one doesn't. In fact, it's a declaration
problem, since LENGTH is set to -1 when LIST=NIL, but is declared
as an INDEX. (Of course it's likely also a compiler problem, since
the compiler is supposed to signal type errors for this kind of
declaration error.) I fixed the misdeclaration, and noted the
possible compiler bug in BUGS.

After writing the new revised weird type declarations for the
not-necessarily positive LENGTH, and writing explanatory comments,
  ;; (Despite the name, LENGTH can be -1 when when LIST is an ATOM.)
for each of the cut-and-pasted (LET ((LENGTH ..)) ..) forms in BUTLAST
and NBUTLAST, I said "screw it" -- no, that's not it, I quoted Martin
Fowler and Kent Beck: "If you see the same code structure in more than
one place, you can be sure that your program will be better if you
find a way to unify them," and "It's surprising how often you look at
thickly commented code and notice that the comments are there because
the code is bad." So I just rewrote BUTLAST and NBUTLAST. Hopefully
the new versions will be better-behaved than the old ones.

Now that the INDEX type is used in DEFUN MAKE-GENSYM-LIST, which
belongs in early-extensions.lisp, INDEX should be defined before
early-extensions.lisp, i.e. earlier than its current definition in
early-c.lisp. Move it to early-extensions.lisp. Then to make that
work, since DEF!TYPE is used to define INDEX, defbangtype.lisp needs
to precede early-extensions.lisp in stems-and-flags.lisp-expr; so move
it. Also, INDEX is defined in terms of SB!XC:ARRAY-DIMENSION-LIMIT, so
early-array.lisp needs to move before the new location of
defbangtype.lisp. And then early-vm.lisp needs to move before that, so
I might as well move the rest of the early-vm-ish stuff back too. And
then DEFTYPE is used before deftype.lisp, so I need to change DEFMACRO
DEF!TYPE to DEF!MACRO DEF!TYPE, so I need to move defbangmacro.lisp
before deftype.lisp. (This is like a trip down memory lane to the
endless tweaks and recompiles it took me to find and unravel the
twisted order dependencies which make CMU CL unbootstrappable. Ah,
those were the days..:-)

The DEFTYPEs for INDEX and POSN in early-assem.lisp duplicate
the functionality of the SB-KERNEL:INDEX type.
  * Change uses of the SB-ASSEM::POSN type to uses of the INDEX type.
  * Delete the SB-ASSEM::POSN type and the SB-ASSEM::MAX-POSN constant.
  * Move SB-KERNEL:INDEX into SB-INT, since it's not really
    just a kernel-level thing, but makes sense for implementing
    user-level stuff in SB-INT and SB-EXT and SB-C (and SB-ASSEM).
  * Grep for all '[a-z]:+index[^-a-z]' and rename them (or just
    remove prefixes) to match new SB-INT-ness of INDEX.
  * Make the SB-ASSEM package use the SB-INT package; delete
    the SB-ASSEM::INDEX type and SB-ASSEM::MAX-INDEX constant.
    And since as a rule anything which can see SB-INT deserves
    to see SB-EXT too, make SB-ASSEM use SB-EXT as well.

23 years agoprimarily intending to integrate Colin Walter's O(N) map code and
William Harold Newman [Fri, 22 Sep 2000 14:36:24 +0000 (14:36 +0000)]
primarily intending to integrate Colin Walter's O(N) map code and
fixing BUTLAST (but doing some other stuff too, since achieving the
primary objective involved a lot of inspecting other code):

another revision of MAP stuff, part I:
  * I switched over to code inspired by Colin Walters' O(N) MAP
    code (from the cmucl-imp mailing list 2000 Sep 02) for the
    general non-DEFTRANSFORM case.
  * HIGH-SECURITY-SUPPORT error checking logic goes away, pending
    part II
  * I made some  miscellaneous cleanups of old arity-1 code too.
  * The old MAP-FOR-EFFECT, MAP-TO-LIST, and MAP-TO-SIMPLE macros,
    and the old functions MAP-WITHOUT-ERRORCHECKING, and
    GET-MINIMUM-LENGTH-SEQUENCES go away.
  * The old #+!HIGH-SECURITY length-checking logic goes
    away, to be replaced by stuff in part II.
  * New O(N) functions %MAP-FOR-EFFECT, %MAP-TO-LIST, and
    %MAP-TO-VECTOR are added, and MAP is redefined in terms of them.
  * Add a note pointing out that since MAP-INTO has not been
    rewritten to take advantage of all the new mapping technology,
    it's still slow.
  * Delete no-longer-used ELT-SLICE macro.

another revision of MAP stuff, part II: Peter Van Eynde might go into
a killing frenzy, or at least his ansi-test suite will gnaw SBCL to
death, unless we raise type errors on length mismatches like
  (MAP '(SIMPLE-VECTOR 128) #'+ #(1 2) #(1 1)).
How to do this without clobbering efficiency? More DEFTRANSFORMs, I
think..
  * MAP becomes a wrapper around %MAP. %MAP doesn't do this
    kind of length checking, MAP does. The old DEFUN MAP,
    DEFKNOWN MAP, and DEFTRANSFORM MAP stuff all turns into
    corresponding definitions for %MAP. The wrapper is
    implemented both as a DEFUN MAP and a DEFTRANSFORM MAP.
  * Now make DEFTRANSFORM MAP smarter:
    ** If necessary, check at runtime that ARRAY-DIMENSION
       matches what we pull out of SPECIFIER-TYPE.
    ** No test is done when SPEED > SAFETY.
    ** No test is needed when we can tell at compile time that
       the result type doesn't specify the length of the result.
  * Also add the same kind of ARRAY-DIMENSION/SPECIFIER-TYPE runtime
    check to DEFUN MAP.
  * While I'm at it, since DEFTRANSFORM MAP needs to think hard about
    the type of the result anyway, it might as well declare what
    it's figured out (TRULY-THE) to benefit any code downstream.

Start playing with MAP regression tests. Add tests/assertoid.lisp to
support future regression tests.

Once I started using the QUIT :UNIX-CODE keyword argument in my test
cases, I could see that it isn't very mnemonic. So I changed it to the
more-descriptive name :UNIX-STATUS, leaving the old name supported but
deprecated.

Oops! The old DEFTRANSFORM MAP (now DEFTRANSFORM %MAP) should really
only be done when (>= SPEED SPACE), but it wasn't declared that way.

While looking for an example of a DEFTRANSFORM with &REST arguments
to use as a model for the code in the new DEFTRANSFORM from MAP to
%MAP, I noticed that the problem of taking a list of names and
generating a corresponding list of gensyms is solved in many different
places in the code, in several ways. Also, the related problem of just
creating a list of N gensyms is solved in several places in in the
code. This seems unnecessarily error-prone and wasteful, so I went
looking for such cases and turned them into calls to MAKE-GENSYM-LIST.

another revision of MAP stuff, part III:
  * Search for 'map' in the output from clocc ansi-tests/tests.lisp,
    to check that the new MAP code isn't too obviously broken.
  * Add some regression tests in test/map.impure.lisp.

Oops! The various %MAP-..-ARITY-1 helper functions expect a function
argument, but DEFTRANSFORM MAP can call them passing them a function
name instead.
  * Change the helper functions so that they can handle
    function names as arguments.
  * Define %COERCE-CALLABLE-TO-FUNCTION to help with this. Note that
    this seems to be what %COERCE-NAME-TO-FUNCTION meant long ago,
    judging from DEFTRANSFORM %COERCE-NAME-TO-FUNCTION; so
    appropriate that DEFTRANSFORM for %COERCE-CALLABLE-TO-FUNCTION.
  * Use %COERCE-CALLABLE-TO-FUNCTION elsewhere that expressions
    involving %COERCE-NAME-TO-FUNCTION were used previously.

deleted the old commented-out version of DEFMACRO HANDLER-CASE
(since it was marked "Delete this when the system is stable.":-)

deleted the old commented-out version of GEN-FORMAT-DEF-FORM,
since it was supposed to be safe to do so after sbcl-0.6.4

I removed the apology for not using PRINT-OBJECT everywhere in the
printer from the bugs list in the man page, since it seems to be
rather tricky to construct a test case which exposes the system's
non-PRINT-OBJECT-ness without the test case itself violating the ANSI
spec.

I updated, cleaned up, or removed outright some other outdated or
confusing entries in the BUGS file and from the bugs list on the man
page.

Now that BUTLAST no longer blows up on the new problem cases a la
(BUTLAST NIL -1), I wonder whether I could stop it from blowing
up on the old problem cases a la (BUTLAST NIL)? It looks like
a compiler problem, since the interpreted definition of BUTLAST works,
even though the compiled one doesn't. In fact, it's a declaration
problem, since LENGTH is set to -1 when LIST=NIL, but is declared
as an INDEX. (Of course it's likely also a compiler problem, since
the compiler is supposed to signal type errors for this kind of
declaration error.) I fixed the misdeclaration, and noted the
possible compiler bug in BUGS.

After writing the new revised weird type declarations for the
not-necessarily positive LENGTH, and writing explanatory comments,
  ;; (Despite the name, LENGTH can be -1 when when LIST is an ATOM.)
for each of the cut-and-pasted (LET ((LENGTH ..)) ..) forms in BUTLAST
and NBUTLAST, I said "screw it" -- no, that's not it, I quoted Martin
Fowler and Kent Beck: "If you see the same code structure in more than
one place, you can be sure that your program will be better if you
find a way to unify them," and "It's surprising how often you look at
thickly commented code and notice that the comments are there because
the code is bad." So I just rewrote BUTLAST and NBUTLAST. Hopefully
the new versions will be better-behaved than the old ones.

Now that the INDEX type is used in DEFUN MAKE-GENSYM-LIST, which
belongs in early-extensions.lisp, INDEX should be defined before
early-extensions.lisp, i.e. earlier than its current definition in
early-c.lisp. Move it to early-extensions.lisp. Then to make that
work, since DEF!TYPE is used to define INDEX, defbangtype.lisp needs
to precede early-extensions.lisp in stems-and-flags.lisp-expr; so move
it. Also, INDEX is defined in terms of SB!XC:ARRAY-DIMENSION-LIMIT, so
early-array.lisp needs to move before the new location of
defbangtype.lisp. And then early-vm.lisp needs to move before that, so
I might as well move the rest of the early-vm-ish stuff back too. And
then DEFTYPE is used before deftype.lisp, so I need to change DEFMACRO
DEF!TYPE to DEF!MACRO DEF!TYPE, so I need to move defbangmacro.lisp
before deftype.lisp. (This is like a trip down memory lane to the
endless tweaks and recompiles it took me to find and unravel the
twisted order dependencies which make CMU CL unbootstrappable. Ah,
those were the days..:-)

The DEFTYPEs for INDEX and POSN in early-assem.lisp duplicate
the functionality of the SB-KERNEL:INDEX type.
  * Change uses of the SB-ASSEM::POSN type to uses of the INDEX type.
  * Delete the SB-ASSEM::POSN type and the SB-ASSEM::MAX-POSN constant.
  * Move SB-KERNEL:INDEX into SB-INT, since it's not really
    just a kernel-level thing, but makes sense for implementing
    user-level stuff in SB-INT and SB-EXT and SB-C (and SB-ASSEM).
  * Grep for all '[a-z]:+index[^-a-z]' and rename them (or just
    remove prefixes) to match new SB-INT-ness of INDEX.
  * Make the SB-ASSEM package use the SB-INT package; delete
    the SB-ASSEM::INDEX type and SB-ASSEM::MAX-INDEX constant.
    And since as a rule anything which can see SB-INT deserves
    to see SB-EXT too, make SB-ASSEM use SB-EXT as well.

23 years agoadded various /SHOW0-ish statements to help when debugging internal
William Harold Newman [Wed, 20 Sep 2000 18:50:02 +0000 (18:50 +0000)]
added various /SHOW0-ish statements to help when debugging internal
error handling

The MAKE-SPECIALIZABLE-ARRAY call in DEFUN INTERNAL-ERROR-ARGUMENTS
can become MAKE-ARRAY, since M-S-A is something to make it easier to
build parts of the cross-compiler under the cross-compilation host,
and DEFUN INTERNAL-ERROR-ARGUMENTS is in x86-vm.lisp, which is not
part of the cross-compiler, and so is never compiled by the
cross-compilation host.

changed MAKE-VALID-LISP-OBJ from a MACROLET macro to a global
function, for clarity and easier debugging

deleted unused SET-VALUE macro from MACROLET in DEFERR

deleted code marked REMOVEME, accidentally left over from previous
debugging exercises

changed CONTEXT-PC-ADDR, CONTEXT-PC, CONTEXT-REGISTER-ADDR, and
CONTEXT-REGISTER functions to use unsigned representations instead of
signed representations, to conform to implicit assumptions in the
debug-int code inherited from CMU CL. (Without this, new type errors
are generated in infinite regress when we try to handle errors
involving negative fixnums, e.g. (BUTLAST NIL -1).)

tweaked stuff in test/ directory a little bit in anticipation of
setting up real regression tests

23 years agoInitial revision
William Harold Newman [Mon, 18 Sep 2000 01:26:16 +0000 (01:26 +0000)]
Initial revision