Byte-compiled functions have a special data type: they are byte-code function objects.
Internally, a byte-code function object is much like a vector; however, the evaluator handles this data type specially when it appears as a function to be called. The printed representation for a byte-code function object is like that for a vector, with an additional `#' before the opening `['.
A byte-code function object must have at least four elements; there is no maximum number, but only the first six elements have any normal use. They are:
nil
. The value may
be a number or a list, in case the documentation string is stored in a
file. Use the function documentation
to get the real
documentation string (see section Access to Documentation Strings).
nil
for a function that isn't interactive.
Here's an example of a byte-code function object, in printed
representation. It is the definition of the command
backward-sexp
.
#[(&optional arg) "^H\204^F^@\301^P\302^H[!\207" [arg 1 forward-sexp] 2 254435 "p"]
The primitive way to create a byte-code object is with
make-byte-code
:
You should not try to come up with the elements for a byte-code function yourself, because if they are inconsistent, Emacs may crash when you call the function. Always leave it to the byte compiler to create these objects; it makes the elements consistent (we hope).
You can access the elements of a byte-code object using aref
;
you can also use vconcat
to create a vector with the same
elements.
Go to the first, previous, next, last section, table of contents.