Greetings! Just a brief heads up about the latest commit just made. Quite a lot of changes, improvements hopefully :-).
1) si::proper-list is now propagated somewhat. This is basically intended to allow sequence -> list simplification inside certain do loops, etc. Check out the difference between the disassembly of '(lambda (x) (let (( r t)) (dolist (x x) (push x r)) (length r))) and '(lambda (x) (let (r) (dolist (x x) (push x r)) (length r))) for example. Also might be of interest to add (declare (optimize (safety 1))), which turns on arg checking. Certain arg checks are eliminated automatically by the type propagation. The map functions, list, etc. return proper-list. There are doubtless others I haven't put in yet. 2) check-type is now consolidated at both ansi and saved_pre_gcl levels, and implemented in a way which does not cause untold grief at the overhead :-). Replacement of the offending forms is supported in compiled and interpreted code at both levels. 3) Several bug fixes implemented, which still need a bit of refinement. In a nutshell, conditionally executed code needs to have variable setq operations undone in the outside scope -- 'with-restore-vars is provided for this purpose, but the code can be much cleaner if it is expanded. 4) O3 -> Os as it appears faster, and is much smaller. We could trigger this, as well as certain inlining/compiler-macro-expansion, with the *space* setting if desired. 5) Variable types are inferred and checked for constant evaluation, and not is handled as a predicate as is null. Check out '(lambda (x) (declare (null x)) (endp x)), with null replaced by cons, list, si::proper-list (or just use mapcar or (let ((x '(1 2 3))))), and at safety 0 and 1, for example. Expansions of the form (let ((x (form))) (if x x (other-form))) used to always foil the type propagation. 6) error and cerror are compatible at the saved_pre_gcl with the ansi semantics. We can now try to remove the specific-error hacks, and cleanup other continuable error disasters, such as package-error. There is quite a bit else, but that's all I have time for for now. We're just about at the point where we can put in some reverse type propagation, and finish up the sequence function inlining, especially remove and delete. Take care, -- Camm Maguire [EMAIL PROTECTED] ========================================================================== "The earth is but one country, and mankind its citizens." -- Baha'u'llah _______________________________________________ Gcl-devel mailing list Gcl-devel@gnu.org http://lists.gnu.org/mailman/listinfo/gcl-devel