Function: byte-defop-compiler
byte-defop-compiler is a macro defined in bytecomp.el.gz.
Signature
(byte-defop-compiler FUNCTION &optional COMPILE-HANDLER)
Documentation
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, 2-and, 3, 0-1, 1-2, 1-3, or 2-3. If it is nil, then the handler is "byte-compile-SYMBOL."
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/bytecomp.el.gz
;; Compile those primitive ordinary functions
;; 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, 2-and, 3, 0-1, 1-2, 1-3, or 2-3.
If it is nil, then the handler is \"byte-compile-SYMBOL.\""
(let (opcode)
(if (symbolp function)
(setq opcode (intern (concat "byte-" (symbol-name function))))
(setq opcode (car (cdr function))
function (car function)))
(let ((fnform
(list 'put (list 'quote function) ''byte-compile
(list 'quote
(or (cdr (assq compile-handler
'((0 . byte-compile-no-args)
(1 . byte-compile-one-arg)
(2 . byte-compile-two-args)
(2-cmp . byte-compile-cmp)
(3 . byte-compile-three-args)
(0-1 . byte-compile-zero-or-one-arg)
(1-2 . byte-compile-one-or-two-args)
(2-3 . byte-compile-two-or-three-args)
(1-3 . byte-compile-one-to-three-args)
)))
compile-handler
(intern (concat "byte-compile-"
(symbol-name function))))))))
(if opcode
(list 'progn fnform
(list 'put (list 'quote function)
''byte-opcode (list 'quote opcode))
(list 'put (list 'quote opcode)
''byte-opcode-invert (list 'quote function)))
fnform))))