;(push "/usr/share/emacs/site-lisp" load-path)
-;; Define compiler macros for the functions provided by cl in old Emacsen.
-(unless (featurep 'xemacs)
- (define-compiler-macro butlast (&whole form x &optional n)
- (if (>= emacs-major-version 21)
- form
- (if n
- `(let ((x ,x)
- (n ,n))
- (if (and n (<= n 0))
- x
- (let ((m (length x)))
- (or n (setq n 1))
- (and (< n m)
- (progn
- (if (> n 0)
- (progn
- (setq x (copy-sequence x))
- (setcdr (nthcdr (- (1- m) n) x) nil)))
- x)))))
- `(let* ((x ,x)
- (m (length x)))
- (and (< 1 m)
- (progn
- (setq x (copy-sequence x))
- (setcdr (nthcdr (- m 2) x) nil)
- x))))))
-
- (define-compiler-macro remove (&whole form item seq)
- (if (>= emacs-major-version 21)
- form
- `(delete ,item (copy-sequence ,seq))))
-
- (define-compiler-macro mapc (&whole form fn seq &rest rest)
- (if (>= emacs-major-version 21)
- form
- (if rest
- `(let* ((fn ,fn)
- (seq ,seq)
- (args (list seq ,@rest))
- (m (apply (function min) (mapcar (function length) args)))
- (n 0))
- (while (< n m)
- (apply fn (mapcar (function (lambda (arg) (nth n arg))) args))
- (setq n (1+ n)))
- seq)
- `(let ((seq ,seq))
- (mapcar ,fn seq)
- seq)))))
-
;; If we are building w3 in a different directory than the source
;; directory, we must read *.el from source directory and write *.elc
;; into the building directory. For that, we define this function
; (cons 'progn (cdr form)))
;(defalias 'byte-compile-file-form-defsubst 'byte-compile-file-form-defun)
+(when (and (not (featurep 'xemacs))
+ (= emacs-major-version 21)
+ (= emacs-minor-version 3)
+ (condition-case code
+ (let ((byte-compile-error-on-warn t))
+ (byte-optimize-form (quote (pop x)) t)
+ nil)
+ (error (string-match "called for effect"
+ (error-message-string code)))))
+ (defadvice byte-optimize-form-code-walker (around silence-warn-for-pop
+ (form for-effect)
+ activate)
+ "Silence the warning \"...called for effect\" for the `pop' form.
+It is effective only when the `pop' macro is defined by cl.el rather
+than subr.el."
+ (let (tmp)
+ (if (and (eq (car-safe form) 'car)
+ for-effect
+ (setq tmp (get 'car 'side-effect-free))
+ (not byte-compile-delete-errors)
+ (not (eq tmp 'error-free))
+ (eq (car-safe (cadr form)) 'prog1)
+ (let ((var (cadr (cadr form)))
+ (last (nth 2 (cadr form))))
+ (and (symbolp var)
+ (null (nthcdr 3 (cadr form)))
+ (eq (car-safe last) 'setq)
+ (eq (cadr last) var)
+ (eq (car-safe (nth 2 last)) 'cdr)
+ (eq (cadr (nth 2 last)) var))))
+ (progn
+ (put 'car 'side-effect-free 'error-free)
+ (unwind-protect
+ ad-do-it
+ (put 'car 'side-effect-free tmp)))
+ ad-do-it))))
+
(push srcdir load-path)
(load (expand-file-name "lpath.el" srcdir) nil t)
(eval-and-compile
(when (featurep 'xemacs)
- ;; XEmacs 21.1 needs some extra hand holding
- (when (eq emacs-minor-version 1)
- (autoload 'custom-declare-face "cus-face" nil t)
- (autoload 'cl-compile-time-init "cl-macs" nil t)
- (autoload 'defadvice "advice" nil nil 'macro))
(unless (fboundp 'defadvice)
(autoload 'defadvice "advice" nil nil 'macro))
(autoload 'Info-directory "info" nil t)
(autoload 'delete-annotation "annotations")
(autoload 'dolist "cl-macs" nil nil 'macro)
(autoload 'enriched-decode "enriched")
+ (autoload 'executable-find "executable")
(autoload 'info "info" nil t)
(autoload 'make-annotation "annotations")
(autoload 'make-display-table "disp-table")