Subject: Re: bug#25552: 26.0.50; load cl unintendedly

From: [email-masked]
Date: Wed, 01 Feb 2017 08:51:05 -0500

Mike Kupfer <[email-masked]> writes:

> Hi Katsumi and Glenn, I applied Glenn's patch to 25.1.90, and I'm afraid
> that it introduced a failure.  When I tried to compose an email,
> pressing the space key in the subject line got me
>
> Debugger entered--Lisp error: (wrong-type-argument syntax-table-p nil)
>   set-syntax-table(nil)
>   mh-beginning-of-word()
>   mh-letter-complete-or-space(1)
>   funcall-interactively(mh-letter-complete-or-space 1)
>   call-interactively(mh-letter-complete-or-space nil nil)
>   command-execute(mh-letter-complete-or-space)
>
> I vaguely recall there was some reason for not compiling mh-acros.el,
> but I don't remember the specifics.  I'll look into this some more when
> I have more time (this Thursday).

I guess it's because defun-mh checks whether the alias target is fbound
at compile time:

    (defmacro defun-mh (name function arg-list &rest body)
      "Create function NAME.
    If FUNCTION exists, then NAME becomes an alias for FUNCTION.
    Otherwise, create function NAME with ARG-LIST and BODY."
      (let ((defined-p (fboundp function)))
        (if defined-p
            `(defalias ',name ',function)
          `(defun ,name ,arg-list ,@body))))

It would be better to check at runtime:

    (defmacro defun-mh (name function arg-list &rest body)
      `(if (fboundp ',function)
           (defalias ',name ',function)
         (defun ,name ,arg-list ,@body)))

And/or require `mail-abbrev' at compile time

--- i/lisp/mh-e/mh-compat.el
+++ w/lisp/mh-e/mh-compat.el
@@ -260,7 +260,7 @@ 'mh-line-end-position
       'line-end-position
     'point-at-eol))
 
-(mh-require 'mailabbrev nil t)
+(eval-and-compile (mh-require 'mailabbrev nil t))
 (defun-mh mh-mail-abbrev-make-syntax-table
   mail-abbrev-make-syntax-table ()
   "Emacs 21 and XEmacs don't have `mail-abbrev-make-syntax-table'.