@c -*-texinfo-*-
@c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990, 1991, 1992, 1993, 1998 Free Software Foundation, Inc.
+@c Copyright (C) 1990, 1991, 1992, 1993, 1998, 1999
+@c Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
@setfilename ../info/internals
@node GNU Emacs Internals, Standard Errors, Tips, Top
might as well be reused, since no one will miss them. The second
(``sweep'') phase of the garbage collector arranges to reuse them.
-??? Maybe add something describing weak hash tables here?
+@c ??? Maybe add something describing weak hash tables here?
@cindex free list
The sweep phase puts unused cons cells onto a @dfn{free list}
(@var{used-syms} . @var{free-syms})
@end group
(@var{used-miscs} . @var{free-miscs})
- @var{used-string-chars}
+ @var{used-string-chars}
@var{used-vector-slots}
(@var{used-floats} . @var{free-floats})
- (@var{used-intervals} . @var{free-intervals}))
+ (@var{used-intervals} . @var{free-intervals})
+ (@var{used-strings} . @var{free-strings}))
@end example
Here is an example:
(garbage-collect)
@result{} ((106886 . 13184) (9769 . 0)
(7731 . 4651) 347543 121628
- (31 . 94) (1273 . 168))
+ (31 . 94) (1273 . 168)
+ (25474 . 3569))
@end group
@end example
@item free-intervals
The number of intervals for which space has been obtained
from the operating system, but that are not currently being used.
+
+@item used-strings
+The number of strings in use.
+
+@item free-strings
+The number of string headers for which the space was obtained from the
+operating system, but which are currently not in use. (A string
+object consists of a header and the storage for the string text
+itself; the latter is only allocated when the string is created.)
@end table
@end deffn
in this Emacs session.
@end defvar
+@defvar strings-consed
+The total number of strings that have been allocated so far in this
+Emacs session.
+@end defvar
+
@node Writing Emacs Primitives
@appendixsec Writing Emacs Primitives
@cindex primitive function internals
@smallexample
@group
DEFUN ("or", For, Sor, 0, UNEVALLED, 0,
- "Eval args until one of them yields non-nil; return that value.\n\
-The remaining args are not evalled at all.\n\
+ doc: /* Eval args until one of them yields non-nil, then return that value.
+The remaining args are not evalled at all.
+If all args return nil, return nil.
@end group
@group
-If all args return nil, return nil.")
+usage: (or CONDITIONS ...) */)
(args)
Lisp_Object args;
@{
should receive no arguments when called interactively.
@item doc
-This is the documentation string. It is written just like a
-documentation string for a function defined in Lisp, except you must
-write @samp{\n\} at the end of each line. In particular, the first line
-should be a single sentence.
+This is the documentation string. It uses C comment syntax rather
+than C string syntax because comment syntax requires nothing special
+to include multiple lines. The @samp{doc:} identifies the comment
+that follows as the documentation string. The @samp{/*} and @samp{*/}
+delimiters that begin and end the comment are not part of the
+documentation string.
+
+If the last line of the documentation string begins with the keyword
+@samp{usage:}, the rest of the line is treated as the argument list
+for documentation purposes. This way, you can use different argument
+names in the documentation string from the ones used in the C code.
+
+All the usual rules for documentation strings in Lisp code
+(@pxref{Documentation Tips}) apply to C code documentation strings
+too.
@end table
After the call to the @code{DEFUN} macro, you must write the argument
Alas, we can't explain all the tricky details here.
You must not use C initializers for static or global variables unless
-the variables are never stored in once Emacs is dumped. These variables
+the variables are never written once Emacs is dumped. These variables
with initializers are allocated in an area of memory that becomes
read-only (on certain operating systems) as a result of dumping Emacs.
@xref{Pure Storage}.
@table @code
@item beg
-This field contains the Actual address of the buffer contents.
+This field contains the actual address of the buffer contents.
-@item got
+@item gpt
This holds the character position of the gap in the buffer.
@item z
This flag is set when narrowing changes in a buffer.
@item prevent_redisplay_optimizations_p
-A flag indicating the redisplay optiomizations should not be used
+this flag indicates that redisplay optimizations should not be used
to display this buffer.
@item undo_list
@item right_margin_width
Likewise for the right margin.
-@begin ignore
+@ignore
@item last_mark_x
@item last_mark_y
???Not used.
If redisplay in this window goes beyond this buffer position, it runs
run the @code{redisplay-end-trigger-hook}.
-@begin ignore
+@ignore
@item orig_height
@item orig_top
??? Are temporary storage areas.