Commit 9d28c33e authored by Stefan Monnier's avatar Stefan Monnier
Browse files

* eval.c (Fcalled_interactively_p): Add `kind' argument.

* subr.el (interactive-p): Mark obsolete.
(called-interactively-p): Make the optional-ness of `kind' obsolete.
* emacs-lisp/bytecomp.el (byte-compile-fdefinition): Make it obey
advertised-signature-table for subroutines as well.
parent ced10a4c
......@@ -246,6 +246,8 @@ Command*'.
* Lisp changes in Emacs 23.2
** called-interactively-p now takes one argument and replaces interactive-p
which is now marked obsolete.
** New function set-advertised-calling-convention makes it possible
to obsolete arguments as well as make some arguments mandatory.
** eval-next-after-load is obsolete.
......
2009-10-01 Stefan Monnier <monnier@iro.umontreal.ca>
* subr.el (interactive-p): Mark obsolete.
(called-interactively-p): Make the optional-ness of `kind' obsolete.
* emacs-lisp/bytecomp.el (byte-compile-fdefinition): Make it obey
advertised-signature-table for subroutines as well.
* emacs-lisp/byte-run.el (advertised-signature-table): New var.
(set-advertised-calling-convention): New function.
(make-obsolete, define-obsolete-function-alias)
......
......@@ -1248,7 +1248,11 @@ Each function's symbol gets added to `byte-compile-noruntime-functions'."
(and (not macro-p)
(byte-code-function-p (symbol-function fn)))))
(setq fn (symbol-function fn)))
(let ((advertised (gethash fn advertised-signature-table t)))
(let ((advertised (gethash (if (and (symbolp fn) (fboundp fn))
;; Could be a subr.
(symbol-function fn)
fn)
advertised-signature-table t)))
(cond
((listp advertised)
(if macro-p
......@@ -3104,14 +3108,14 @@ That command is designed for interactive use only" bytecomp-fn))
;; which have special byte codes just for speed.
(defmacro byte-defop-compiler (function &optional compile-handler)
;; add a compiler-form for FUNCTION.
;; If function is a symbol, then the variable "byte-SYMBOL" must name
;; the opcode to be used. If function is a list, the first element
;; is the function and the second element is the bytecode-symbol.
;; The second element may be nil, meaning there is no opcode.
;; COMPILE-HANDLER is the function to use to compile this byte-op, or
;; may be the abbreviations 0, 1, 2, 3, 0-1, or 1-2.
;; If it is nil, then the handler is "byte-compile-SYMBOL."
"Add a compiler-form for FUNCTION.
If function is a symbol, then the variable \"byte-SYMBOL\" must name
the opcode to be used. If function is a list, the first element
is the function and the second element is the bytecode-symbol.
The second element may be nil, meaning there is no opcode.
COMPILE-HANDLER is the function to use to compile this byte-op, or
may be the abbreviations 0, 1, 2, 3, 0-1, or 1-2.
If it is nil, then the handler is \"byte-compile-SYMBOL.\""
(let (opcode)
(if (symbolp function)
(setq opcode (intern (concat "byte-" (symbol-name function))))
......
......@@ -1008,6 +1008,39 @@ and `event-end' functions."
;;;; Obsolescent names for functions.
(define-obsolete-function-alias 'window-dot 'window-point "22.1")
(define-obsolete-function-alias 'set-window-dot 'set-window-point "22.1")
(define-obsolete-function-alias 'read-input 'read-string "22.1")
(define-obsolete-function-alias 'show-buffer 'set-window-buffer "22.1")
(define-obsolete-function-alias 'eval-current-buffer 'eval-buffer "22.1")
(define-obsolete-function-alias 'string-to-int 'string-to-number "22.1")
(make-obsolete 'char-bytes "now always returns 1." "20.4")
(make-obsolete 'forward-point "use (+ (point) N) instead." "23.1")
(defun insert-string (&rest args)
"Mocklisp-compatibility insert function.
Like the function `insert' except that any argument that is a number
is converted into a string by expressing it in decimal."
(dolist (el args)
(insert (if (integerp el) (number-to-string el) el))))
(make-obsolete 'insert-string 'insert "22.1")
(defun makehash (&optional test) (make-hash-table :test (or test 'eql)))
(make-obsolete 'makehash 'make-hash-table "22.1")
;; These are used by VM and some old programs
(defalias 'focus-frame 'ignore "")
(make-obsolete 'focus-frame "it does nothing." "22.1")
(defalias 'unfocus-frame 'ignore "")
(make-obsolete 'unfocus-frame "it does nothing." "22.1")
(make-obsolete 'make-variable-frame-local
"explicitly check for a frame-parameter instead." "22.2")
(make-obsolete 'interactive-p 'called-interactively-p "23.2")
(set-advertised-calling-convention 'called-interactively-p '(kind))
;;;; Obsolescence declarations for variables, and aliases.
;; Special "default-FOO" variables which contain the default value of
;; the "FOO" variable are nasty. Their implementation is brittle, and
;; slows down several unrelated variable operations; furthermore, they
......@@ -1047,37 +1080,6 @@ and `event-end' functions."
(make-obsolete-variable 'default-enable-multibyte-characters
"use enable-multibyte-characters or set-buffer-multibyte instead" "23.2")
(define-obsolete-function-alias 'window-dot 'window-point "22.1")
(define-obsolete-function-alias 'set-window-dot 'set-window-point "22.1")
(define-obsolete-function-alias 'read-input 'read-string "22.1")
(define-obsolete-function-alias 'show-buffer 'set-window-buffer "22.1")
(define-obsolete-function-alias 'eval-current-buffer 'eval-buffer "22.1")
(define-obsolete-function-alias 'string-to-int 'string-to-number "22.1")
(make-obsolete 'char-bytes "now always returns 1." "20.4")
(make-obsolete 'forward-point "use (+ (point) N) instead." "23.1")
(defun insert-string (&rest args)
"Mocklisp-compatibility insert function.
Like the function `insert' except that any argument that is a number
is converted into a string by expressing it in decimal."
(dolist (el args)
(insert (if (integerp el) (number-to-string el) el))))
(make-obsolete 'insert-string 'insert "22.1")
(defun makehash (&optional test) (make-hash-table :test (or test 'eql)))
(make-obsolete 'makehash 'make-hash-table "22.1")
;; These are used by VM and some old programs
(defalias 'focus-frame 'ignore "")
(make-obsolete 'focus-frame "it does nothing." "22.1")
(defalias 'unfocus-frame 'ignore "")
(make-obsolete 'unfocus-frame "it does nothing." "22.1")
(make-obsolete 'make-variable-frame-local
"explicitly check for a frame-parameter instead." "22.2")
;;;; Obsolescence declarations for variables, and aliases.
(make-obsolete-variable 'define-key-rebound-commands nil "23.2")
(make-obsolete-variable 'redisplay-end-trigger-functions 'jit-lock-register "23.1")
(make-obsolete 'window-redisplay-end-trigger nil "23.1")
......
2009-10-01 Stefan Monnier <monnier@iro.umontreal.ca>
* eval.c (Fcalled_interactively_p): Add `kind' argument.
2009-10-01 Michael Albinus <michael.albinus@gmx.de>
* fileio.c (Fdelete_directory_internal): Renamed from
* fileio.c (Fdelete_directory_internal): Rename from
Fdelete_directory. It is not a command anymore. It has no file
name handler.
......
......@@ -608,19 +608,31 @@ use `called-interactively-p'. */)
}
DEFUN ("called-interactively-p", Fcalled_interactively_p, Scalled_interactively_p, 0, 0, 0,
DEFUN ("called-interactively-p", Fcalled_interactively_p, Scalled_interactively_p, 0, 1, 0,
doc: /* Return t if the containing function was called by `call-interactively'.
This includes being called as the binding of a key, or called from a
keyboard macro (unlike `interactive-p').
If KIND is `interactive', then only return t if the call was made
interactively by the user, i.e. not in `noninteractive' mode nor
when `executing-kbd-macro'.
If KIND is `any', on the other hand, it will return t for any kind of
interactive call, including being called as the binding of a key, or
from a keyboard macro, or in `noninteractive' mode.
The only known proper use of `interactive' for KIND is in deciding
whether to display a helpful message, or how to display it. If you're
thinking of using it for any other purpose, it is quite likely that
you're making a mistake. Think: what do you want to do when the
command is called from a keyboard macro?
This function is meant for implementing advice and other
function-modifying features. Instead of using this, it is sometimes
cleaner to give your function an extra optional argument whose
`interactive' spec specifies non-nil unconditionally (\"p\" is a good
way to do this). */)
()
way to do this), or via (not (or executing-kbd-macro noninteractive)). */)
(kind)
Lisp_Object kind;
{
return interactive_p (1) ? Qt : Qnil;
return ((INTERACTIVE || !EQ (kind, intern ("interactive")))
&& interactive_p (1)) ? Qt : Qnil;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment