Subject: bug#17024: 24.3.50; eieio-compiled-function-arglist is broken

From: Stefan Monnier <[email-masked]>
Date: Tue, 18 Mar 2014 16:21:38 -0400

> The library `emacs-lisp/eieio-core.el' defines the function
> `eieio-compiled-function-arglist' for compatibility but
> its implementation is broken.

> In *scratch* buffer:
> (eieio-compiled-function-arglist (symbol-function 'make-temp-file))
> => 769

> The function `help-function-arglist' does the right thing.

> (help-function-arglist (symbol-function 'make-temp-file))
> => (arg1 &optional arg2 arg3)

Does the patch below work for you?
And could you explain in which circumstance you've bumped into
this problem?

        Stefan

=== modified file 'lisp/emacs-lisp/eieio-core.el'
--- lisp/emacs-lisp/eieio-core.el	2014-01-01 07:43:34 +0000
+++ lisp/emacs-lisp/eieio-core.el	2014-03-18 20:19:52 +0000
@@ -34,18 +34,11 @@
 (eval-when-compile (require 'cl))       ;FIXME: Use cl-lib!
 
 ;; Compatibility
-(if (fboundp 'compiled-function-arglist)
-
+(defalias 'eieio-compiled-function-arglist
+  (if (featurep 'xemacs)
     ;; XEmacs can only access a compiled functions arglist like this:
-    (defalias 'eieio-compiled-function-arglist 'compiled-function-arglist)
-
-  ;; Emacs doesn't have this function, but since FUNC is a vector, we can just
-  ;; grab the appropriate element.
-  (defun eieio-compiled-function-arglist (func)
-    "Return the argument list for the compiled function FUNC."
-    (aref func 0))
-
-  )
+      #'compiled-function-arglist
+    #'help-function-arglist))
 
 (put 'eieio--defalias 'byte-hunk-handler
      #'byte-compile-file-form-defalias) ;;(get 'defalias 'byte-hunk-handler)