comparison lisp/cl-macs.el @ 4716:dca5bb2adff1

Don't cons with #'mapcar calls where the result is discarded, decide on mapc-internal at compile time if the Common Lisp functionality is not being used. 2009-10-12 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (mapc): New compiler macro, use mapc-internal at compile time if we're not using the Common Lisp functionality. * bytecomp.el (byte-compile-mapcar, byte-compile-maplist): New. If the return value of mapcar is being discarded, compile it to a mapc-internal call instead, and warn, because the programmer probably can't rely on always being compiled by an XEmacs that does this. Similarly for maplist and mapl; and use byte-compile-funarg for map, mapl, mapcan, mapcon.
author Aidan Kehoe <kehoea@parhasard.net>
date Mon, 12 Oct 2009 17:19:52 +0100
parents 84f870bbd17b
children bd51ab22afa8
comparison
equal deleted inserted replaced
4715:a357478dd457 4716:dca5bb2adff1
3257 ;; getting compiler-macroexpanded again: 3257 ;; getting compiler-macroexpanded again:
3258 (cl-delete-duplicates begin ',cl-keys nil)))) 3258 (cl-delete-duplicates begin ',cl-keys nil))))
3259 (t 3259 (t
3260 form)))) 3260 form))))
3261 3261
3262 ;; XEmacs change, the GNU mapc doesn't accept the Common Lisp args, so this
3263 ;; change isn't helpful.
3264 (define-compiler-macro mapc (&whole form cl-func cl-seq &rest cl-rest)
3265 (if cl-rest
3266 form
3267 (cons 'mapc-internal (cdr form))))
3268
3262 (mapc 3269 (mapc
3263 #'(lambda (y) 3270 #'(lambda (y)
3264 (put (car y) 'side-effect-free t) 3271 (put (car y) 'side-effect-free t)
3265 (put (car y) 'byte-compile 'cl-byte-compile-compiler-macro) 3272 (put (car y) 'byte-compile 'cl-byte-compile-compiler-macro)
3266 (put (car y) 'cl-compiler-macro 3273 (put (car y) 'cl-compiler-macro