From: Kevin R. <kp...@at...> - 2005-09-27 20:14:14
Attachments:
sbcl-ignore-result.patch
|
This patch adds a STYLE-WARNING when a function with an "important result" is called and that result ignored. Functions which destroy their arguments in unspecified ways in the process of producing their return values are considered to have such "important results". SBCL built with this patch has been tested with SBCL's tests and by compiling some of my own Lisp code and the asdf-install packages genhash, cl-ppcre, cl-fad, rt, salza, and zip. Example: * (let ((x (list 1 2 3 4))) (nreverse x) x) ; ; caught STYLE-WARNING: ; The return value of NREVERSE should not be discarded. ; ; compilation unit finished ; caught 1 STYLE-WARNING condition (1) * Bugs: * There are some comments in the patch where I was uncertain about the changes I made. * The functions SORT and ADJUST-ARRAY could have important-result warnings but do not because the importance of the result depends on the type of an argument, and this cannot be expressed using the simple boolean attribute this patch implements. * This will produce warnings on well-defined but odd forms such as (let ((x (list 1 2))) (nreverse x) nil). A completely different implementation which avoids the last would be to somehow tag the vaguely-destroyed arguments of a function, such that if they are found to be used later, the warning is triggered. |
From: Kevin R. <kp...@ma...> - 2005-09-27 23:09:52
Attachments:
sbcl-ignore-result.patch
|
On Sep 27, 2005, at 16:13, Kevin Reid wrote: > This patch adds a STYLE-WARNING when a function with an "important > result" is called and that result ignored. This is a replacement for that patch, including the proper test case instead of an old version with some disabled sub-tests and stale comments. |
From: Juho S. <js...@ik...> - 2005-10-11 19:53:20
|
On Tue, Sep 27, 2005 at 04:13:55PM -0400, Kevin Reid wrote: > This patch adds a STYLE-WARNING when a function with an "important > result" is called and that result ignored. Thanks, the updated version was committed in 0.9.5.41. > * The functions SORT and ADJUST-ARRAY could have important-result > warnings but do not because the importance of the result depends on the > type of an argument, and this cannot be expressed using the simple > boolean attribute this patch implements. Support for SORT would indeed be nice. > * This will produce warnings on well-defined but odd forms such as > (let ((x (list 1 2))) (nreverse x) nil). I don't think this is a problem. -- Juho Snellman |