Nikodemus Siivola [Fri, 4 Mar 2011 08:16:48 +0000 (08:16 +0000)]
1.0.46.24: fix MAKE-INSTANCE regression from 1.0.45.19
lp#728650
We cannot use an optimized CTOR if there is an :AROUND method potentially
supplying initialization arguments via CALL-NEXT-METHOD.
So:
* Add SIMPLE-NEXT-METHOD-CALL slot to STANDARD-METHOD: initialize it to T iff
the method doesn't use CALL-NEXT-METHOD at all, or only as
(CALL-NEXT-METHOD).
* Allow an optimized CTOR in the presence of INITIALIZE-INSTANCE :AROUND
methods iff those methods only contain simple forms of CALL-NEXT-METHOD.
jimwise [Thu, 3 Mar 2011 20:01:37 +0000 (20:01 +0000)]
1.0.46.23: fix an actual random bug in mkstemp test
On some platforms (including Solaris, FWIW), the character "." is one of
the characters mkstemp can use when filling in an "XXXXXX" template. When
this (randomly) occurs during the running of this test, PATHNAME-NAME, of
course breaks on the last such random "." character, and the test fails in
a way which will not repeat until the next time such a character is
randomly chosen.
Since readdir actually returns a string, break the string on the first "."
explicitly, instead of making a path from the string and calling
pathname-name.
This will need to be revisited if we add mkstemp support on win32 in the
future.
jimwise [Thu, 3 Mar 2011 19:50:21 +0000 (19:50 +0000)]
1.0.46.22: fix sb-posix readdir on SunOS/x86
for the time being, disable :largefile on SunOS/x86. Unfortunately,
sb-grovel cannot navigate the somewhat sticky way in which struct
dirent gets setup for a 32-bit host with 64-bit ino_t on SunOS, so
sb-posix:readdir breaks
:largefile works fine on SunOS x86_64, and will be re-enabled on x86
after I get some more time to fight with the alien def for struct dirent
Nikodemus Siivola [Wed, 2 Mar 2011 10:59:41 +0000 (10:59 +0000)]
1.0.46.21: renaming oops in MAKE-PACKAGE
When WITH-PACKAGES was renamed WITH-PACKAGE-GRAPH, MAKE-PACKAGE was
not updated -- but amusingly no error was signalled, because
* The form was that of a function call, so no program-error.
* Before the undefined function could be called, a non-local transfer always
took control elsewhere, so no undefined-function error.
Nikodemus Siivola [Wed, 2 Mar 2011 10:21:03 +0000 (10:21 +0000)]
1.0.46.20: better error messages for invalid variables
Based on patch by Roman Marynchak, lp#387333.
* Same code checks for LET and LET* in addition to lambda-lists, so make sure
the messages make sense for both contexts. Binding forms converted to
LAMBDA -- like MULTIPLE-VALUE-BIND -- still get odd messages for duplicate
variable names, though.
* Make the messages for keywords, defined constants, and global lexicals
better.
Nikodemus Siivola [Wed, 2 Mar 2011 09:40:22 +0000 (09:40 +0000)]
1.0.46.19: add :NOT-NULL option to C-STRING type
By default NIL is a valid C-STRING, translated to and from C's NULL. This is
very convenient because many C functions that normally return strings return
NULL to indicate "false" or "don't know" -- and less commonly also special
case it as an argument.
There are however many C functions that don't check for NULL, so we want a
non-horrible way to say that NIL is not a good value to pass on...
...it remains to be seen if this is non-horrible enough, but at least it
fixes a bunch of memory faults from doing things like (posix-getenv nil), and
replaces them with type-errors.
Not all C-STRING types have been audited yet, just a bunch of the more
obvious ones.
Nikodemus Siivola [Wed, 2 Mar 2011 09:30:09 +0000 (09:30 +0000)]
1.0.46.18: terser C-STRING unparsing
Omit parts with default values from the unparsing: just
(C-STRING :EXTERNAL-FORMAT :DEFAULT :ELEMENT-TYPE CHARACTER)
becomes C-STRING, and
(C-STRING :EXTERNAL-FORMAT :UTF-8 :ELEMENT-TYPE CHARACTER)
becomes (C-STRING :EXTERNAL-FORMAT :UTF-8), etc.
Nikodemus Siivola [Mon, 28 Feb 2011 12:12:19 +0000 (12:12 +0000)]
1.0.46.17: nicer STYLE-WARNINGS from IGNORE and IGNORABLE declarations
Fixes lp#726331, based on patch by Robert P. Goldman.
Nikodemus Siivola [Mon, 28 Feb 2011 11:45:36 +0000 (11:45 +0000)]
1.0.46.16: death to "in: LAMBDA NIL" in compiler messages
The LAMBDA NIL was 99% of the time the lambda introduced by
%SIMPLE-EVAL-IN-LEXENV -- in other words totally uninteresting.
Have EVAL save original form, and use that to name the lambda
introduced in %SIMPLE-EVAL-IN-LEXENV:
`(NAMED-LAMBDA (EVAL ,SOURCE-CONTEXT) ...)
Finally, DEFINE-SOURCE-CONTEXT for NAMED-LAMBDA that understands the
source context stashed into the name by %SIMPLE-EVAL-IN-LEXENV.
Additionally, in case there is a legitimate (LAMBDA () ...) form the
compiler wants to complain about, make sure it is printed as LAMBDA (),
not LAMBDA NIL.
Nikodemus Siivola [Mon, 28 Feb 2011 08:57:19 +0000 (08:57 +0000)]
1.0.46.15: fix MAKE-INSTANCE regression from 1.0.45.18
If we use a fake MAKE-INSTANCE emf in the presence of (SETF
SLOT-VALUE-USING-CLASS) or SLOT-BOUNDP-USING-CLASS methods, we need
to initialize the instance vector using +SLOT-UNBOUND+ before any
slots are touched, because accessing any slot can potentially cause
another to be accessed -- which in turn requires boundp information
to be present.
Reported by Slobodan Milnović on sbcl-help.
Nikodemus Siivola [Sat, 26 Feb 2011 16:37:25 +0000 (16:37 +0000)]
1.0.45.14: CHECK-KEY-ARGS didn't take :ALLOW-OTHER-KEYS into account
Cases of interest are:
* No :ALLOW-OTHER-KEYS present for sure.
* :ALLOW-OTHER-KEYS with a non-constant argument, or a non-constant
keyword argument which may turn out to be :ALLOW-OTHER-KEYS at
runtime.
* Constant :ALLOW-OTHER-KEYS NIL.
* Constant :ALLOW-OTHER-KEYS T.
Thanks to Xach for the heads-up!
Nikodemus Siivola [Thu, 24 Feb 2011 08:48:31 +0000 (08:48 +0000)]
1.0.46.13: hopefully fix SB-POSIX tests on Windows 7
Based on patch by Marko Kocić on sbcl-devel.
Nikodemus Siivola [Sun, 20 Feb 2011 16:32:49 +0000 (16:32 +0000)]
1.0.46.12: faster core startup
Patch by Lutz Euler, lp#557357.
Remove unnecessary page_table initialization loop: it is allocated
using calloc, which zero-initializes it -- which as it happens is
enough for us.
Nikodemus Siivola [Sun, 20 Feb 2011 11:48:50 +0000 (11:48 +0000)]
1.0.46.11: faster slot-accesses in the presence of SLOT-VALUE-USING-CLASS &co
* Introducing SLOT-INFO: a structure we save into the each
EFFECTIVE-SLOT-DEFINITION object, which provides us with fast-accesses to
typecheck, reader, writer, and boundp functions for that slot. (These
functions already pre-exist, and currently live directly in the slot
definition objects.)
This replaces typecheckfuns in permutation vectors, and both the
typecheckfun and slotd in slot-tables.
Given this, when we run into SLOT-VALUE in a method body when there is an
applicable non-standard SLOT-VALUE-USING-CLASS, we don't have to punt to
the slow path, but can instead replace the SLOT-VALUE form with
`(funcall (slot-info-reader (svref .pv. (1+ ,pv-offset))) ,parameter)
which is pretty snappy as these things go. Analogously for SET-SLOT-VALUE,
and SLOT-BOUNDP.
* Previously slot typechecking functions were generated as part of the
DEFCLASS expansion and made part of DIRECT-SLOT-DEFINITION objects. This
was a bit wasteful, as (1) we don't need them for direct slot definitions,
and (2) we used to get a separate typechecking function for each slot in
each safe class, even if they all had the same type.
Now there's only one typechecking function per type, and that is saved only
in the SLOT-INFO structure of the relevant effective slot definitions.
* In a couple of places finalize the class a bit earlier if possible to have
a better idea of how to best implement slot
accesses. TRY-FINALIZE-INHERITANCE tries, but refuses if there are forward
referenced superclasses. CAN-OPTIMIZE-ACCESS will signal a compiler-note
about such cases.
* WRAPPER-INSTANCE-SLOTS-LAYOUT now also includes slot-types, and we consider
the instance to be obsoleted when slot-type changes. (This was a bug that
our previous type-check-function setup accidentally worked around.)
Detect slot-type violations while updating instances of safe classes.
Similarly for CHANGE-CLASS.
Nikodemus Siivola [Sun, 20 Feb 2011 10:51:39 +0000 (10:51 +0000)]
1.0.46.10: define STRING-WITH-FILL-POINTER type properly
...can't rely on the evaluation order of type clauses: types aren't
expressions but set specifications.
Nikodemus Siivola [Sun, 20 Feb 2011 10:48:32 +0000 (10:48 +0000)]
1.0.46.9: detect invalid use of :PREDICATE with DEFSTRUCT :TYPE
Based on patch by Roman Marynchak, lp#520607.
In case there are :TYPE and :PREDICATE options specified, :NAMED DEFSTRUCT
option should be specified too. To check this, add the flag for :PREDICATE
option in the function SB-KERNEL::PARSE-DEFSTRUCT-NAME-AND-OPTIONS, and
verify that the flag is set, :TYPEP is set but :NAMED option is not provided.
Also includes the regression test.
Nikodemus Siivola [Sun, 20 Feb 2011 10:43:24 +0000 (10:43 +0000)]
1.0.46.8: warn about (FORMAT "~A" ...)
Add a compiler-macro that only checks if the destination argument is a
literal string.
Fixes lp#327223.
Nikodemus Siivola [Sun, 20 Feb 2011 10:38:12 +0000 (10:38 +0000)]
1.0.46.7: better error message for an invalid lambda in COMPILE, etc
Patch by Roman Marynchak, lp#718905.
Make the error from NAME-LAMBDALIKE clearer.
Nikodemus Siivola [Sun, 20 Feb 2011 10:33:43 +0000 (10:33 +0000)]
1.0.46.6: better MACHINE-VERSION on Darwin
Patch by Josh Elsasser.
Use machdep.cpu.brand_string instead of hw.model.
lp#668332
Nikodemus Siivola [Sun, 20 Feb 2011 10:30:22 +0000 (10:30 +0000)]
1.0.46.5: split (:BACKTRACE :MISC) test into smaller pieces
Nuff said.
Nikodemus Siivola [Sun, 20 Feb 2011 10:27:38 +0000 (10:27 +0000)]
1.0.46.4: redefinition warnings for macros
Similar logic as when not to warn as DEFUN has.
Also refactor the existing redefinition conditions and
uninterestingness-tests a bit.
Nikodemus Siivola [Sun, 20 Feb 2011 10:23:16 +0000 (10:23 +0000)]
1.0.46.3: muffle STYLE-WARNINGs and COMPILER-NOTEs from --script loading
I have a hard time coming up with a case where either is
desirable in a script, and they can be hard to avoid in
some cases.
Fixes lp#677779, and then some.
Nikodemus Siivola [Sun, 20 Feb 2011 10:19:47 +0000 (10:19 +0000)]
1.0.46.2: SB-SPROF: fix threaded wallclock profiling on x86-64
Type error due to reversed argument types in pthread_kill definition.
Nikodemus Siivola [Sun, 20 Feb 2011 10:12:03 +0000 (10:12 +0000)]
1.0.46.1: be careful about stack-allocation in BACKTRACE-AS-LIST
Replace DX objects with heap-allocated ones to avoid leaking invalid
references.
Note: doesn't deal with objects allocated on stacks of other threads
yet, as current %SYMBOL-VALUE-IN-THREAD isn't really something I
want to call during backtracing: iterating over all_threads is a
crock.
Fixes lp#310175.
Juho Snellman [Sun, 20 Feb 2011 04:48:34 +0000 (04:48 +0000)]
1.0.46: will be tagged as sbcl_1_0_46
Juho Snellman [Fri, 18 Feb 2011 01:12:02 +0000 (01:12 +0000)]
1.0.45.36: Fix solaris x86-64 page size issue
* Patch lp#720800 from Jim Wise
Nikodemus Siivola [Wed, 16 Feb 2011 10:35:57 +0000 (10:35 +0000)]
1.0.45.35: revert 1.0.45.30 due to regression (lp#677779)
Reported by Ariel Badichi on sbcl-devel.
Using WITH-COMPILATION-UNIT to silence UNDEFINED-FUNCTION style-warnings for
forward-referenced functions was a bad idea after all: it caused cores dumped
using it to be started with **WORLD-LOCK** held by a dead thread.
...and it's not like WITH-COMPILATION-UNIT would ever get to summarize the
unit anyways the way it was used there.
Proper fix for this is to use UNDEFINED-REFERENCE-STYLE-WARNING as separate
condition class and just muffle those -- but this is too much to put in
during the freeze and will wait till after 1.0.46.
Nikodemus Siivola [Tue, 15 Feb 2011 12:01:55 +0000 (12:01 +0000)]
1.0.45.34: #+sb-thread the new waitqueue printing test
In despite the freeze as this is test-fix and a regression.
Thanks to Harald Hanche-Olsen for the heads-up.
Nikodemus Siivola [Mon, 14 Feb 2011 15:08:06 +0000 (15:08 +0000)]
1.0.45.33: optimize CHARPOS on string-streams
The POSITION in STRING-OUT-MISC wasn't getting optimized at all due
to insufficient type-information.
This speeds up pretty-printing on string-streams somewhat.
Nikodemus Siivola [Sun, 13 Feb 2011 20:34:14 +0000 (20:34 +0000)]
1.0.45.32: export SB-PCL:+SLOT-UNBOUND+
Using STANDARD-INSTANCE-ACCESS with this provided is much nicer --
no need to muck around with SLOT-BOUNDP-USING-CLASS and such.
Also add quick SIA tests and some dependant update abuse
to tests.
lp#718039
Nikodemus Siivola [Sun, 13 Feb 2011 20:29:21 +0000 (20:29 +0000)]
1.0.45.31: make COPY-PPRINT-DISPATCH have access to a pristine table
...so that it can always be used to restore the original.
Fixes lp#678409.
Also add missing NEWS entry for last commit.
Nikodemus Siivola [Sun, 13 Feb 2011 20:22:08 +0000 (20:22 +0000)]
1.0.45.30: wrap --script loading in a WITH-COMPILATION-UNIT
Avoid UNDEFINED-FUNCTION warnings for code like
(defun foo () (bar))
(defun bar () 42)
by wrapping the LOAD done by --script in a WITH-COMPILATION-UNIT.
Fixes lp#677779.
Nikodemus Siivola [Sat, 12 Feb 2011 15:54:21 +0000 (15:54 +0000)]
1.0.45.29: fix a copy and paste comment error
Patch by William Halliburton, lp#710024.
Plus missing NEWS entry for last commit.
Nikodemus Siivola [Sat, 12 Feb 2011 15:51:47 +0000 (15:51 +0000)]
1.0.45.28: add LIMIT and PRINT-NO-CALL-LIST arguments to SB-PROFILE:REPORT
Patch by William Halliburton, lp#710017.
These arguments are used to control the amount of information printed
by REPORT as many times you are only looking for the top contenders
and the other information is unnecessary and, at times, inundating.
Nikodemus Siivola [Sat, 12 Feb 2011 15:49:21 +0000 (15:49 +0000)]
1.0.45.27: fix a typo in the manual
Patch by "adicarlo", lp#706139.
Correct name of special var that turns off beginner's help in
the debugger.
Nikodemus Siivola [Sat, 12 Feb 2011 15:45:38 +0000 (15:45 +0000)]
1.0.45.26: fix a long-standing UNINTERN bug
Patch by Stas Boukarev, lp#693796.
UNINTERN is specified to take a symbol, not a symbol
designator: if P1 has the symbol P1:S, which is not EQ
to P2:S, then (UNINTERN 'P2:S :P1) should not remove
P1:S from P1.
Nikodemus Siivola [Sat, 12 Feb 2011 15:42:48 +0000 (15:42 +0000)]
1.0.45.25: better constant folding in arithmetic functions
Patch by Heka Deep, lp#676414, edited to retain identities
and added a random-tester.
* Folds constants in expressions such as (+ 3 a 5 b 7 c).
* Constants are collected by calling the `reduce-constants' function
from the `source-transform-transitive' and
`source-transform-intransitive' functions. Constants adding up to
identities are retained so that SNaNs don't sneak past.
Nikodemus Siivola [Sat, 12 Feb 2011 15:38:32 +0000 (15:38 +0000)]
1.0.45.24: minor MAKE-TIMER cleanups
Patch by Brit Butler, lp#672252.
* Improve the docstring for SB-EXT:MAKE-TIMER.
* Add a minor comment to unschedule-timer.
...with minor edits by yours truly, including dropping
the bogus SCHEDULE-TIMER change from the original patch.
Nikodemus Siivola [Sat, 12 Feb 2011 15:22:25 +0000 (15:22 +0000)]
more pedantic clean.sh
Patch by Jim Wise, lp#666884.
Takes care of the few cases of temporary files which are currently
left behind after running clean.sh.
While there, it normalizes the name used for scratch files used in
contrib testing, and updates .cvsignore to match.
This is obviously pedantry, but it's nice to have a clean tree at
the end of clean.sh.
Nikodemus Siivola [Sat, 12 Feb 2011 15:18:59 +0000 (15:18 +0000)]
1.0.45.22: non-racy RUN-PROGRAM :PTY on OpenBSD
Patch by Josh Elsasser, lp#669485.
Lifts out the pty-setting logic into its own function
for clarity.
Nikodemus Siivola [Sat, 12 Feb 2011 15:12:01 +0000 (15:12 +0000)]
1.0.45.21: whitespace damage from ctor patches
Die tabs, die!
Nikodemus Siivola [Fri, 11 Feb 2011 17:41:46 +0000 (17:41 +0000)]
1.0.45.20: optimize ERROR and CERROR
They were both surprisingly slow as we looked for a *STACK-TOP-HINT*
before calling SIGNAL.
The hint is needed (and was used) only for the INVOKE-DEBUGGER case,
however, so there is no need to pay that price if SIGNAL is enough
-- eg. when there's a handler.
Fixes lp#715191.
Also missing NEWS items for the CTOR hackery.
Nikodemus Siivola [Fri, 11 Feb 2011 17:34:46 +0000 (17:34 +0000)]
1.0.45.19: more comprehensive CTOR optimization, part 2
Extend CTOR optimizations to cover classes with :AROUND
methods on INITIALIZE-INSTANCE.
Happily SBCL's CALL-NEXT-METHOD is implemented so that we can just
stick a function in the list of next-methods instead of mucking
about with MAKE-METHOD &co...
Nikodemus Siivola [Fri, 11 Feb 2011 17:30:50 +0000 (17:30 +0000)]
1.0.45.18: more comprehensive CTOR optimization
Allows using optimized constructors in the presence of (SETF
SLOT-VALUE-USING-CLASS) and SLOT-BOUNDP-USING-CLASS methods.
Simply generate calls to appropriate generic functions
instead of using CLOS-SLOTS-REF directly.
Nikodemus Siivola [Fri, 11 Feb 2011 17:25:55 +0000 (17:25 +0000)]
1.0.45.17: give CONSTANTLY some love
Replace the source-transform with a DERIVE-TYPE optimizer: there are
essentially no cases where the source transform improves performance.
Make sure the out-of-line version has the right lambda-list.
Fixes lp#713626.
Nikodemus Siivola [Fri, 11 Feb 2011 17:20:10 +0000 (17:20 +0000)]
1.0.45.16: *features* tweaks for Solaris targets
A mistake in make-config.sh ("amd64" for "x86-64") was preventing
:sb-lutex from being enabled on Solaris x86-64.
While here, enable :largefile for Solaris (all platforms)
Patch by Jim Wise, lp#667297.
Nikodemus Siivola [Fri, 11 Feb 2011 17:15:26 +0000 (17:15 +0000)]
1.0.45.15: make waitqueue printing prettier
Fixes lp#673630: just print the name, if any. The token is an
implementation detail, and can blow the stack if *print-circle* is
not set.
Nikodemus Siivola [Fri, 11 Feb 2011 16:59:56 +0000 (16:59 +0000)]
1.0.45.14: fix handling of multibyte character encoding errors
In encodings defined using DEFINE-MULTIBYTE-ENCODING, if there is no
translation for the character, report the size as 0 -- replacements
get their size accounted for elsewhere.
Fixes lp#713063.
Alastair Bridgewater [Fri, 21 Jan 2011 16:40:53 +0000 (16:40 +0000)]
1.0.45.13: physenvanal: Treat all functions without XEPs as being D-X.
* In order for a function to be returned or passed as a parameter,
it must have an XEP.
* Functions without XEPs, therefore, can only be called directly
from within their lexical scope. They are, therefore,
dynamic-extent.
* But wait, you say, they could be called from a closure that is
not dynamic-extent, which clearly shows such an analysis to be false.
* It turns out that this doesn't matter, because the non-dynamic-
extent closure also has to close over the variables passed to the
supposedly-dynamic-extent closure, and that will cause explicit
value-cells to be allocated anyway.
* So, it's a bit of an abuse to say that the functions have dynamic
extent, but it does no harm (and quite a bit of good) to treat them
as if they do.
Cyrus Harmon [Fri, 21 Jan 2011 15:49:47 +0000 (15:49 +0000)]
1.0.45.12: remove spurious reference to ${make_flags} in grovel-features.sh
Cyrus Harmon [Fri, 21 Jan 2011 15:42:00 +0000 (15:42 +0000)]
1.0.45.11: remove inadvertant comment change from last commit
Cyrus Harmon [Fri, 21 Jan 2011 05:53:41 +0000 (05:53 +0000)]
1.0.45.10: tools-for-build/Makefile path fixes
* make include rules non-breaking and use path relative to the path
setup via -I (src/runtime). This should fix things such that both
clean.sh and make.sh should now work.
Cyrus Harmon [Thu, 20 Jan 2011 18:21:37 +0000 (18:21 +0000)]
1.0.45.9: fix building on recent linux
* Recent linux changes caused waitpid foreign symbol to go away so add it to
undefineds and ldso-stubs
* Recent linux linker default flags changes (--as-needed?) caused dlopen and
friends to not be found at link time. Fix the tools-for-build/Makefile
to pick up the build options from Config and fix grovel-features.sh to
put the libs in LDLIBS instead of LDFLAGS
Cyrus Harmon [Thu, 20 Jan 2011 18:12:20 +0000 (18:12 +0000)]
1.0.45.8: fix os_vm_page_size on freebsd, openbsd and osf1
* use BACKEND_PAGE_BYTES instead of getpagesize() to match change to
backend-parms in 1.0.45.7
cracauer [Wed, 19 Jan 2011 22:33:27 +0000 (22:33 +0000)]
1.0.45.7: set *backend-page-bytes* to 32KB
* Setting *backend-page-bytes* to 32KB. I did test runs with
different *backend-page-bytes* values and 32KB clearly came out on top
performance-wise. It also delays (not avoids) the problem of running
out of maximum mappings allowed by current kernel settings.
cracauer [Wed, 19 Jan 2011 22:14:52 +0000 (22:14 +0000)]
1.0.45.5: life: fix slow compile.
* Committing a patch I once got from Nikodemus. Without it my toy
takes more than a week to compile. I've been using this since
November in production, seems to work well. Should probably have made
it into 1.0.44.28.
;;; FASTP is a KLUDGE: SBCL used to update the current-conflict only
;;; for the read-only case, but switched at one point to always
;;; updating it. This generally speeds up the compiler nicely, but
;;; sometimes it causes an infinite loop in the updating machinery,
;;; We cheat by switching of the fast path if it seems we're looping
;;; longer then expected.
Alastair Bridgewater [Wed, 19 Jan 2011 21:59:23 +0000 (21:59 +0000)]
1.0.45.5: life: Propagate implicit value cells through tail-calls.
* When setting up "environment tn conflicts", recurse through
callee environments when processing a block that ends in a tail
local combination and a TN that represents an "implicit" value
cell.
* This closes the hole where a tail-local-call would replace
the stack frame which allocated a closed-over lambda-var, but
the inbound stack frame didn't know about the storage for the
variable, leading to badness. Hopefully the last bug with the
dynamic-extent closure representation changes.
* This patch fixes what 1.0.44.34 was supposed to KLUDGE
around, and finishes fixing lp#681092 (the first half of the
fix being 1.0.44.33).
Juho Snellman [Sun, 19 Dec 2010 01:29:05 +0000 (01:29 +0000)]
1.0.45.4: Revert 1.0.44.34
* Caused CLX compilation to fail, added reduced test case by
Larry Valkama.
Juho Snellman [Mon, 6 Dec 2010 02:33:28 +0000 (02:33 +0000)]
1.0.45.3: Whitespace cleanup
Juho Snellman [Mon, 6 Dec 2010 02:28:02 +0000 (02:28 +0000)]
1.0.45.2: A slightly better error message for malformed reader conditional
* Modified from lp#680173 by Roman Marynchak
Juho Snellman [Mon, 6 Dec 2010 01:59:10 +0000 (01:59 +0000)]
1.0.45: Disables the TRACE :ENCAPSULATE NIL test on Solaris
* Patch by Jim Wise (lp#666885)
Juho Snellman [Mon, 6 Dec 2010 01:25:53 +0000 (01:25 +0000)]
1.0.45: will be tagged as sbcl_1_0_45
Christophe Rhodes [Sat, 27 Nov 2010 21:08:53 +0000 (21:08 +0000)]
1.0.44.36: test case for bug #681092
From the bug report. Also remove needless quotes in some test names.
Alastair Bridgewater [Sat, 27 Nov 2010 03:02:03 +0000 (03:02 +0000)]
1.0.44.35: Use DX-FLET instead of FLET in WITHOUT-{INTERRUPTS,GCING}.
* With the local functions declared to be DYNAMIC-EXTENT, the
new d-x closure analysis can elide the value cells involved
entirely.
* This fixes lp#674458 (introduced in 1.0.44.16).
Alastair Bridgewater [Sat, 27 Nov 2010 03:01:50 +0000 (03:01 +0000)]
1.0.44.34: gtn: KLUDGE the lambda-var assignment to not break tail-calls.
* As an utter KLUDGE, when assigning TNs for closed-over lambda
variables with implicit value-cells, make the TNs component-live
instead of physenv-live. This prevents any possible problems with
the new physenv introduced by a tail-call overwriting the storage
for the variable.
Alastair Bridgewater [Sat, 27 Nov 2010 03:01:34 +0000 (03:01 +0000)]
1.0.44.33: ir2tran: Correctly set up d-x closure values for tail-local-calls.
* Tail-local-call re-uses the current frame. It therefore needs to
use the old-fp value from the current frame in EMIT-PSETQ-MOVES.
* "implicit" value cells need to use the /current/ frame pointer in
EMIT-PSETQ-MOVES to correctly initialize the closure.
* Therefore: Add a new &optional argument to EMIT-PSETQ-MOVES for
the frame-pointer to be used in closure initialization.
* This fixes the obvious part of lp#681092, but unless there is a
guarantee that the stack slots used for the "implicit" value cells
remain unused in the tail-called function then all this does is drive
the bug to become more subtle.
Nikodemus Siivola [Fri, 19 Nov 2010 10:57:30 +0000 (10:57 +0000)]
1.0.44.32: better error reporting for malformed RESTART-CASE clauses
Detect missing lambda-lists.
...and missing -o to canonicalize-whitespace.
Nikodemus Siivola [Fri, 19 Nov 2010 10:54:44 +0000 (10:54 +0000)]
1.0.44.31: fix canonicalize-whitespace
...missing -o from last commit.
Nikodemus Siivola [Fri, 19 Nov 2010 10:13:40 +0000 (10:13 +0000)]
1.0.44.30: don't canonicalize whitespace in ASDF
ASDF isn't that tightly coupled to SBCL anymore -- and munging
the whitespace there just makes comparing SBCL and upstream ASDFs
more difficult.
Nikodemus Siivola [Thu, 18 Nov 2010 13:52:06 +0000 (13:52 +0000)]
1.0.44.29: full warnings for duplicate CASE keys during SBCL build
...and fix the issue revealed.
Thanks to Cyrus Harmon for the heads-up.
Nikodemus Siivola [Thu, 18 Nov 2010 12:02:45 +0000 (12:02 +0000)]
1.0.44.28: allow approximating unions of numeric types
(dummy commit: change described here happened in the last commit really,
but the commit message was subtly wrong and missed the version number)
* Binding *APPROXIMATE-NUMERIC-UNIONS* does that. It must be bound
only by callers of TYPE-UNION that know what they want -- in general
(OR (INTEGER 1 2) (INTEGER 4 4)) => (INTEGER 1 4)
is wrong, as (NOT (INTEGER 1 4)) doesn't include 3. But in special cases
like deriving the return type of a function it can be done.
* Rename MAKE-CANONICAL-UNION-TYPE MAKE-DERIVED-UNION-TYPE, and bind *A-N-U*
there if we start accumulating an overly large union of numeric types.
Definition of "overly large" can be adjusted via
*DERIVED-NUMERIC-UNION-COMPLEXITY-LIMIT*.
* Fixes lp#309448 and the recent compiler performance regression due
to new CONCATENATE deftransform as reported on sbcl-devel.
Nikodemus Siivola [Thu, 18 Nov 2010 11:28:46 +0000 (11:28 +0000)]
allow approximating unions of numeric types
* Binding *APPROXIMATE-NUMERIC-UNIONS* does that. It must be bound
only by callers of TYPE-UNION that know what they want -- in general
(OR (INTEGER 1 2) (INTEGER 3 4)) => (INTEGER 1 4)
is wrong, as (NOT (INTEGER 1 4)) doesn't include 3. But in special cases
like deriving the return type of a function it can be done.
* Rename MAKE-CANONICAL-UNION-TYPE MAKE-DERIVED-UNION-TYPE, and bind *A-N-U*
there if we start accumulating an overly large union of numeric types.
Definition of "overly large" can be adjusted via
*DERIVED-NUMERIC-UNION-COMPLEXITY-LIMIT*.
* Fixes lp#309448 and the recent compiler performance regression due
to new CONCATENATE deftransform as reported on sbcl-devel.
Nikodemus Siivola [Thu, 18 Nov 2010 10:06:30 +0000 (10:06 +0000)]
1.0.44.27: update ASDF to 2.010
Nikodemus Siivola [Tue, 16 Nov 2010 18:18:03 +0000 (18:18 +0000)]
1.0.44.26: more nuanced deprecation framework
DEFINE-DEPRECATED-FUNCTION is the new one-stop shop for the "common"
case of deprecating a function in favor of another one.
...in cases where it is not sufficient, call DEPRECATION-WARNING or
DEPRECATION-ERROR directly from the compiler or other place.
Three stages: :EARLY signals a compile-time style-warning, :LATE
signals a compile-time full warning, :FINAL a compile-time full
warning and a run-time error.
(This is based on the assumption that this is both a sufficient and
desirably nuanced taxonomy -- if more or less is wanted, changing
this later is easy enough.)
SB-EXT:DEPRECATION-CONDITION is the base class of all deprecation
warnings and errors, but it isn't yet documented: once we have a
concensus of sorts on a deprecation protocol/schedule, I will write
the appropriate bits in the manual.
Everything that previously had a deprecation warning is now in :LATE
stage, except for INSTANCE-LAMBDA which is now in :FINAL stage.
Nikodemus Siivola [Tue, 16 Nov 2010 17:57:45 +0000 (17:57 +0000)]
1.0.44.25: don't put function leaves into the source-path when a name is available
#<SB-C::DEFINED-FUN ...> in compiler notes is a bit hard to read, not
to mention obscure.
Nikodemus Siivola [Tue, 16 Nov 2010 15:17:10 +0000 (15:17 +0000)]
1.0.44.24: tweak CAREFUL-EXPAND-MACRO
Don't resignal warnings and style-warnings -- aside from the CMUCL
cross-compiler KLUDGEry. They tend to be intentionally signalled by macro
and compiler-macro authors, and the additional wrapper-text provided by the
resignaling mostly just obfuscates the actual message.
That leaves errors (and the aforementioned KLUDGE.)
For these, less parentheses, more whitespace -- specifically, leave space
around the actual warning/error message, instead of crowding in with the
parenthetical remarks.
Nikodemus Siivola [Mon, 15 Nov 2010 17:43:37 +0000 (17:43 +0000)]
1.0.44.23: replace %METHOD-NAME and %METHOD-LAMBDA-LIST decls with special variables
This not only simplifies PCL code, but fixes a long-standing MOP-bug
and actually gives us SB-PCL:SLOW-METHOD frames in the backtraces.
Previously a fairly trivial MAKE-METHOD-LAMBDA method was enough
to cause
(defmethod foo (x) (return-from foo t))
to break, as MAKE-METHOD-LAMBDA-INTERNAL no longer found the %METHOD-NAME
declaration in the expected place, and hence was unable to add the block
name.
Nikodemus Siivola [Wed, 10 Nov 2010 17:52:05 +0000 (17:52 +0000)]
1.0.44.22: NEWS entry left out from 1.0.44.21.
EOM.
Nikodemus Siivola [Wed, 10 Nov 2010 17:49:30 +0000 (17:49 +0000)]
1.0.44.21: expand ~ in pathnames
~/... => (:ABSOLUTE :HOME ...)
~user/... => (:ABSOLUTE (:HOME "user") ...)
Translation back to NAMESTRING reinstates the tilde, so we retain
read/write consistency.
NATIVE-NAMESTRING is responsible for getting the actual full path
to specified home directory.
This late resolution is necessary to have (open "~/foo") and
(open #p"~/foo") open the same file in compiled code -- regardless
of who compiled the file.
Tilde is treated specially only at the start of the first directory
component: it doesn't need to be escaped anywhere else. After trying
out the various options (escape everywhere, escape in directory
components, escape at the start of directory components, escape at
the start of all components) this seemed both least intrusive and
least ambiguous when documented -- not to mention most backwards
compatible.
Currently escaping the tilde does not work on Windows, but this is due to
current general inability to escape the first directory component on
Windows, since \\ is used also as a directory separator for non-native
pathnames as well. See lp#673625. Test-case added for this.
(:HOME "user") also doesn't work on Windows, which is documented
in the manual.
Nikodemus Siivola [Wed, 10 Nov 2010 17:39:25 +0000 (17:39 +0000)]
1.0.44.20: clarify meaning of make.sh --dynamic-space-size option
EOM.
Alastair Bridgewater [Tue, 9 Nov 2010 19:46:49 +0000 (19:46 +0000)]
1.0.44.19: NEWS: Updates for changes starting at 1.0.44.6.
* EOM.
Alastair Bridgewater [Tue, 9 Nov 2010 19:46:33 +0000 (19:46 +0000)]
1.0.44.18: physenvanal: When checking closure-DXness, handle XEPs reasonably.
* In ANALYZE-INDIRECT-LAMBDA-VARS, treat functionals as being DX if
either they are marked as being DX or they have a FUNCTIONAL-ENTRY-FUN
that is marked as being DX.
* This extends the existing logic to allow functions with XEPs (those
functions callable via the full-call convention) to use the
ANCESTOR-FRAME optimizations.
Alastair Bridgewater [Tue, 9 Nov 2010 19:45:50 +0000 (19:45 +0000)]
1.0.44.17: ir1: Declare UNWIND-PROTECT cleanup functions to be dynamic-extent.
* Since we now have the analysis to do the right thing
for these functions, why not take advantage of it?
Alastair Bridgewater [Tue, 9 Nov 2010 19:45:36 +0000 (19:45 +0000)]
1.0.44.16: ir2tran: Don't try to stack-allocate VALUE-CELLs.
* Explicit VALUE-CELLs are only used if a closure that refers
to a mutable LAMBDA-VAR has indefinite extent, implying that the
reference itself has indefinite extent. In such cases, dynamic
extent allocation of the VALUE-CELL is contraindicated.
* Remove most of the logic from EMIT-MAKE-VALUE-CELL, leaving
only the statistics-tracking (EVENT) and the VOP emission,
forcing the new VALUE-CELL to be heap-allocated.
Alastair Bridgewater [Tue, 9 Nov 2010 19:45:23 +0000 (19:45 +0000)]
1.0.44.15: ir2: Skip value-cell allocation where possible.
* Expose the new ANCESTOR-FRAME VOPs in package-data.lisp-expr.
* When creating TNs for closed-over LAMBDA-VARs with "implicit"
VALUE-CELLs, force the TNs to be allocated on the control-stack,
and to be live over the entire extent of the PHYSENV.
* When translating a REF or SET node for such LAMBDA-VARs from
a NODE in a CLAMBDA with a different PHYSENV, use the new VOPs to
access the LAMBDA-VAR.
* When setting up a closure for such LAMBDA-VARs from a NODE in
a CLAMBDA with the same PHYSENV as the variable, use the new
CLOSURE-INIT-FROM-FP VOP to stash the frame pointer instead of a
VALUE-CELL or the current value of the variable.
* When setting up the closure environment for a local-call that
closes over such a LAMBDA-VAR, and the call is being made from a
NODE in a CLAMBDA with the same PHYSENV as the variable, store the
current frame-pointer instead of a VALUE-CELL or the current value
of the variable.
Alastair Bridgewater [Tue, 9 Nov 2010 19:45:09 +0000 (19:45 +0000)]
1.0.44.14: x86-64: Implement ANCESTOR-FRAME VOPs.
* This is the x86-64 version of the "implicit" VALUE-CELL access
for DYNAMIC-EXTENT closures.
Alastair Bridgewater [Tue, 9 Nov 2010 19:44:53 +0000 (19:44 +0000)]
1.0.44.13: x86: Implement ANCESTOR-FRAME VOPs.
* This is the x86 version of the "implicit" VALUE-CELL access
for DYNAMIC-EXTENT closures.
Alastair Bridgewater [Tue, 9 Nov 2010 19:44:41 +0000 (19:44 +0000)]
1.0.44.12: sparc: Implement ANCESTOR-FRAME VOPs.
* This is the SPARC version of the "implicit" VALUE-CELL access
for DYNAMIC-EXTENT closures.
* This commit is untested, but should work, as it is based on
the PPC changes, which were tested.
Alastair Bridgewater [Tue, 9 Nov 2010 19:44:22 +0000 (19:44 +0000)]
1.0.44.11: ppc: Implement ANCESTOR-FRAME VOPs.
* This is the PPC version of the "implicit" VALUE-CELL access
for DYNAMIC-EXTENT closures.
Alastair Bridgewater [Tue, 9 Nov 2010 19:44:09 +0000 (19:44 +0000)]
1.0.44.10: mips: Implement ANCESTOR-FRAME VOPs.
* This is the MIPS version of the "implicit" VALUE-CELL access
for DYNAMIC-EXTENT closures.
* This commit is untested, but should work, as it is based on
the PPC changes, which were tested.
Alastair Bridgewater [Tue, 9 Nov 2010 19:43:56 +0000 (19:43 +0000)]
1.0.44.9: hppa: Implement ANCESTOR-FRAME VOPs.
* This is the HPPA version of the "implicit" VALUE-CELL access
for DYNAMIC-EXTENT closures.
* This commit is untested, but should work, as it is based on
the PPC changes, which were tested.
Alastair Bridgewater [Tue, 9 Nov 2010 19:43:44 +0000 (19:43 +0000)]
1.0.44.8: alpha: Implement ANCESTOR-FRAME VOPs.
* This is the Alpha version of the "implicit" VALUE-CELL access
for DYNAMIC-EXTENT closures.
* This commit is untested, but should work, as it is based on
the PPC changes, which were tested.
Alastair Bridgewater [Tue, 9 Nov 2010 19:43:30 +0000 (19:43 +0000)]
1.0.44.7: ir1: Set LAMBDA-VAR-EXPLICIT-VALUE-CELL where possible.
* Add a new stage to PHYSENVANAL, after tail-annotation to
fix up indirect (wanting value-cell) LAMBDA-VARs.
* For each non-dynamic-extent CLAMBDA in the component,
mark all of the LAMBDA-VARs as needing an explicit value cell.
* This analysis is correct as far as it goes, but it turns
out that marking CLAMBDAs as being dynamic-extent isn't done
in several cases that one would naively expect it to, thus
defeating most of the point of this analysis.
Alastair Bridgewater [Tue, 9 Nov 2010 19:43:17 +0000 (19:43 +0000)]
1.0.44.6: ir1: Add a new attribute for LAMBDA-VARs that need explicit value-cells.
* Add a new EXPLICIT-VALUE-CELL attribute to the LAMBDA-VAR
attributes.
* Add a new LAMBDA-VAR-EXPLICIT-VALUE-CELL access macro while
we're at it.
Nikodemus Siivola [Mon, 8 Nov 2010 13:03:56 +0000 (13:03 +0000)]
1.0.44.5: teach UNTRACE-1 how to actually untrace unbound functions
Fixes the remainder of lp#667657.
Nikodemus Siivola [Mon, 8 Nov 2010 12:42:01 +0000 (12:42 +0000)]
1.0.44.4: make MAKE-FUNCTIONAL-FROM-TOPLEVEL-LAMBDA build proper XEPs
Bring MAKE-FUNCTIONAL-FROM-TOPLEVEL-LAMBDA into closer alignment with
MAKE-XEP. Specifically, cross-link the underlying function and the
TL-XEP, and mark the TL-XEP for reanalysis.
Fixes lp#310173 and lp#384892:
* Show &REST arguments properly in backtraces.
* Better type-derivation of function result types when the
lambda-list is complex.
Nikodemus Siivola [Mon, 8 Nov 2010 10:00:53 +0000 (10:00 +0000)]
1.0.44.3: better docstring for CONDITION-WAIT
Mention the fact that it might get spurious wakeups.
Nikodemus Siivola [Sun, 7 Nov 2010 01:18:29 +0000 (01:18 +0000)]
1.0.44.2: don't add pointless TYPEP T constraints
Pointless constraints are not only pointless, they also slow things
down for no good reason.
Nikodemus Siivola [Sun, 7 Nov 2010 01:14:39 +0000 (01:14 +0000)]
1.0.44.1: more conservative CONCATENATE open-coding
Don't fully open code for long strings, no matter what policy:
constraint-propagation will go seriously nonlinear.
Also optimize the open-coded form a bit. Use
(SETF (AREF .STRING. (TRULY-THE INDEX (+ .POS. <constant>))) <char>)
...repeat...
(INCF .POS. <constant>)
instead of
(SETF (AREF .STRING .POS.) <char>)
(INCF .POS.)
...repeat...
. Smaller code, easier on the constraint propagation, and a tiny
bit faster too.
Juho Snellman [Sat, 6 Nov 2010 03:29:03 +0000 (03:29 +0000)]
1.0.44: will be tagged as sbcl_1_0_44