comparison lisp/cl-macs.el @ 5313:5ed261fd2bd9

Unrool a load-time loop at macro expansion time, cl-macs.el 2010-12-29 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (inline-side-effect-free-compiler-macros): Unroll a loop here at macro-expansion time, so these compiler macros are compiled. Use #'eql instead of #'eq in a couple of places for better style.
author Aidan Kehoe <kehoea@parhasard.net>
date Wed, 29 Dec 2010 23:43:10 +0000
parents 09fed7053634
children 596011a8bf8f
comparison
equal deleted inserted replaced
5312:f6471e4ae703 5313:5ed261fd2bd9
3760 `((,(car form) ,(pop rest) 3760 `((,(car form) ,(pop rest)
3761 ,(car rest))))) 3761 ,(car rest)))))
3762 (cdr form))))))) 3762 (cdr form)))))))
3763 '(= < > <= >=)) 3763 '(= < > <= >=))
3764 3764
3765 (mapc 3765 ;; XEmacs; unroll this loop at macro-expansion time, so the compiler macros
3766 #'(lambda (y) 3766 ;; are byte-compiled.
3767 (put (car y) 'side-effect-free t) 3767 (macrolet
3768 (put (car y) 'byte-compile 'cl-byte-compile-compiler-macro) 3768 ((inline-side-effect-free-compiler-macros (&rest details)
3769 (put (car y) 'cl-compiler-macro 3769 (cons
3770 (list 'lambda '(w x) 3770 'progn
3771 (if (symbolp (cadr y)) 3771 (loop
3772 (list 'list (list 'quote (cadr y)) 3772 for (function . details) in details
3773 (list 'list (list 'quote (caddr y)) 'x)) 3773 nconc `((put ',function 'side-effect-free t)
3774 (cons 'list (cdr y)))))) 3774 (define-compiler-macro ,function (&whole form x)
3775 '((first 'car x) (second 'cadr x) (third 'caddr x) (fourth 'cadddr x) 3775 ,(if (symbolp (car details))
3776 (reduce #'(lambda (object1 object2)
3777 `(list ',object1 ,object2))
3778 details :from-end t :initial-value 'x)
3779 (cons 'list details))))))))
3780 (inline-side-effect-free-compiler-macros
3781 (first 'car x) (second 'cadr x) (third 'caddr x) (fourth 'cadddr x)
3776 (fifth 'nth 4 x) (sixth 'nth 5 x) (seventh 'nth 6 x) 3782 (fifth 'nth 4 x) (sixth 'nth 5 x) (seventh 'nth 6 x)
3777 (eighth 'nth 7 x) (ninth 'nth 8 x) (tenth 'nth 9 x) 3783 (eighth 'nth 7 x) (ninth 'nth 8 x) (tenth 'nth 9 x)
3778 (rest 'cdr x) (plusp '> x 0) (minusp '< x 0) 3784 (rest 'cdr x) (plusp '> x 0) (minusp '< x 0)
3779 (oddp 'eq (list 'logand x 1) 1) 3785 (oddp 'eql (list 'logand x 1) 1)
3780 (evenp 'eq (list 'logand x 1) 0) 3786 (evenp 'eql (list 'logand x 1) 0)
3781 (caar car car) (cadr car cdr) (cdar cdr car) (cddr cdr cdr) 3787 (caar car car) (cadr car cdr) (cdar cdr car) (cddr cdr cdr)
3782 (caaar car caar) (caadr car cadr) (cadar car cdar) 3788 (caaar car caar) (caadr car cadr) (cadar car cdar)
3783 (caddr car cddr) (cdaar cdr caar) (cdadr cdr cadr) 3789 (caddr car cddr) (cdaar cdr caar) (cdadr cdr cadr)
3784 (cddar cdr cdar) (cdddr cdr cddr) (caaaar car caaar) 3790 (cddar cdr cdar) (cdddr cdr cddr) (caaaar car caaar)
3785 (caaadr car caadr) (caadar car cadar) (caaddr car caddr) 3791 (caaadr car caadr) (caadar car cadar) (caaddr car caddr)