"Billinghurst, David (CALCRTS)" <david.billinghurst@comalco.riotinto.com.au> writes:
> I had noted some time ago that kill(all) broke trigsimp(), but hadn't
> followed up. The following Makefile fragment may be of interest, as
> it shows some stuff that gets cleaned up by kill().
>
> 1.save 2.save 3.save:
> ( echo 'save("1.save",all);' ;\
> echo 'kill(all);' ;\
> echo 'save("2.save",all);';\
> echo "load('trgsmp);";\
> echo 'save("3.save",all);';\
> ) | maxima
Let me just recall that we have this problem because we dump some
translated files (e.g., from trigonometry/trgsmp.mac) in the standard
image. This puts some info on the lists which are members of
$INFOLISTS. Maxima thinks that everything on this lists has been
touched by the user in some way and therefore will scrub it. However,
even a kill(all) will not completely break these translated and
compiled files because of the
$dont_kill_symbols_with_lisp_source_files switch (in suprv1.lisp),
which is T by default and which preserves function cells containing a
compiled function object. It does not preserve other user-defined
properties of the corresponding symbols, though.
Now, trgsmp.mac has a number of lines like
PUT('SIN,'COS,'COMPLEMENT_FUNCTION)$
whose effect on the property lists of the trigonometric and hyperbolic
functions doesn't survive a KILL(ALL). It does, however, survive a
KILL(ALLBUT(PROPS)). So, my first suggestion would be to kill more
selectively in the test suite.
Obviously, we must also have a means to reset Maxima to the initial
state. This could be accomplished by doing a
save("initial-save-maxima.LISP",all) after building the maxima image
(we could even prefabricate this file) and writing a RESET() command
(or a RESET argument to KILL) which does
kill(all);
load("initial-save-maxima.LISP");
Wolfgang