annotate man/lispref/building.texi @ 5353:38e24b8be4ea

Improve the lexical scoping in #'block, #'return-from. lisp/ChangeLog addition: 2011-02-07 Aidan Kehoe <kehoea@parhasard.net> * bytecomp.el: * bytecomp.el (byte-compile-initial-macro-environment): Shadow `block', `return-from' here, we implement them differently when byte-compiling. * bytecomp.el (byte-compile-active-blocks): New. * bytecomp.el (byte-compile-block-1): New. * bytecomp.el (byte-compile-return-from-1): New. * bytecomp.el (return-from-1): New. * bytecomp.el (block-1): New. These are two aliases that exist to have their own associated byte-compile functions, which functions implement `block' and `return-from'. * cl-extra.el (cl-macroexpand-all): Fix a bug here when macros in the environment have been compiled. * cl-macs.el (block): * cl-macs.el (return): * cl-macs.el (return-from): Be more careful about lexical scope in these macros. * cl.el: * cl.el ('cl-block-wrapper): Removed. * cl.el ('cl-block-throw): Removed. These aren't needed in code generated by this XEmacs. They shouldn't be needed in code generated by XEmacs 21.4, but if it turns out the packages do need them, we can put them back. 2011-01-30 Mike Sperber <mike@xemacs.org> * font-lock.el (font-lock-fontify-pending-extents): Don't fail if `font-lock-mode' is unset, which can happen in the middle of `revert-buffer'. 2011-01-23 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (delete): * cl-macs.el (delq): * cl-macs.el (remove): * cl-macs.el (remq): Don't use the compiler macro if these functions were given the wrong number of arguments, as happens in lisp-tests.el. * cl-seq.el (remove, remq): Removed. I added these to subr.el, and forgot to remove them from here. 2011-01-22 Aidan Kehoe <kehoea@parhasard.net> * bytecomp.el (byte-compile-setq, byte-compile-set): Remove kludge allowing keywords' values to be set, all the code that does that is gone. * cl-compat.el (elt-satisfies-test-p): * faces.el (set-face-parent): * faces.el (face-doc-string): * gtk-font-menu.el: * gtk-font-menu.el (gtk-reset-device-font-menus): * msw-font-menu.el: * msw-font-menu.el (mswindows-reset-device-font-menus): * package-get.el (package-get-installedp): * select.el (select-convert-from-image-data): * sound.el: * sound.el (load-sound-file): * x-font-menu.el (x-reset-device-font-menus-core): Don't quote keywords, they're self-quoting, and the win from backward-compatibility is sufficiently small now that the style problem overrides it. 2011-01-22 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (block, return-from): Require that NAME be a symbol in these macros, as always documented in the #'block docstring and as required by Common Lisp. * descr-text.el (unidata-initialize-unihan-database): Correct the use of non-symbols in #'block and #'return-from in this function. 2011-01-15 Aidan Kehoe <kehoea@parhasard.net> * cl-extra.el (concatenate): Accept more complicated TYPEs in this function, handing the sequences over to #'coerce if we don't understand them here. * cl-macs.el (inline): Don't proclaim #'concatenate as inline, its compiler macro is more useful than doing that. 2011-01-11 Aidan Kehoe <kehoea@parhasard.net> * subr.el (delete, delq, remove, remq): Move #'remove, #'remq here, they don't belong in cl-seq.el; move #'delete, #'delq here from fns.c, implement them in terms of #'delete*, allowing support for sequences generally. * update-elc.el (do-autoload-commands): Use #'delete*, not #'delq here, now the latter's no longer dumped. * cl-macs.el (delete, delq): Add compiler macros transforming #'delete and #'delq to #'delete* calls. 2011-01-10 Aidan Kehoe <kehoea@parhasard.net> * dialog.el (make-dialog-box): Correct a misplaced parenthesis here, thank you Mats Lidell in 87zkr9gqrh.fsf@mail.contactor.se ! 2011-01-02 Aidan Kehoe <kehoea@parhasard.net> * dialog.el (make-dialog-box): * list-mode.el (display-completion-list): These functions used to use cl-parsing-keywords; change them to use defun* instead, fixing the build. (Not sure what led to me not including this change in d1b17a33450b!) 2011-01-02 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (define-star-compiler-macros): Make sure the form has ITEM and LIST specified before attempting to change to calls with explicit tests; necessary for some tests in lisp-tests.el to compile correctly. (stable-union, stable-intersection): Add compiler macros for these functions, in the same way we do for most of the other functions in cl-seq.el. 2011-01-01 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (dolist, dotimes, do-symbols, macrolet) (symbol-macrolet): Define these macros with defmacro* instead of parsing the argument list by hand, for the sake of style and readability; use backquote where appropriate, instead of calling #'list and and friends, for the same reason. 2010-12-30 Aidan Kehoe <kehoea@parhasard.net> * x-misc.el (device-x-display): Provide this function, documented in the Lispref for years, but not existing previously. Thank you Julian Bradfield, thank you Jeff Mincy. 2010-12-30 Aidan Kehoe <kehoea@parhasard.net> * cl-seq.el: Move the heavy lifting from this file to C. Dump the cl-parsing-keywords macro, but don't use defun* for the functions we define that do take keywords, dynamic scope lossage makes that not practical. * subr.el (sort, fillarray): Move these aliases here. (map-plist): #'nsublis is now built-in, but at this point #'eql isn't necessarily available as a test; use #'eq. * obsolete.el (cl-delete-duplicates): Make this available for old compiler macros and old code. (memql): Document that this is equivalent to #'member*, and worse. * cl.el (adjoin, subst): Removed. These are in C. 2010-12-30 Aidan Kehoe <kehoea@parhasard.net> * simple.el (assoc-ignore-case): Remove a duplicate definition of this function (it's already in subr.el). * iso8859-1.el (char-width): On non-Mule, make this function equivalent to that produced by (constantly 1), but preserve its docstring. * subr.el (subst-char-in-string): Define this in terms of #'substitute, #'nsubstitute. (string-width): Define this using #'reduce and #'char-width. (char-width): Give this a simpler definition, it makes far more sense to check for mule at load time and redefine, as we do in iso8859-1.el. (store-substring): Implement this in terms of #'replace, now #'replace is cheap. 2010-12-30 Aidan Kehoe <kehoea@parhasard.net> * update-elc.el (lisp-files-needed-for-byte-compilation) (lisp-files-needing-early-byte-compilation): cl-macs belongs in the former, not the latter, it is as fundamental as bytecomp.el. 2010-12-30 Aidan Kehoe <kehoea@parhasard.net> * cl.el: Provde the Common Lisp program-error, type-error as error symbols. This doesn't nearly go far enough for anyone using the Common Lisp errors. 2010-12-29 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (delete-duplicates): If the form has an incorrect number of arguments, don't attempt a compiler macroexpansion. 2010-12-29 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (cl-safe-expr-p): Forms that start with the symbol lambda are also safe. 2010-12-29 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (= < > <= >=): For these functions' compiler macros, the optimisation is safe even if the first and the last arguments have side effects, since they're only used the once. 2010-12-29 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (inline-side-effect-free-compiler-macros): Unroll a loop here at macro-expansion time, so these compiler macros are compiled. Use #'eql instead of #'eq in a couple of places for better style. 2010-12-29 Aidan Kehoe <kehoea@parhasard.net> * cl-extra.el (notany, notevery): Avoid some dynamic scope stupidity with local variable names in these functions, when they weren't prefixed with cl-; go into some more detail in the doc strings. 2010-12-29 Aidan Kehoe <kehoea@parhasard.net> * byte-optimize.el (side-effect-free-fns): #'remove, #'remq are free of side-effects. (side-effect-and-error-free-fns): Drop dot, dot-marker from the list. 2010-11-17 Aidan Kehoe <kehoea@parhasard.net> * cl-extra.el (coerce): In the argument list, name the first argument OBJECT, not X; the former name was always used in the doc string and is clearer. Handle vector type specifications which include the length of the target sequence, error if there's a mismatch. * cl-macs.el (cl-make-type-test): Handle type specifications starting with the symbol 'eql. 2010-11-14 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (eql): Don't remove the byte-compile property of this symbol. That was necessary to override a bug in bytecomp.el where #'eql was confused with #'eq, which bug we no longer have. If neither expression is constant, don't attempt to handle the expression in this compiler macro, leave it to byte-compile-eql, which produces better code anyway. * bytecomp.el (eq): #'eql is not the function associated with the byte-eq byte code. (byte-compile-eql): Add an explicit compile method for this function, for cases where the cl-macs compiler macro hasn't reduced it to #'eq or #'equal. 2010-10-25 Aidan Kehoe <kehoea@parhasard.net> Add compiler macros and compilation sanity-checking for various functions that take keywords. * byte-optimize.el (side-effect-free-fns): #'symbol-value is side-effect free and not error free. * bytecomp.el (byte-compile-normal-call): Check keyword argument lists for sanity; store information about the positions where keyword arguments start using the new byte-compile-keyword-start property. * cl-macs.el (cl-const-expr-val): Take a new optional argument, cl-not-constant, defaulting to nil, in this function; return it if the expression is not constant. (cl-non-fixnum-number-p): Make this into a separate function, we want to pass it to #'every. (eql): Use it. (define-star-compiler-macros): Use the same code to generate the member*, assoc* and rassoc* compiler macros; special-case some code in #'add-to-list in subr.el. (remove, remq): Add compiler macros for these two functions, in preparation for #'remove being in C. (define-foo-if-compiler-macros): Transform (remove-if-not ...) calls to (remove ... :if-not) at compile time, which will be a real win once the latter is in C. (define-substitute-if-compiler-macros) (define-subst-if-compiler-macros): Similarly for these functions. (delete-duplicates): Change this compiler macro to use #'plists-equal; if we don't have information about the type of SEQUENCE at compile time, don't bother attempting to inline the call, the function will be in C soon enough. (equalp): Remove an old commented-out compiler macro for this, if we want to see it it's in version control. (subst-char-in-string): Transform this to a call to nsubstitute or nsubstitute, if that is appropriate. * cl.el (ldiff): Don't call setf here, this makes for a load-time dependency problem in cl-macs.el 2010-06-14 Stephen J. Turnbull <stephen@xemacs.org> * term/vt100.el: Refer to XEmacs, not GNU Emacs, in permissions. * term/bg-mouse.el: * term/sup-mouse.el: Put copyright notice in canonical "Copyright DATE AUTHOR" form. Refer to XEmacs, not GNU Emacs, in permissions. * site-load.el: Add permission boilerplate. * mule/canna-leim.el: * alist.el: Refer to XEmacs, not APEL/this program, in permissions. * mule/canna-leim.el: Remove my copyright, I've assigned it to the FSF. 2010-06-14 Stephen J. Turnbull <stephen@xemacs.org> * gtk.el: * gtk-widget-accessors.el: * gtk-package.el: * gtk-marshal.el: * gtk-compose.el: * gnome.el: Add copyright notice based on internal evidence. 2010-06-14 Stephen J. Turnbull <stephen@xemacs.org> * easymenu.el: Add reference to COPYING to permission notice. * gutter.el: * gutter-items.el: * menubar-items.el: Fix typo "Xmacs" in permissions notice. 2010-06-14 Stephen J. Turnbull <stephen@xemacs.org> * auto-save.el: * font.el: * fontconfig.el: * mule/kinsoku.el: Add "part of XEmacs" text to permission notice. 2010-10-14 Aidan Kehoe <kehoea@parhasard.net> * byte-optimize.el (side-effect-free-fns): * cl-macs.el (remf, getf): * cl-extra.el (tailp, cl-set-getf, cl-do-remf): * cl.el (ldiff, endp): Tighten up Common Lisp compatibility for #'ldiff, #'endp, #'tailp; add circularity checking for the first two. #'cl-set-getf and #'cl-do-remf were Lisp implementations of #'plist-put and #'plist-remprop; change the names to aliases, changes the macros that use them to using #'plist-put and #'plist-remprop directly. 2010-10-12 Aidan Kehoe <kehoea@parhasard.net> * abbrev.el (fundamental-mode-abbrev-table, global-abbrev-table): Create both these abbrev tables using the usual #'define-abbrev-table calls, rather than attempting to special-case them. * cl-extra.el: Force cl-macs to be loaded here, if cl-extra.el is being loaded interpreted. Previously other, later files would redundantly call (load "cl-macs") when interpreted, it's more reasonable to do it here, once. * cmdloop.el (read-quoted-char-radix): Use defcustom here, we don't have any dump-order dependencies that would prevent that. * custom.el (eval-when-compile): Don't load cl-macs when interpreted or when byte-compiling, rely on cl-extra.el in the former case and the appropriate entry in bytecomp-load-hook in the latter. Get rid of custom-declare-variable-list, we have no dump-time dependencies that would require it. * faces.el (eval-when-compile): Don't load cl-macs when interpreted or when byte-compiling. * packages.el: Remove some inaccurate comments. * post-gc.el (cleanup-simple-finalizers): Use #'delete-if-not here, now the order of preloaded-file-list has been changed to make it available. * subr.el (custom-declare-variable-list): Remove. No need for it. Also remove a stub define-abbrev-table from this file, given the current order of preloaded-file-list there's no need for it. 2010-10-10 Aidan Kehoe <kehoea@parhasard.net> * bytecomp.el (byte-compile-constp) Forms quoted with FUNCTION are also constant. (byte-compile-initial-macro-environment): In #'the, if FORM is constant and does not match TYPE, warn at byte-compile time. 2010-10-10 Aidan Kehoe <kehoea@parhasard.net> * backquote.el (bq-vector-contents, bq-list*): Remove; the former is equivalent to (append VECTOR nil), the latter to (list* ...). (bq-process-2): Use (append VECTOR nil) instead of using #'bq-vector-contents to convert to a list. (bq-process-1): Now we use list* instead of bq-list * subr.el (list*): Moved from cl.el, since it is now required to be available the first time a backquoted form is encountered. * cl.el (list*): Move to subr.el. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * test-harness.el (Check-Message): Add an omitted comma here, thank you the buildbot. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * hash-table.el (hash-table-key-list, hash-table-value-list) (hash-table-key-value-alist, hash-table-key-value-plist): Remove some useless #'nreverse calls in these files; our hash tables have no order, it's not helpful to pretend they do. * behavior.el (read-behavior): Do the same in this file, in some code evidently copied from hash-table.el. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * info.el (Info-insert-dir): * format.el (format-deannotate-region): * files.el (cd, save-buffers-kill-emacs): Use #'some, #'every and related functions for applying boolean operations to lists, instead of rolling our own ones that cons and don't short-circuit. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * bytecomp.el (byte-compile-initial-macro-environment): * cl-macs.el (the): Rephrase the docstring, make its implementation when compiling files a little nicer. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * descr-text.el (unidata-initialize-unicodedata-database) (unidata-initialize-unihan-database, describe-char-unicode-data) (describe-char-unicode-data): Wrap calls to the database functions with (with-fboundp ...), avoiding byte compile warnings on builds without support for the database functions. (describe-char): (reduce #'max ...), not (apply #'max ...), no need to cons needlessly. (describe-char): Remove a redundant lambda wrapping #'extent-properties. (describe-char-unicode-data): Call #'nsubst when replacing "" with nil in the result of #'split-string, instead of consing inside mapcar. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * x-faces.el (x-available-font-sizes): * specifier.el (let-specifier): * package-ui.el (pui-add-required-packages): * msw-faces.el (mswindows-available-font-sizes): * modeline.el (modeline-minor-mode-menu): * minibuf.el (minibuf-directory-files): Replace the O2N (delq nil (mapcar (lambda (W) (and X Y)) Z)) with the ON (mapcan (lambda (W) (and X (list Y))) Z) in these files. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (= < > <= >=): When these functions are handed more than two arguments, and those arguments have no side effects, transform to a series of two argument calls, avoiding funcall in the byte-compiled code. * mule/mule-cmds.el (finish-set-language-environment): Take advantage of this change in a function called 256 times at startup. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * bytecomp.el (byte-compile-function-form, byte-compile-quote) (byte-compile-quote-form): Warn at compile time, and error at runtime, if a (quote ...) or a (function ...) form attempts to quote more than one object. 2010-09-16 Aidan Kehoe <kehoea@parhasard.net> * byte-optimize.el (byte-optimize-apply): Transform (apply 'nconc (mapcar ...)) to (mapcan ...); warn about use of the first idiom. * update-elc.el (do-autoload-commands): * packages.el (packages-find-package-library-path): * frame.el (frame-list): * extents.el (extent-descendants): * etags.el (buffer-tag-table-files): * dumped-lisp.el (preloaded-file-list): * device.el (device-list): * bytecomp-runtime.el (proclaim-inline, proclaim-notinline) Use #'mapcan, not (apply #'nconc (mapcar ...) in all these files. * bytecomp-runtime.el (eval-when-compile, eval-and-compile): In passing, mention that these macros also evaluate the body when interpreted. tests/ChangeLog addition: 2011-02-07 Aidan Kehoe <kehoea@parhasard.net> * automated/lisp-tests.el: Test lexical scope for `block', `return-from'; add a Known-Bug-Expect-Failure for a contorted example that fails when byte-compiled.
author Aidan Kehoe <kehoea@parhasard.net>
date Mon, 07 Feb 2011 12:01:24 +0000
parents 9fa10603c898
children 9fae6227ede5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 @c -*-texinfo-*-
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 @c This is part of the XEmacs Lisp Reference Manual.
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
3 @c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 @c See the file lispref.texi for copying conditions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 @setfilename ../../info/building.info
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 @node Building XEmacs and Object Allocation, Standard Errors, Tips, Top
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 @appendix Building XEmacs; Allocation of Objects
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 This chapter describes how the runnable XEmacs executable is dumped
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 with the preloaded Lisp libraries in it and how storage is allocated.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 There is an entire separate document, the @cite{XEmacs Internals
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 Manual}, devoted to the internals of XEmacs from the perspective of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 C programmer. It contains much more detailed information about the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 build process, the allocation and garbage-collection process, and other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 aspects related to the internals of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 * Building XEmacs:: How to preload Lisp libraries into XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 * Garbage Collection:: Reclaiming space for Lisp objects no longer used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 @node Building XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 @appendixsec Building XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 @cindex building XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 @pindex temacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 This section explains the steps involved in building the XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 executable. You don't have to know this material to build and install
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 XEmacs, since the makefiles do all these things automatically. This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 information is pertinent to XEmacs maintenance.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 The @cite{XEmacs Internals Manual} contains more information about this.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 Compilation of the C source files in the @file{src} directory
2818
9fa10603c898 [xemacs-hg @ 2005-06-19 20:49:43 by aidan]
aidan
parents: 959
diff changeset
36 produces an executable file called @file{temacs}. It contains the
9fa10603c898 [xemacs-hg @ 2005-06-19 20:49:43 by aidan]
aidan
parents: 959
diff changeset
37 XEmacs Lisp interpreter and I/O routines, but not the editing commands.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 @cindex @file{loadup.el}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 Before XEmacs is actually usable, a number of Lisp files need to be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 loaded. These define all the editing commands, plus most of the startup
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 code and many very basic Lisp primitives. This is accomplished by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 loading the file @file{loadup.el}, which in turn loads all of the other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 standardly-loaded Lisp files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 It takes a substantial time to load the standard Lisp files. Luckily,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 you don't have to do this each time you run XEmacs; @file{temacs} can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 dump out an executable program called @file{xemacs} that has these files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 preloaded. @file{xemacs} starts more quickly because it does not need to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 load the files. This is the XEmacs executable that is normally
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 installed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 To create @file{xemacs}, use the command @samp{temacs -batch -l loadup
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 dump}. The purpose of @samp{-batch} here is to tell @file{temacs} to run
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 in non-interactive, command-line mode. (@file{temacs} can @emph{only} run
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 in this fashion. Part of the code required to initialize frames and faces
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 is in Lisp, and must be loaded before XEmacs is able to create any frames.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 The argument @samp{dump} tells @file{loadup.el} to dump a new executable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 named @file{xemacs}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 The dumping process is highly system-specific, and some operating
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 systems don't support dumping. On those systems, you must start XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 with the @samp{temacs -batch -l loadup run-temacs} command each time you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 use it. This takes a substantial time, but since you need to start
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 Emacs once a day at most---or once a week if you never log out---the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 extra time is not too severe a problem. (In older versions of Emacs,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 you started Emacs from @file{temacs} using @samp{temacs -l loadup}.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 @cindex runnable @file{temacs}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 @cindex bootstrapping XEmacs from @file{temacs}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 You are free to start XEmacs directly from @file{temacs} if you want,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 even if there is already a dumped @file{xemacs}. Normally you wouldn't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 want to do that; but the Makefiles do this when you rebuild XEmacs using
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 @samp{make all-elc}, which builds XEmacs and simultaneously compiles any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 out-of-date Lisp files. (You need @file{xemacs} in order to compile Lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 files. However, you also need the compiled Lisp files in order to dump
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 out @file{xemacs}. If both of these are missing or corrupted, you are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 out of luck unless you're able to bootstrap @file{xemacs} from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 @file{temacs}. Note that @samp{make all-elc} actually loads the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 alternative loadup file @file{loadup-el.el}, which works like
2818
9fa10603c898 [xemacs-hg @ 2005-06-19 20:49:43 by aidan]
aidan
parents: 959
diff changeset
81 @file{loadup.el} but forces XEmacs to ignore any compiled Lisp files
9fa10603c898 [xemacs-hg @ 2005-06-19 20:49:43 by aidan]
aidan
parents: 959
diff changeset
82 even if they exist.)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 @cindex @file{site-load.el}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 You can specify additional files to preload by writing a library named
2818
9fa10603c898 [xemacs-hg @ 2005-06-19 20:49:43 by aidan]
aidan
parents: 959
diff changeset
86 @file{site-load.el} that loads them. However, the advantage of
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 preloading additional files decreases as machines get faster. On modern
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 machines, it is often not advisable, especially if the Lisp code is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 on a file system local to the machine running XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 @cindex @file{site-init.el}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 You can specify other Lisp expressions to execute just before dumping
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 by putting them in a library named @file{site-init.el}. However, if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 they might alter the behavior that users expect from an ordinary
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 unmodified XEmacs, it is better to put them in @file{default.el}, so that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 users can override them if they wish. @xref{Start-up Summary}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 Before @file{loadup.el} dumps the new executable, it finds the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 documentation strings for primitive and preloaded functions (and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 variables) in the file where they are stored, by calling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 @code{Snarf-documentation} (@pxref{Accessing Documentation}). These
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 strings were moved out of the @file{xemacs} executable to make it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 smaller. @xref{Documentation Basics}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 @defun dump-emacs to-file from-file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 @cindex unexec
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 This function dumps the current state of XEmacs into an executable file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 @var{to-file}. It takes symbols from @var{from-file} (this is normally
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 the executable file @file{temacs}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 If you use this function in an XEmacs that was already dumped, you must
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 set @code{command-line-processed} to @code{nil} first for good results.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 @xref{Command Line Arguments}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 @defun run-emacs-from-temacs &rest args
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 This is the function that implements the @file{run-temacs} command-line
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 argument. It is called from @file{loadup.el} as appropriate. You should
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 most emphatically @emph{not} call this yourself; it will reinitialize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 your XEmacs process and you'll be sorry.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
123 @deffn Command emacs-version &optional arg
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 This function returns a string describing the version of XEmacs that is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 running. It is useful to include this string in bug reports.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
127 When called interactively with a prefix argument, insert string at point.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
128 Don't use this function in programs to choose actions according
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
129 to the system configuration; look at @code{system-configuration} instead.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
130
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 (emacs-version)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 @result{} "XEmacs 20.1 [Lucid] (i586-unknown-linux2.0.29)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 of Mon Apr 7 1997 on altair.xemacs.org"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 Called interactively, the function prints the same information in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 echo area.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 @end deffn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 @defvar emacs-build-time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 The value of this variable is the time at which XEmacs was built at the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 local site.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 emacs-build-time "Mon Apr 7 20:28:52 1997"
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
150 @result{}
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 @defvar emacs-version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 The value of this variable is the version of Emacs being run. It is a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 string, e.g. @code{"20.1 XEmacs Lucid"}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 The following two variables did not exist before FSF GNU Emacs version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 19.23 and XEmacs version 19.10, which reduces their usefulness at
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 present, but we hope they will be convenient in the future.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 @defvar emacs-major-version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 The major version number of Emacs, as an integer. For XEmacs version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 20.1, the value is 20.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 @defvar emacs-minor-version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 The minor version number of Emacs, as an integer. For XEmacs version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 20.1, the value is 1.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 @node Garbage Collection
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 @appendixsec Garbage Collection
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 @cindex garbage collector
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 @cindex memory allocation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 When a program creates a list or the user defines a new function (such
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 as by loading a library), that data is placed in normal storage. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 normal storage runs low, then XEmacs asks the operating system to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 allocate more memory in blocks of 2k bytes. Each block is used for one
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 type of Lisp object, so symbols, cons cells, markers, etc., are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 segregated in distinct blocks in memory. (Vectors, long strings,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 buffers and certain other editing types, which are fairly large, are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 allocated in individual blocks, one per object, while small strings are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 packed into blocks of 8k bytes. [More correctly, a string is allocated
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 in two sections: a fixed size chunk containing the length, list of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 extents, etc.; and a chunk containing the actual characters in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 string. It is this latter chunk that is either allocated individually
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 or packed into 8k blocks. The fixed size chunk is packed into 2k
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 blocks, as for conses, markers, etc.])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 It is quite common to use some storage for a while, then release it by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 (for example) killing a buffer or deleting the last pointer to an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 object. XEmacs provides a @dfn{garbage collector} to reclaim this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 abandoned storage. (This name is traditional, but ``garbage recycler''
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 might be a more intuitive metaphor for this facility.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 The garbage collector operates by finding and marking all Lisp objects
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 that are still accessible to Lisp programs. To begin with, it assumes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 all the symbols, their values and associated function definitions, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 any data presently on the stack, are accessible. Any objects that can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 be reached indirectly through other accessible objects are also
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 accessible.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 When marking is finished, all objects still unmarked are garbage. No
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 matter what the Lisp program or the user does, it is impossible to refer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 to them, since there is no longer a way to reach them. Their space
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 might as well be reused, since no one will miss them. The second
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 (``sweep'') phase of the garbage collector arranges to reuse them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 @cindex free list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 The sweep phase puts unused cons cells onto a @dfn{free list} for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 future allocation; likewise for symbols, markers, extents, events,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 floats, compiled-function objects, and the fixed-size portion of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 strings. It compacts the accessible small string-chars chunks so they
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 occupy fewer 8k blocks; then it frees the other 8k blocks. Vectors,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 buffers, windows, and other large objects are individually allocated and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 freed using @code{malloc} and @code{free}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 @cindex CL note---allocate more storage
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 @quotation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 @b{Common Lisp note:} unlike other Lisps, XEmacs Lisp does not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 call the garbage collector when the free list is empty. Instead, it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 simply requests the operating system to allocate more storage, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 processing continues until @code{gc-cons-threshold} bytes have been
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 This means that you can make sure that the garbage collector will not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 run during a certain portion of a Lisp program by calling the garbage
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 collector explicitly just before it (provided that portion of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 program does not use so much space as to force a second garbage
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 collection).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 @end quotation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 @deffn Command garbage-collect
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 This command runs a garbage collection, and returns information on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 the amount of space in use. (Garbage collection can also occur
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 spontaneously if you use more than @code{gc-cons-threshold} bytes of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 Lisp data since the previous garbage collection.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 @code{garbage-collect} returns a list containing the following
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 information:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 ((@var{used-conses} . @var{free-conses})
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 (@var{used-syms} . @var{free-syms})
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 (@var{used-markers} . @var{free-markers})
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
252 @var{used-string-chars}
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 @var{used-vector-slots}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 (@var{plist}))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 @result{} ((73362 . 8325) (13718 . 164)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 (5089 . 5098) 949121 118677
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 (conses-used 73362 conses-free 8329 cons-storage 658168
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 symbols-used 13718 symbols-free 164 symbol-storage 335216
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 bit-vectors-used 0 bit-vectors-total-length 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 bit-vector-storage 0 vectors-used 7882
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 vectors-total-length 118677 vector-storage 537764
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 compiled-functions-used 1336 compiled-functions-free 37
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 compiled-function-storage 44440 short-strings-used 28829
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 long-strings-used 2 strings-free 7722
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 short-strings-total-length 916657 short-string-storage 1179648
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 long-strings-total-length 32464 string-header-storage 441504
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 floats-used 3 floats-free 43 float-storage 2044 markers-used 5089
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 markers-free 5098 marker-storage 245280 events-used 103
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 events-free 835 event-storage 110656 extents-used 10519
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 extents-free 2718 extent-storage 372736
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 extent-auxiliarys-used 111 extent-auxiliarys-freed 3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 extent-auxiliary-storage 4440 window-configurations-used 39
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 window-configurations-on-free-list 5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 window-configurations-freed 10 window-configuration-storage 9492
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 popup-datas-used 3 popup-data-storage 72 toolbar-buttons-used 62
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 toolbar-button-storage 4960 toolbar-datas-used 12
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 toolbar-data-storage 240 symbol-value-buffer-locals-used 182
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 symbol-value-buffer-local-storage 5824
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 symbol-value-lisp-magics-used 22
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 symbol-value-lisp-magic-storage 1496
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 symbol-value-varaliases-used 43
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 symbol-value-varalias-storage 1032 opaque-lists-used 2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 opaque-list-storage 48 color-instances-used 12
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 color-instance-storage 288 font-instances-used 5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 font-instance-storage 180 opaques-used 11 opaque-storage 312
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 range-tables-used 1 range-table-storage 16 faces-used 34
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 face-storage 2584 glyphs-used 124 glyph-storage 4464
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 specifiers-used 775 specifier-storage 43869 weak-lists-used 786
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 weak-list-storage 18864 char-tables-used 40
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 char-table-storage 41920 buffers-used 25 buffer-storage 7000
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 extent-infos-used 457 extent-infos-freed 73
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 extent-info-storage 9140 keymaps-used 275 keymap-storage 12100
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 consoles-used 4 console-storage 384 command-builders-used 2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 command-builder-storage 120 devices-used 2 device-storage 344
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 frames-used 3 frame-storage 624 image-instances-used 47
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 image-instance-storage 3008 windows-used 27 windows-freed 2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 window-storage 9180 lcrecord-lists-used 15
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 lcrecord-list-storage 360 hash-tables-used 631
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 hash-table-storage 25240 streams-used 1 streams-on-free-list 3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 streams-freed 12 stream-storage 91))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 Here is a table explaining each element:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 @table @var
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 @item used-conses
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 The number of cons cells in use.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 @item free-conses
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 The number of cons cells for which space has been obtained from the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 operating system, but that are not currently being used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 @item used-syms
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 The number of symbols in use.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 @item free-syms
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 The number of symbols for which space has been obtained from the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 operating system, but that are not currently being used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 @item used-markers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 The number of markers in use.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 @item free-markers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 The number of markers for which space has been obtained from the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 operating system, but that are not currently being used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 @item used-string-chars
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 The total size of all strings, in characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 @item used-vector-slots
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 The total number of elements of existing vectors.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 @item plist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 A list of alternating keyword/value pairs providing more detailed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 information. (As you can see above, quite a lot of information is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 provided.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 @ignore @c Different in XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 @item used-floats
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 @c Emacs 19 feature
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 The number of floats in use.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 @item free-floats
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 @c Emacs 19 feature
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 The number of floats for which space has been obtained from the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 operating system, but that are not currently being used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 @end ignore
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 @end deffn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 @defopt gc-cons-threshold
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 The value of this variable is the number of bytes of storage that must
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 be allocated for Lisp objects after one garbage collection in order to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 trigger another garbage collection. A cons cell counts as eight bytes,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 a string as one byte per character plus a few bytes of overhead, and so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 on; space allocated to the contents of buffers does not count. Note
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 that the subsequent garbage collection does not happen immediately when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 the threshold is exhausted, but only the next time the Lisp evaluator is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 called.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 The initial threshold value is 500,000. If you specify a larger
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 value, garbage collection will happen less often. This reduces the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 amount of time spent garbage collecting, but increases total memory use.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 You may want to do this when running a program that creates lots of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 Lisp data.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 You can make collections more frequent by specifying a smaller value,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 down to 10,000. A value less than 10,000 will remain in effect only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 until the subsequent garbage collection, at which time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 @code{garbage-collect} will set the threshold back to 10,000. (This does
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 not apply if XEmacs was configured with @samp{--debug}. Therefore, be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 careful when setting @code{gc-cons-threshold} in that case!)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 @end defopt
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
378 @ignore
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 @c Emacs 19 feature
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 @defun memory-limit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 This function returns the address of the last byte XEmacs has allocated,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 divided by 1024. We divide the value by 1024 to make sure it fits in a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 Lisp integer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 You can use this to get a general idea of how your actions affect the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 memory usage.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 @end defun
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
388 @end ignore
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 @defvar pre-gc-hook
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 This is a normal hook to be run just before each garbage collection.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 Interrupts, garbage collection, and errors are inhibited while this hook
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 runs, so be extremely careful in what you add here. In particular,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 avoid consing, and do not interact with the user.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 @defvar post-gc-hook
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 This is a normal hook to be run just after each garbage collection.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 Interrupts, garbage collection, and errors are inhibited while this hook
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 runs, so be extremely careful in what you add here. In particular,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 avoid consing, and do not interact with the user.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 @defvar gc-message
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 This is a string to print to indicate that a garbage collection is in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 progress. This is printed in the echo area. If the selected frame is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 on a window system and @code{gc-pointer-glyph} specifies a value (i.e. a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 pointer image instance) in the domain of the selected frame, the mouse
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 cursor will change instead of this message being printed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 @defvr Glyph gc-pointer-glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 This holds the pointer glyph used to indicate that a garbage collection
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 is in progress. If the selected window is on a window system and this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 glyph specifies a value (i.e. a pointer image instance) in the domain of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 the selected window, the cursor will be changed as specified during
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 garbage collection. Otherwise, a message will be printed in the echo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 area, as controlled by @code{gc-message}. @xref{Glyphs}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 @end defvr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 If XEmacs was configured with @samp{--debug}, you can set the following
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 two variables to get direct information about all the allocation that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 is happening in a segment of Lisp code.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 @defvar debug-allocation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 If non-zero, print out information to stderr about all objects
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 allocated.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 @defvar debug-allocation-backtrace
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 Length (in stack frames) of short backtrace printed out by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 @code{debug-allocation}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 @end defvar