annotate src/lisp.h @ 5157:1fae11d56ad2

redo memory-usage mechanism, add way of dynamically initializing Lisp objects -------------------- ChangeLog entries follow: -------------------- lisp/ChangeLog addition: 2010-03-18 Ben Wing <ben@xemacs.org> * diagnose.el (show-memory-usage): Rewrite to take into account API changes in memory-usage functions. src/ChangeLog addition: 2010-03-18 Ben Wing <ben@xemacs.org> * alloc.c: * alloc.c (disksave_object_finalization_1): * alloc.c (lisp_object_storage_size): * alloc.c (listu): * alloc.c (listn): * alloc.c (Fobject_memory_usage_stats): * alloc.c (compute_memusage_stats_length): * alloc.c (Fobject_memory_usage): * alloc.c (Ftotal_object_memory_usage): * alloc.c (malloced_storage_size): * alloc.c (common_init_alloc_early): * alloc.c (reinit_alloc_objects_early): * alloc.c (reinit_alloc_early): * alloc.c (init_alloc_once_early): * alloc.c (syms_of_alloc): * alloc.c (reinit_vars_of_alloc): * buffer.c: * buffer.c (struct buffer_stats): * buffer.c (compute_buffer_text_usage): * buffer.c (compute_buffer_usage): * buffer.c (buffer_memory_usage): * buffer.c (buffer_objects_create): * buffer.c (syms_of_buffer): * buffer.c (vars_of_buffer): * console-impl.h (struct console_methods): * dynarr.c (Dynarr_memory_usage): * emacs.c (main_1): * events.c (clear_event_resource): * extents.c: * extents.c (compute_buffer_extent_usage): * extents.c (extent_objects_create): * extents.h: * faces.c: * faces.c (compute_face_cachel_usage): * faces.c (face_objects_create): * faces.h: * general-slots.h: * glyphs.c: * glyphs.c (compute_glyph_cachel_usage): * glyphs.c (glyph_objects_create): * glyphs.h: * lisp.h: * lisp.h (struct usage_stats): * lrecord.h: * lrecord.h (enum lrecord_type): * lrecord.h (struct lrecord_implementation): * lrecord.h (MC_ALLOC_CALL_FINALIZER_FOR_DISKSAVE): * lrecord.h (DEFINE_DUMPABLE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_FROB_BLOCK_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_FROB_BLOCK_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_INTERNAL_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_SIZABLE_INTERNAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_FROB_BLOCK_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_INTERNAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_SIZABLE_INTERNAL_LISP_OBJECT): * lrecord.h (MAKE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_MODULE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_MODULE_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_MODULE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_MODULE_SIZABLE_LISP_OBJECT): * lrecord.h (MAKE_MODULE_LISP_OBJECT): * lrecord.h (INIT_LISP_OBJECT): * lrecord.h (INIT_MODULE_LISP_OBJECT): * lrecord.h (UNDEF_LISP_OBJECT): * lrecord.h (UNDEF_MODULE_LISP_OBJECT): * lrecord.h (DECLARE_LISP_OBJECT): * lrecord.h (DECLARE_MODULE_API_LISP_OBJECT): * lrecord.h (DECLARE_MODULE_LISP_OBJECT): * lstream.c: * lstream.c (syms_of_lstream): * lstream.c (vars_of_lstream): * marker.c: * marker.c (compute_buffer_marker_usage): * mc-alloc.c (mc_alloced_storage_size): * mc-alloc.h: * mule-charset.c: * mule-charset.c (struct charset_stats): * mule-charset.c (compute_charset_usage): * mule-charset.c (charset_memory_usage): * mule-charset.c (mule_charset_objects_create): * mule-charset.c (syms_of_mule_charset): * mule-charset.c (vars_of_mule_charset): * redisplay.c: * redisplay.c (compute_rune_dynarr_usage): * redisplay.c (compute_display_block_dynarr_usage): * redisplay.c (compute_glyph_block_dynarr_usage): * redisplay.c (compute_display_line_dynarr_usage): * redisplay.c (compute_line_start_cache_dynarr_usage): * redisplay.h: * scrollbar-gtk.c (gtk_compute_scrollbar_instance_usage): * scrollbar-msw.c (mswindows_compute_scrollbar_instance_usage): * scrollbar-x.c (x_compute_scrollbar_instance_usage): * scrollbar.c (compute_scrollbar_instance_usage): * scrollbar.h: * symbols.c: * symbols.c (reinit_symbol_objects_early): * symbols.c (init_symbols_once_early): * symbols.c (reinit_symbols_early): * symbols.c (defsymbol_massage_name_1): * symsinit.h: * ui-gtk.c: * ui-gtk.c (emacs_gtk_object_getprop): * ui-gtk.c (emacs_gtk_object_putprop): * ui-gtk.c (ui_gtk_objects_create): * unicode.c (compute_from_unicode_table_size_1): * unicode.c (compute_to_unicode_table_size_1): * unicode.c (compute_from_unicode_table_size): * unicode.c (compute_to_unicode_table_size): * window.c: * window.c (struct window_stats): * window.c (compute_window_mirror_usage): * window.c (compute_window_usage): * window.c (window_memory_usage): * window.c (window_objects_create): * window.c (syms_of_window): * window.c (vars_of_window): * window.h: Redo memory-usage mechanism, make it general; add way of dynamically initializing Lisp object types -- OBJECT_HAS_METHOD(), similar to CONSOLE_HAS_METHOD(). (1) Create OBJECT_HAS_METHOD(), OBJECT_HAS_PROPERTY() etc. for specifying that a Lisp object type has a particular method or property. Call such methods with OBJECT_METH, MAYBE_OBJECT_METH, OBJECT_METH_OR_GIVEN; retrieve properties with OBJECT_PROPERTY. Methods that formerly required a DEFINE_*GENERAL_LISP_OBJECT() to specify them (getprop, putprop, remprop, plist, disksave) now instead use the dynamic-method mechanism. The main benefit of this is that new methods or properties can be added without requiring that the declaration statements of all existing methods be modified. We have to make the `struct lrecord_implementation' non-const, but I don't think this should have any effect on speed -- the only possible method that's really speed-critical is the mark method, and we already extract those out into a separate (non-const) array for increased cache locality. Object methods need to be reinitialized after pdump, so we put them in separate functions such as face_objects_create(), extent_objects_create() and call them appropriately from emacs.c The only current object property (`memusage_stats_list') that objects can specify is a Lisp object and gets staticpro()ed so it only needs to be set during dump time, but because it references symbols that might not exist in a syms_of_() function, we initialize it in vars_of_(). There is also an object property (`num_extra_memusage_stats') that is automatically initialized based on `memusage_stats_list'; we do that in reinit_vars_of_alloc(), which is called after all vars_of_() functions are called. `disksaver' method was renamed `disksave' to correspond with the name normally given to the function (e.g. disksave_lstream()). (2) Generalize the memory-usage mechanism in `buffer-memory-usage', `window-memory-usage', `charset-memory-usage' into an object-type- specific mechanism called by a single function `object-memory-usage'. (Former function `object-memory-usage' renamed to `total-object-memory-usage'). Generalize the mechanism of different "slices" so that we can have different "classes" of memory described and different "slices" onto each class; `t' separates classes, `nil' separates slices. Currently we have three classes defined: the memory of an object itself, non-Lisp-object memory associated with the object (e.g. arrays or dynarrs stored as fields in the object), and Lisp-object memory associated with the object (other internal Lisp objects stored in the object). This isn't completely finished yet and we might need to further separate the "other internal Lisp objects" class into two classes. The memory-usage mechanism uses a `struct usage_stats' (renamed from `struct overhead_stats') to describe a malloc-view onto a set of allocated memory (listing how much was requested and various types of overhead) and a more general `struct generic_usage_stats' (with a `struct usage_stats' in it) to hold all statistics about object memory. `struct generic_usage_stats' contains an array of 32 Bytecounts, which are statistics of unspecified semantics. The intention is that individual types declare a corresponding struct (e.g. `struct window_stats') with the same structure but with specific fields in place of the array, corresponding to specific statistics. The number of such statistics is an object property computed from the list of tags (Lisp symbols describing the statistics) stored in `memusage_stats_list'. The idea here is to allow particular object types to customize the number and semantics of the statistics where completely avoiding consing. This doesn't matter so much yet, but the intention is to have the memory usage of all objects computed at the end of GC, at the same time as other statistics are currently computed. The values for all statistics for a single type would be added up to compute aggregate values for all objects of a specific type. To make this efficient, we can't allow any memory allocation at all. (3) Create some additional functions for creating lists that specify the elements directly as args rather than indirectly through an array: listn() (number of args given), listu() (list terminated by Qunbound). (4) Delete a bit of remaining unused C window_config stuff, also unused lrecord_type_popup_data.
author Ben Wing <ben@xemacs.org>
date Thu, 18 Mar 2010 10:50:06 -0500
parents 88bd4f3ef8e4
children 9e0b43d3095c
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 /* Fundamental definitions for XEmacs Lisp interpreter.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1985-1987, 1992-1995 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 Copyright (C) 1993-1996 Richard Mlynarik.
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
4 Copyright (C) 1995, 1996, 2000-2005, 2009, 2010 Ben Wing.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 XEmacs is distributed in the hope that it will be useful, but WITHOUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 for more details.
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 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 Boston, MA 02111-1307, USA. */
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 /* Synched up with: FSF 19.30. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
25 #ifndef INCLUDED_lisp_h_
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
26 #define INCLUDED_lisp_h_
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
27
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
28 /* Authorship:
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
29
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
30 Based on code from pre-release FSF 19, c. 1991.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
31 Various changes by Jamie Zawinski 1991-1994:
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
32 converting to ANSI C, splitting out function prototypes to a separate
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
33 file (later moved back for unknown reasons by Steve Baur?), debug-gcpro
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
34 stuff (now moribund).
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
35 ANSI-fication of DEFUN macros by Felix Lee, c. 1992?
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
36 NOT_REACHED, DOESNT_RETURN, PRINTF_ARGS by Richard Mlynarik, c. 1994.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
37 Many changes over the years corresponding to Lisp_Object definition
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
38 changes, esp. by Richard Mlynarik (c. 1993) and Kyle Jones (c. 1998).
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
39 See alloc.c for more details.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
40 Overhauled and reordered by Ben Wing, 1995-1996, and many things added:
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
41 Dynarrs, REALLOC macros, asserts, typedefs, inline header code,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
42 first LIST_LOOP macros, CONCHECK_*, all error-checking code
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
43 (e.g. error-checking versions of XFOO macros), structure read syntax,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
44 weak lists, lcrecord lists, reworking of quit handling, object hashing,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
45 nested GCPRO, character objects and Ebola checking, memory usage stats,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
46 others.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
47 LOADHIST changes from Steve Baur, c. 1997?
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
48 Various macro-related changes by Martin Buchholz, 1998-1999:
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
49 LIST_LOOP macros greatly expanded and tortoise-hared;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
50 RETURN_SANS_WARNINGS; reworked DEFUN macros; EXFUN macros (???).
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
51 Various macro-related changes by Jerry James, 2003:
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
52 MODULE_API introduced;
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
53 Compiler-specific definitions modernized and moved to compiler.h.
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
54 */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
55
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
56 /* Conventions in comments:
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
57
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
58 "Mule-izing" is the process of going through a file and eliminating
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
59 assumptions that the internal format (Ibyte * text) is the same as the
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
60 external format used by library routines. Mule-ization should also
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
61 include replacing *ALL* raw references to `char' or `unsigned char' with
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
62 one of the self-documenting types created below. How exactly to do the
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
63 conversion, and how to write correctly Mule-ized code, is described in
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
64 the internals manual. Files that say "This file is Mule-ized" have
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
65 been reviewed at some point; that's not to say that incorrect code hasn't
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
66 crept in, though.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
67
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
68 "Unicode-splitting" is the process of fixing a file so that it will
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
69 handle external text in Unicode under Microsoft Windows, as appropriate.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
70 ("splitting" because it needs to handle either Unicode or variable-width
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
71 multibyte depending on the OS -- NT or 9x). See intl-win32.c.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
72
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
73 #### is a way of marking problems of any sort.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
74
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
75 !!#### marks places that are not properly Mule-ized.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
76
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
77 &&#### marks places that need to be fixed in order for the "8-bit mule"
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
78 conversion to work correctly, i.e. in order to support multiple different
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
79 buffer formats under Mule, including a fixed 8-bit format.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
80
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
81 ^^#### marks places that need to be fixed in order to eliminate the
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
82 assumption that Ibyte * text is composed of 1-byte units (e.g. UTF-16
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
83 is composed of 2-byte units and might be a possible format to consider
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
84 for Ibyte * text).
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
85
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
86 %%#### marks places that need work for KKCC (the new garbage collector).
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
87
5090
0ca81354c4c7 Further frame-geometry cleanups
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
88 @@#### marks places that need work to get Unicode-internal working,
0ca81354c4c7 Further frame-geometry cleanups
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
89 i.e. using UTF-8 as the internal text format.
0ca81354c4c7 Further frame-geometry cleanups
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
90
0ca81354c4c7 Further frame-geometry cleanups
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
91 #### BILL! marks places that need work for GTK.
0ca81354c4c7 Further frame-geometry cleanups
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
92
0ca81354c4c7 Further frame-geometry cleanups
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
93 #### GEOM! marks places needing work to fix various bugs in the handling
0ca81354c4c7 Further frame-geometry cleanups
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
94 of window and frame sizing and positioning. Often the root of the
0ca81354c4c7 Further frame-geometry cleanups
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
95 problems is that the code was originally written before there was a
0ca81354c4c7 Further frame-geometry cleanups
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
96 gutter and then not completely fixed up to accommodate the gutter.
0ca81354c4c7 Further frame-geometry cleanups
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
97
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
98 */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
99
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
100 /************************************************************************/
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
101 /* include files */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
102 /************************************************************************/
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
103
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 /* We include the following generally useful header files so that you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 don't have to worry about prototypes when using the standard C
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 library functions and macros. These files shouldn't be excessively
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 large so they shouldn't cause that much of a slowdown. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 #include <stdlib.h>
5016
2ade80e8c640 enable more warnings and fix them
Ben Wing <ben@xemacs.org>
parents: 5015
diff changeset
110 /* Evil, but ... -Wshadow is genuinely useful but also leads to spurious
2ade80e8c640 enable more warnings and fix them
Ben Wing <ben@xemacs.org>
parents: 5015
diff changeset
111 warnings when you have a local var named `index'. Avoid this by
2ade80e8c640 enable more warnings and fix them
Ben Wing <ben@xemacs.org>
parents: 5015
diff changeset
112 hacking around it. */
2ade80e8c640 enable more warnings and fix them
Ben Wing <ben@xemacs.org>
parents: 5015
diff changeset
113 #define index old_index
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 #include <string.h> /* primarily for memcpy, etc. */
5016
2ade80e8c640 enable more warnings and fix them
Ben Wing <ben@xemacs.org>
parents: 5015
diff changeset
115 #undef index
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 #include <stdio.h> /* NULL, etc. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 #include <ctype.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 #include <stdarg.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 #include <stddef.h> /* offsetof */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 #include <sys/types.h>
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
121 #include <limits.h>
4932
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
122 #ifdef __cplusplus
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
123 #include <limits> /* necessary for max()/min() under G++ 4 */
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
124 #endif
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
125
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
126
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
127 /************************************************************************/
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
128 /* error checking */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
129 /************************************************************************/
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
130
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
131 /* ------------------------- large categories ------------------------- */
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
132
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
133 /* How these work:
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
134
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
135 The most common classes will be `text' and `type', followed by `structure'.
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
136 `text' is for problems related to bad textual format. `type' is for
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
137 problems related to wrongly typed arguments, structure fields, etc.
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
138 `structure' is for bad data inside of a structure. Sometimes these are
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
139 used "incorrectly", e.g. `type' is often used for structure-checking.
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
140 Consider `text':
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
141
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
142 `text_checking_assert() will assert() only when ERROR_CHECK_TEXT is defined;
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
143 otherwise it's a no-op. text_checking_assert_at_line() is similar, but
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
144 allows you to override the file name and line number normally supplied in
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
145 the message. This is especially useful in inline header functions, and
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
146 so there's a special inline_text_checking_assert() for this; this works
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
147 like text_checking_assert() but supplies the file and line of the calling
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
148 function. In order for this to work, you need to declare your inline
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
149 function with INLINE_TEXT_CHECK_ARGS at the end of its argument list,
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
150 and give its function name a _1 extension or similar. Then create a
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
151 macro that calls your inline function and includes INLINE_TEXT_CHECK_CALL
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
152 at the end of the parameter list. This will arrange to pass in and receive
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
153 the file and line (__FILE__, __LINE__) at place where the call occurs in
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
154 the calling function; but nothing will get passed in when ERROR_CHECK_TEXT
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
155 is not defined.
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
156
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
157 Currently the full bevy of *foo_checking_assert* macros are defined only
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
158 for `text' and `types'; for others, only the basic foo_checking_assert()
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
159 macro is defined. Writing out all the variations for all possible error
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
160 categories would produce too much clutter. If any of these become
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
161 needed, they can always be defined. */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
162
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
163 /* #### I suggest revamping these and making proper use of the
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
164 category/subcategory system. Here is one proposal:
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
165
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
166 Major category Minor categories
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
167 --------------------------------
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
168 Allocation
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
169 Malloc
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
170 Dynarr
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
171
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
172 Display
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
173 Extents
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
174 Glyphs
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
175 Redisplay
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
176
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
177 Execution
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
178 Byte-Code
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
179 Catch
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
180 Garbage Collection
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
181 Trapping-Problems
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
182
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
183 Lisp Objects
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
184 Buffers
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
185 Char Tables
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
186 Events
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
187 Lstreams
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
188 Hash Tables
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
189 Range Tables
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
190
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
191 Types
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
192 Lrecord Types
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
193 Subtypes
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
194
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
195 Text
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
196 Byte Positions
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
197 Conversion
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
198 Eistrings
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
199 Itext
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
200 Lisp Strings
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
201
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
202 --ben
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
203 */
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
204
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
205
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
206 #define INLINE_ERROR_CHECK_ARGS , const char *__file__, int __line__
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
207 #define INLINE_ERROR_CHECK_CALL , __FILE__, __LINE__
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
208 #define DISABLED_INLINE_ERROR_CHECK_ARGS
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
209 #define DISABLED_INLINE_ERROR_CHECK_CALL
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
210
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
211 /* For assertions in inline header functions which will report the file and
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
212 line of the calling function */
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
213 #define inline_assert(assertion) assert_at_line (assertion, __file__, __line__)
5021
4e784bfabae7 fix bad defn of disabled inline assert
Ben Wing <ben@xemacs.org>
parents: 5020
diff changeset
214 /* The following should not use disabled_assert_at_line() because when the
4e784bfabae7 fix bad defn of disabled inline assert
Ben Wing <ben@xemacs.org>
parents: 5020
diff changeset
215 inline assert is disabled, params __file__ and __line__ do not exist. */
4e784bfabae7 fix bad defn of disabled inline assert
Ben Wing <ben@xemacs.org>
parents: 5020
diff changeset
216 #define disabled_inline_assert(assertion) disabled_assert (assertion)
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
217
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
218 /* ------- the specific categories -------- */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
219
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
220 #if defined (ERROR_CHECK_BYTE_CODE) || defined (ERROR_CHECK_DISPLAY) || defined (ERROR_CHECK_EXTENTS) || defined (ERROR_CHECK_GC) || defined (ERROR_CHECK_GLYPHS) || defined (ERROR_CHECK_MALLOC) || defined (ERROR_CHECK_STRUCTURES) || defined (ERROR_CHECK_TEXT) || defined (ERROR_CHECK_TYPES)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
221 #define ERROR_CHECK_ANY
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
222 #endif
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
223
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
224 /* KEEP THESE SORTED! */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
225
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
226 #ifdef ERROR_CHECK_BYTE_CODE
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
227 #define byte_code_checking_assert(assertion) assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
228 #else /* not ERROR_CHECK_BYTE_CODE */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
229 #define byte_code_checking_assert(assertion) disabled_assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
230 #endif /* ERROR_CHECK_BYTE_CODE */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
231
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
232 #ifdef ERROR_CHECK_DISPLAY
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
233 #define display_checking_assert(assertion) assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
234 #else /* not ERROR_CHECK_DISPLAY */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
235 #define display_checking_assert(assertion) disabled_assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
236 #endif /* ERROR_CHECK_DISPLAY */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
237
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
238 #ifdef ERROR_CHECK_EXTENTS
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
239 #define extent_checking_assert(assertion) assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
240 #else /* not ERROR_CHECK_EXTENTS */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
241 #define extent_checking_assert(assertion) disabled_assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
242 #endif /* ERROR_CHECK_EXTENTS */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
243
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
244 #ifdef ERROR_CHECK_GC
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
245 #define gc_checking_assert(assertion) assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
246 #else /* not ERROR_CHECK_GC */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
247 #define gc_checking_assert(assertion) disabled_assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
248 #endif /* ERROR_CHECK_GC */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
249
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
250 #ifdef ERROR_CHECK_GLYPHS
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
251 #define glyph_checking_assert(assertion) assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
252 #else /* not ERROR_CHECK_GLYPHS */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
253 #define glyph_checking_assert(assertion) disabled_assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
254 #endif /* ERROR_CHECK_GLYPHS */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
255
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
256 #ifdef ERROR_CHECK_MALLOC
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
257 #define malloc_checking_assert(assertion) assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
258 #else /* not ERROR_CHECK_MALLOC */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
259 #define malloc_checking_assert(assertion) disabled_assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
260 #endif /* ERROR_CHECK_MALLOC */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
261
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
262 #ifdef ERROR_CHECK_STRUCTURES
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
263 #define structure_checking_assert(assertion) assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
264 #else /* not ERROR_CHECK_STRUCTURES */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
265 #define structure_checking_assert(assertion) disabled_assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
266 #endif /* ERROR_CHECK_STRUCTURES */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
267
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
268 #ifdef ERROR_CHECK_TEXT
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
269 #define text_checking_assert(assertion) assert (assertion)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
270 #define text_checking_assert_at_line(assertion, file, line) \
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
271 assert_at_line (assertion, file, line)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
272 #define inline_text_checking_assert(assertion) inline_assert (assertion)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
273 #define INLINE_TEXT_CHECK_ARGS INLINE_ERROR_CHECK_ARGS
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
274 #define INLINE_TEXT_CHECK_CALL INLINE_ERROR_CHECK_CALL
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
275 #define text_checking_assert_with_message(assertion, msg) \
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
276 assert_with_message (assertion, msg)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
277 #else /* not ERROR_CHECK_TEXT */
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
278 #define text_checking_assert(assertion) disabled_assert (assertion)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
279 #define text_checking_assert_at_line(assertion, file, line) \
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
280 disabled_assert_at_line (assertion, file, line)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
281 #define inline_text_checking_assert(assertion) \
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
282 disabled_inline_assert (assertion)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
283 #define INLINE_TEXT_CHECK_ARGS DISABLED_INLINE_ERROR_CHECK_ARGS
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
284 #define INLINE_TEXT_CHECK_CALL DISABLED_INLINE_ERROR_CHECK_CALL
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
285 #define text_checking_assert_with_message(assertion, msg) \
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
286 disabled_assert_with_message (assertion, msg)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
287 #endif /* ERROR_CHECK_TEXT */
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
288
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
289 #ifdef ERROR_CHECK_TYPES
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
290 #define type_checking_assert(assertion) assert (assertion)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
291 #define type_checking_assert_at_line(assertion, file, line) \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
292 assert_at_line (assertion, file, line)
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
293 #define inline_type_checking_assert(assertion) inline_assert (assertion)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
294 #define INLINE_TYPE_CHECK_ARGS INLINE_ERROR_CHECK_ARGS
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
295 #define INLINE_TYPE_CHECK_CALL INLINE_ERROR_CHECK_CALL
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
296 #define type_checking_assert_with_message(assertion, msg) \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
297 assert_with_message (assertion, msg)
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
298 #else /* not ERROR_CHECK_TYPES */
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
299 #define type_checking_assert(assertion) disabled_assert (assertion)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
300 #define type_checking_assert_at_line(assertion, file, line) \
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
301 disabled_assert_at_line (assertion, file, line)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
302 #define inline_type_checking_assert(assertion) \
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
303 disabled_inline_assert (assertion)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
304 #define INLINE_TYPE_CHECK_ARGS DISABLED_INLINE_ERROR_CHECK_ARGS
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
305 #define INLINE_TYPE_CHECK_CALL DISABLED_INLINE_ERROR_CHECK_CALL
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
306 #define type_checking_assert_with_message(assertion, msg) \
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
307 disabled_assert_with_message (assertion, msg)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
308 #endif /* ERROR_CHECK_TYPES */
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
309
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
310 /* ------------------------- small categories ------------------------- */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
311
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
312 /* The large categories established by configure can be subdivided into
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
313 smaller subcategories, for problems in specific modules. You can't
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
314 control this using configure, but you can manually stick in a define as
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
315 necessary.
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
316
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
317 The idea is to go ahead and create a new type of error-checking and
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
318 have it turned on if the larger category it is a part of is also
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
319 turned on. For example, ERROR_CHECK_DYNARR is considered a subcategory
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
320 of ERROR_CHECK_STRUCTURES.
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
321
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
322 We also define foo_checking_assert() macros for convenience, but
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
323 generally don't define the many variations of this macro as for the
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
324 major types above, because it produces too much clutter. If any of
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
325 these become needed, they can always be defined. */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
326
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
327 #ifdef ERROR_CHECK_STRUCTURES
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
328 /* Check for problems with the catch list and specbind stack */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
329 #define ERROR_CHECK_CATCH
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
330 /* Check for incoherent dynarr structures, attempts to access Dynarr
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
331 positions out of range, reentrant use of dynarrs through dynarr locking,
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
332 etc. */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
333 #define ERROR_CHECK_DYNARR
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
334 /* Check for insufficient use of call_trapping_problems(), particularly
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
335 due to glyph-related changes causing eval or QUIT within redisplay */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
336 #define ERROR_CHECK_TRAPPING_PROBLEMS
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
337 #endif /* ERROR_CHECK_STRUCTURES */
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
338
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
339 #ifdef ERROR_CHECK_CATCH
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
340 #define catch_checking_assert(assertion) assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
341 #else /* not ERROR_CHECK_CATCH */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
342 #define catch_checking_assert(assertion) disabled_assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
343 #endif /* ERROR_CHECK_CATCH */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
344
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
345 #ifdef ERROR_CHECK_DYNARR
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
346 #define dynarr_checking_assert(assertion) assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
347 #else /* not ERROR_CHECK_DYNARR */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
348 #define dynarr_checking_assert(assertion) disabled_assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
349 #endif /* ERROR_CHECK_DYNARR */
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
350
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
351 #ifdef ERROR_CHECK_TRAPPING_PROBLEMS
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
352 #define trapping_problems_checking_assert(assertion) assert (assertion)
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
353 #else /* not ERROR_CHECK_TRAPPING_PROBLEMS */
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
354 #define trapping_problems_checking_assert(assertion) disabled_assert (assertion)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
355 #endif /* ERROR_CHECK_TRAPPING_PROBLEMS */
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
356
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
357 /************************************************************************/
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
358 /** Definitions of basic types **/
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
359 /************************************************************************/
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
360
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
361 /* ------------- generic 8/16/32/64/128-bit integral types ------------ */
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
362
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
363 #if SIZEOF_SHORT == 2
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
364 #define INT_16_BIT short
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
365 #define UINT_16_BIT unsigned short
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
366 #elif SIZEOF_INT == 2
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
367 /* Bwa ha ha. As if XEmacs could actually support such systems. */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
368 #define INT_16_BIT int
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
369 #define UINT_16_BIT unsigned int
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
370 #else
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
371 #error Unable to find a 16-bit integral type
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
372 #endif
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
373
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
374 #if SIZEOF_INT == 4
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
375 #define INT_32_BIT int
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
376 #define UINT_32_BIT unsigned int
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
377 #define MAKE_32_BIT_UNSIGNED_CONSTANT(num) num##U
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
378 #elif SIZEOF_LONG == 4
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
379 /* Bwa ha ha again. */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
380 #define INT_32_BIT long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
381 #define UINT_32_BIT unsigned long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
382 #define MAKE_32_BIT_UNSIGNED_CONSTANT(num) num##UL
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
383 #elif SIZEOF_SHORT == 4
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
384 /* And again. */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
385 #define INT_32_BIT short
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
386 #define UINT_32_BIT unsigned short
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
387 #define MAKE_32_BIT_UNSIGNED_CONSTANT(num) num##U
1429
969b7290edca [xemacs-hg @ 2003-04-24 05:33:43 by youngs]
youngs
parents: 1346
diff changeset
388 #elif 1 /* Unable to find a 32-bit integral type! */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
389 #error What kind of strange-ass system are you running on?
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
390 #endif
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
391
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
392 #if SIZEOF_LONG == 8
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
393 #define INT_64_BIT long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
394 #define UINT_64_BIT unsigned long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
395 #define MAKE_64_BIT_UNSIGNED_CONSTANT(num) num##UL
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
396 #elif SIZEOF_LONG_LONG == 8
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
397 #define INT_64_BIT long long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
398 #define UINT_64_BIT unsigned long long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
399 #define MAKE_64_BIT_UNSIGNED_CONSTANT(num) num##ULL
4682
648f4a0dac3e Fix build problems on WIN32 platforms caused by the large image crash fix.
Jerry James <james@xemacs.org>
parents: 4678
diff changeset
400 #elif defined(WIN32_ANY)
648f4a0dac3e Fix build problems on WIN32 platforms caused by the large image crash fix.
Jerry James <james@xemacs.org>
parents: 4678
diff changeset
401 #define INT_64_BIT __int64
648f4a0dac3e Fix build problems on WIN32 platforms caused by the large image crash fix.
Jerry James <james@xemacs.org>
parents: 4678
diff changeset
402 #define UINT_64_BIT unsigned __int64
648f4a0dac3e Fix build problems on WIN32 platforms caused by the large image crash fix.
Jerry James <james@xemacs.org>
parents: 4678
diff changeset
403 #define MAKE_64_BIT_UNSIGNED_CONSTANT(num) num##UI64
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
404 /* No error otherwise; just leave undefined */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
405 #endif
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
406
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
407 #if SIZEOF_LONG_LONG == 16
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
408 #define INT_128_BIT long long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
409 #define UINT_128_BIT unsigned long long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
410 #define MAKE_128_BIT_UNSIGNED_CONSTANT(num) num##ULL
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
411 /* No error otherwise; just leave undefined */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
412 #endif
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
413
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
414 /* #### Fill this in for other systems */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
415 #if defined (INT_64_BIT) && !(defined (i386) || defined (__i386__))
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
416 #define EFFICIENT_INT_64_BIT INT_64_BIT
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
417 #define EFFICIENT_UINT_64_BIT UINT_64_BIT
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
418 #endif
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
419
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
420 #if defined (INT_128_BIT)
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
421 #define EFFICIENT_INT_128_BIT INT_128_BIT
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
422 #define EFFICIENT_UINT_128_BIT UINT_128_BIT
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
423 #endif
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
424
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
425 #ifdef HAVE_INTTYPES_H
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
426 #include <inttypes.h>
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
427 #elif defined (HAVE_INTPTR_T_IN_SYS_TYPES_H)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
428 /* included elsewhere */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
429 #elif SIZEOF_VOID_P == SIZEOF_INT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
430 typedef int intptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
431 typedef unsigned int uintptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
432 #elif SIZEOF_VOID_P == SIZEOF_LONG
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
433 typedef long intptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
434 typedef unsigned long uintptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
435 #elif defined (SIZEOF_LONG_LONG) && SIZEOF_VOID_P == SIZEOF_LONG_LONG
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
436 typedef long long intptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
437 typedef unsigned long long uintptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
438 #else
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
439 /* Just pray. May break, may not. */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
440 typedef long intptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
441 typedef unsigned long uintptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
442 #endif
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
443
3988
1227374e7199 [xemacs-hg @ 2007-05-26 18:28:19 by aidan]
aidan
parents: 3659
diff changeset
444 #if SIZEOF_VOID_P == 8
1227374e7199 [xemacs-hg @ 2007-05-26 18:28:19 by aidan]
aidan
parents: 3659
diff changeset
445 #define DEADBEEF_CONSTANT 0xCAFEBABEDEADBEEF
1227374e7199 [xemacs-hg @ 2007-05-26 18:28:19 by aidan]
aidan
parents: 3659
diff changeset
446 #elif SIZEOF_VOID_P == 4
1227374e7199 [xemacs-hg @ 2007-05-26 18:28:19 by aidan]
aidan
parents: 3659
diff changeset
447 #define DEADBEEF_CONSTANT 0xDEADBEEF
1227374e7199 [xemacs-hg @ 2007-05-26 18:28:19 by aidan]
aidan
parents: 3659
diff changeset
448 #else
1227374e7199 [xemacs-hg @ 2007-05-26 18:28:19 by aidan]
aidan
parents: 3659
diff changeset
449 #error "What size are your pointers, really?"
1227374e7199 [xemacs-hg @ 2007-05-26 18:28:19 by aidan]
aidan
parents: 3659
diff changeset
450 #endif /* SIZEOF_VOID_P == 8 */
1227374e7199 [xemacs-hg @ 2007-05-26 18:28:19 by aidan]
aidan
parents: 3659
diff changeset
451
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
452 /* ---------------------- definition of EMACS_INT --------------------- */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
453
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
454 /* EMACS_INT is the underlying integral type into which a Lisp_Object must fit.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
455 In particular, it must be large enough to contain a pointer.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
456 config.h can override this, e.g. to use `long long' for bigger lisp ints.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
457
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
458 #### In point of fact, it would NOT be a good idea for config.h to mess
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
459 with EMACS_INT. A lot of code makes the basic assumption that EMACS_INT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
460 is the size of a pointer. */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
461
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
462 #ifndef SIZEOF_EMACS_INT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
463 # define SIZEOF_EMACS_INT SIZEOF_VOID_P
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
464 #endif
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
465
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
466 #ifndef EMACS_INT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
467 # if SIZEOF_EMACS_INT == SIZEOF_LONG
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
468 # define EMACS_INT long
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
469 # elif SIZEOF_EMACS_INT == SIZEOF_INT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
470 # define EMACS_INT int
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
471 # elif SIZEOF_EMACS_INT == SIZEOF_LONG_LONG
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
472 # define EMACS_INT long long
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
473 # else
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
474 # error Unable to determine suitable type for EMACS_INT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
475 # endif
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
476 #endif
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
477
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
478 #ifndef EMACS_UINT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
479 # define EMACS_UINT unsigned EMACS_INT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
480 #endif
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
481
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
482 #define BITS_PER_EMACS_INT (SIZEOF_EMACS_INT * BITS_PER_CHAR)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
483
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
484 /* -------------------------- basic byte typedefs --------------------- */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
485
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
486 /* The definitions we put here and in the next section use typedefs to
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
487 attribute specific meaning to types that by themselves are pretty
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
488 general.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
489
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
490 REMEMBER! These typedefs are purely for documentation purposes; from
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
491 the C code's perspective, they are exactly equivalent to `char *',
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
492 `unsigned char *', etc., so you can freely use them with library
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
493 functions declared as such.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
494
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
495 (See also "Byte/Character Types" in text.c)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
496
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
497 The basic semantics for `char':
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
498
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
499 a) [Ibyte] pointer to internally-formatted text
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
500 b) [Extbyte] pointer to text in some external format, which can be
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
501 defined as all formats other than the internal one
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
502 c) [Ascbyte] pure ASCII text
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
503 d) [Binbyte] binary data that is not meant to be interpreted as text
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
504 e) [Rawbyte] general data in memory, where we don't care about whether
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
505 it's text or binary; often used when computing memory-
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
506 based/byte-based offsets of pointers
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
507 f) [Boolbyte] a zero or a one
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
508 g) [Bitbyte] a byte used for bit fields
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
509 h) [Chbyte] null-semantics `char *'; used when casting an argument to
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
510 an external API where the the other types may not be
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
511 appropriate
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
512
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
513
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
514 Prefixing codes:
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
515
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
516 C = plain char, when the base type is unsigned
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
517 U = unsigned
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
518 S = signed
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
519
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
520 Ideally, XEmacs code should NEVER directly use `char' or any type
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
521 derived from it. This is for Mule-cleanliness. If you find yourself
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
522 wanting or needing to use `char' and one of the above six semantics does
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
523 not apply, add a new type of semantics; don't use `char' directly.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
524
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
525 See text.c under "Byte Types", and following sections.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
526 */
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
527
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
528 /* The data representing the text in a buffer is logically a set
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
529 of Ibytes, declared as follows. */
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
530
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
531 typedef unsigned char Ibyte;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
532
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
533 /* The following should be used when you are working with internal data
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
534 but for whatever reason need to have it declared a "char *". Examples
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
535 are function arguments whose values are most commonly literal strings,
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
536 or where you have to apply a stdlib string function to internal data.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
537
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
538 In general, you should avoid this where possible and use Ascbyte if the
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
539 text is just ASCII (e.g. string literals) or otherwise Ibyte, for
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
540 consistency. For example, the new Mule workspace contains Ibyte
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
541 versions of the stdlib string functions. */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
542
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
543 typedef char CIbyte;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
544
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
545 /* The data representing a string in "external" format (binary or any
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
546 external encoding) is logically a set of Extbytes, declared as
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
547 follows. Extbyte is guaranteed to be just a char, so for example
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
548 strlen (Extbyte *) is OK. Extbyte is only a documentation device
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
549 for referring to external text. */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
550
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
551 typedef char Extbyte;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
552 typedef unsigned char UExtbyte;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
553
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
554 #define EXTTEXT_ZTERM_SIZE (sizeof (Extbyte))
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
555
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
556 /* A byte in a string in entirely US-ASCII format: (Nothing outside
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
557 the range 00 - 7F) */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
558
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
559 typedef char Ascbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
560 typedef unsigned char UAscbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
561
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
562 /* A generic memory pointer, no text or binary semantics assumed.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
563 In general, there should be no manipulation of the memory pointed to
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
564 by these pointers other than just copying it around. */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
565
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
566 typedef unsigned char Rawbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
567 typedef char CRawbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
568
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
569 /* A byte in a string in binary (not meant as text) format: */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
570
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
571 typedef unsigned char Binbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
572 typedef char CBinbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
573 typedef signed char SBinbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
574
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
575 /* A byte used to represent a boolean value: 0 or 1.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
576 Normally use plain Boolint, and only use Boolbyte to save space. */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
577
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
578 typedef char Boolbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
579
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
580 /* A byte composed of bitfields. Hardly ever used. */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
581
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
582 typedef unsigned char Bitbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
583
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
584 /* A no-semantics `char'. Used (pretty-much) ONLY for casting arguments to
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
585 functions accepting a `char *', `unsigned char *', etc. where the other
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
586 types don't exactly apply and what you are logically concerned with is
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
587 the type of the function's argument and not its semantics.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
588
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
589 DO NOT DO NOT DO NOT DO NOT use this as a sloppy replacement for one of
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
590 the other types. If you're not using this as part of casting an
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
591 argument to a function call, and you're not Ben Wing, you're using it
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
592 wrong. Go find another one of the types. */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
593
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
594 typedef char Chbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
595 typedef unsigned char UChbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
596 typedef signed char SChbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
597
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
598 /* ------------------------ other text-related typedefs ------------------- */
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
599
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
600 /* To the user, a buffer is made up of characters. In the non-Mule world,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
601 characters and Ibytes are equivalent, restricted to the range 0 - 255.
3498
b03fc4eae965 [xemacs-hg @ 2006-07-08 16:15:54 by aidan]
aidan
parents: 3379
diff changeset
602 In the Mule world, many more characters are possible (21 bits worth,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
603 more or less), and a character requires (typically) 1 to 4 Ibytes for
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
604 its representation in a buffer or string. Note that the representation
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
605 of a character by itself, in a variable, is very different from its
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
606 representation in a string of text (in a buffer or Lisp string).
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
607
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
608 Under Mule, text can be represented in more than one way. The "default"
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
609 format is variable-width (1 to 4 bytes) and compatible with ASCII --
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
610 ASCII chars are stored in one byte, as themselves, and all other chars
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
611 use only high bytes. The default format is currently the only format
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
612 used for text stored anywhere but in a buffer. In a buffer, other
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
613 formats -- fixed-width formats (1, 2, or 4 bytes) -- are possible, for
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
614 speed.
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
615
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
616 See text.c/text.h for a detailed discussion of all of this. */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
617
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
618 /* A character, as represented on its own. */
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
619
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
620 typedef int Ichar;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
621
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
622 /* The "raw value" of a character as stored in the buffer. In the default
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
623 format, this is just the same as the character. In fixed-width formats,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
624 this is the actual value in the buffer, which will be limited to the
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
625 range as established by the format. This is used when searching for a
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
626 character in a buffer -- it's faster to convert the character to the raw
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
627 value and look for that, than repeatedly convert each raw value in the
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
628 buffer into a character. */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
629
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
630 typedef int Raw_Ichar;
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
631
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
632 /* Internal text as a series of textual units (8-bit bytes in the old
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
633 "Mule" encoding -- still the standard internal encoding -- and in UTF-8,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
634 but 16-bit bytes in UTF-16 and 32-bit bytes in UTF-32). See text.c. */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
635
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
636 #ifdef UTF16_IBYTE_FORMAT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
637 #define NON_ASCII_INTERNAL_FORMAT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
638 typedef unsigned short Itext;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
639 #else
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
640 typedef Ibyte Itext;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
641 #endif
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
642 typedef EMACS_INT Textcount;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
643
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
644 #define ITEXT_SIZE (sizeof (Itext))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
645 /* Use this to emphasize that we are adding space for the zero-terminator */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
646 #define ITEXT_ZTERM_SIZE ITEXT_SIZE
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
647
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
648 /* Wexttext is wchar_t on WIN32_NATIVE (and perhaps other systems that
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
649 support wchar_t's in library functions), and Extbyte otherwise. This is
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
650 used whenever we have to do any sort of manipulation of
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
651 externally-encoded strings -- generally a very bad idea, and unsafe, but
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
652 in some cases we have no choice (especially at startup, and esp. prior
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
653 to pdump, where we haven't loaded the Unicode tables necessary for
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
654 conversion under Windows). On platforms where the external encoding may
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
655 be Unicode (i.e. Windows), we always do our manipulations in Unicode,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
656 converting to and from multibyte if necessary -- otherwise we'd have to
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
657 conditionalize on Unicode vs. multibyte all over the place, which is
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
658 just a nightmare. */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
659 #ifdef WIN32_NATIVE
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
660 #define WEXTTEXT_IS_WIDE
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
661 typedef wchar_t Wexttext;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
662 #else
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
663 typedef Extbyte Wexttext;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
664 #endif
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
665
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
666 #if !defined (__cplusplus) || !defined (CPLUSPLUS_INTEGRAL_CLASSES_NOT_YET)
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
667
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
668 /* Counts of bytes or chars */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
669
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
670 typedef EMACS_INT Bytecount;
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
671 typedef EMACS_INT Charcount;
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
672
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
673 /* Different ways of referring to a position in a buffer. We use
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
674 the typedefs in preference to 'EMACS_INT' to make it clearer what
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
675 sort of position is being used. See text.c for a description
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
676 of the different positions.
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
677
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
678 Note that buffer positions are 1-based, and there's a gap in the middle
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
679 of a buffer; that's why we have separate typedefs. For Lisp strings and
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
680 other strings of text, we just use Bytecount and Charcount. */
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
681
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
682 typedef EMACS_INT Charbpos;
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
683 typedef EMACS_INT Bytebpos;
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
684 typedef EMACS_INT Membpos;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
685
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
686 /* Different ways of referring to a position that can be either in a buffer
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
687 or string; used when passing around an object that can be either a
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
688 buffer or string, and an associated position. Conceptually, they
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
689 resolve as follows:
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
690
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
691 Typedef Buffer String
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
692 ------------------------------------------------------
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
693 Charxpos Charbpos Charcount
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
694 Bytexpos Bytebpos Bytecount
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
695 Memxpos Membpos Bytecount
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
696
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
697 */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
698
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
699 typedef EMACS_INT Charxpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
700 typedef EMACS_INT Bytexpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
701 typedef EMACS_INT Memxpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
702
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
703 #else /* __cplusplus */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
704
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
705 /* Implement strong type-checking of the above integral types by declaring
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
706 them to be classes and using operator overloading. Unfortunately this
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
707 is a huge pain in the ass because C++ doesn't strongly distinguish
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
708 "bool" and "size_t" from int. The problem is especially bad with "bool"
2956
ee35a8fdcfcd [xemacs-hg @ 2005-09-27 05:29:41 by ben]
ben
parents: 2862
diff changeset
709 -- if you want to be able to say `if (len--)' where len is e.g. a
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
710 Bytecount, you need to declare a conversion operator to bool(); and
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
711 since bool is just an alias for int, you suddenly get tons and tons of
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
712 ambiguities, which need to be resolved by lots of laborious declarations
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
713 for every single possible type combination. Hence the multitude of
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
714 declarations in DECLARE_INTCLASS_ARITH_COMPARE(). The bool/int
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
715 equivalence also means that we have to forcibly block the combinations
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
716 we don't want by creating overloaded versions of them and declaring them
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
717 private. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
718
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
719 class Bytecount;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
720 class Bytebpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
721 class Bytexpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
722 class Charcount;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
723 class Charbpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
724 class Charxpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
725 class Membpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
726 class Memxpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
727
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
728 /* Declare the arithmetic and comparison operations for an integral class,
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
729 i.e. one of the above classes. If this is a "position" class, where the
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
730 difference between two positions is a different class (a "count" class),
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
731 then use POSCL for the position class and COUNTCL for the count class.
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
732 If this is a simple class, where all operations yield the same class,
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
733 substitute the same class for POSCL and COUNTCL. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
734
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
735 #define DECLARE_INTCLASS_ARITH_COMPARE(poscl, countcl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
736 poscl operator += (const countcl& l) { data += l.data; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
737 poscl operator -= (const countcl& l) { data -= l.data; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
738 poscl operator + (const countcl& l) const { return poscl (data + l.data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
739 poscl operator - (const countcl& l) const { return poscl (data - l.data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
740 poscl operator += (const int& l) { data += l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
741 poscl operator -= (const int& l) { data -= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
742 poscl operator + (const int& l) const { return poscl (data + l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
743 poscl operator - (const int& l) const { return poscl (data - l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
744 poscl operator += (const unsigned int& l) { data += l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
745 poscl operator -= (const unsigned int& l) { data -= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
746 poscl operator + (const unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
747 { return poscl (data + l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
748 poscl operator - (const unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
749 { return poscl (data - l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
750 poscl operator += (const long& l) { data += l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
751 poscl operator -= (const long& l) { data -= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
752 poscl operator + (const long& l) const { return poscl (data + l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
753 poscl operator - (const long& l) const { return poscl (data - l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
754 poscl operator += (const unsigned long& l) { data += l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
755 poscl operator -= (const unsigned long& l) { data -= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
756 poscl operator + (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
757 { return poscl (data + l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
758 poscl operator - (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
759 { return poscl (data - l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
760 poscl operator += (const short& l) { data += l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
761 poscl operator -= (const short& l) { data -= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
762 poscl operator + (const short& l) const { return poscl (data + l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
763 poscl operator - (const short& l) const { return poscl (data - l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
764 poscl operator += (const unsigned short& l) { data += l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
765 poscl operator -= (const unsigned short& l) { data -= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
766 poscl operator + (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
767 { return poscl (data + l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
768 poscl operator - (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
769 { return poscl (data - l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
770 \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
771 poscl operator *= (const countcl& l) { data *= l.data; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
772 poscl operator /= (const countcl& l) { data /= l.data; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
773 poscl operator * (const countcl& l) const { return poscl (data * l.data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
774 poscl operator / (const countcl& l) const { return poscl (data / l.data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
775 poscl operator *= (const int& l) { data *= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
776 poscl operator /= (const int& l) { data /= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
777 poscl operator * (const int& l) const { return poscl (data * l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
778 poscl operator / (const int& l) const { return poscl (data / l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
779 poscl operator *= (const unsigned int& l) { data *= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
780 poscl operator /= (const unsigned int& l) { data /= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
781 poscl operator * (const unsigned int& l) const { return poscl (data * l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
782 poscl operator / (const unsigned int& l) const { return poscl (data / l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
783 poscl operator *= (const long& l) { data *= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
784 poscl operator /= (const long& l) { data /= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
785 poscl operator * (const long& l) const { return poscl (data * l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
786 poscl operator / (const long& l) const { return poscl (data / l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
787 poscl operator *= (const unsigned long& l) { data *= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
788 poscl operator /= (const unsigned long& l) { data /= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
789 poscl operator * (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
790 { return poscl (data * l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
791 poscl operator / (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
792 { return poscl (data / l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
793 poscl operator *= (const short& l) { data *= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
794 poscl operator /= (const short& l) { data /= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
795 poscl operator * (const short& l) const { return poscl (data * l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
796 poscl operator / (const short& l) const { return poscl (data / l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
797 poscl operator *= (const unsigned short& l) { data *= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
798 poscl operator /= (const unsigned short& l) { data /= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
799 poscl operator * (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
800 { return poscl (data * l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
801 poscl operator / (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
802 { return poscl (data / l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
803 \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
804 poscl operator &= (const countcl& l) { data &= l.data; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
805 poscl operator |= (const countcl& l) { data |= l.data; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
806 poscl operator & (const countcl& l) const { return poscl (data & l.data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
807 poscl operator | (const countcl& l) const { return poscl (data | l.data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
808 poscl operator &= (const int& l) { data &= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
809 poscl operator |= (const int& l) { data |= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
810 poscl operator & (const int& l) const { return poscl (data & l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
811 poscl operator | (const int& l) const { return poscl (data | l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
812 poscl operator &= (const unsigned int& l) { data &= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
813 poscl operator |= (const unsigned int& l) { data |= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
814 poscl operator & (const unsigned int& l) const { return poscl (data & l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
815 poscl operator | (const unsigned int& l) const { return poscl (data | l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
816 poscl operator &= (const long& l) { data &= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
817 poscl operator |= (const long& l) { data |= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
818 poscl operator & (const long& l) const { return poscl (data & l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
819 poscl operator | (const long& l) const { return poscl (data | l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
820 poscl operator &= (const unsigned long& l) { data &= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
821 poscl operator |= (const unsigned long& l) { data |= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
822 poscl operator & (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
823 { return poscl (data & l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
824 poscl operator | (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
825 { return poscl (data | l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
826 poscl operator &= (const short& l) { data &= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
827 poscl operator |= (const short& l) { data |= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
828 poscl operator & (const short& l) const { return poscl (data & l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
829 poscl operator | (const short& l) const { return poscl (data | l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
830 poscl operator &= (const unsigned short& l) { data &= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
831 poscl operator |= (const unsigned short& l) { data |= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
832 poscl operator & (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
833 { return poscl (data & l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
834 poscl operator | (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
835 { return poscl (data | l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
836 \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
837 poscl operator - () { return poscl (-data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
838 poscl operator-- () { data--; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
839 poscl operator-- (int) { data--; return poscl (data + 1); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
840 poscl operator++ () { data++; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
841 poscl operator++ (int) { data++; return poscl (data - 1); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
842 \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
843 bool operator < (const poscl& l) const { return data < l.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
844 bool operator <= (const poscl& l) const { return data <= l.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
845 bool operator > (const poscl& l) const { return data > l.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
846 bool operator >= (const poscl& l) const { return data >= l.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
847 bool operator == (const poscl& l) const { return data == l.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
848 bool operator != (const poscl& l) const { return data != l.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
849 bool operator < (const int& l) const { return data < (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
850 bool operator <= (const int& l) const { return data <= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
851 bool operator > (const int& l) const { return data > (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
852 bool operator >= (const int& l) const { return data >= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
853 bool operator == (const int& l) const { return data == (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
854 bool operator != (const int& l) const { return data != (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
855 bool operator < (const unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
856 { return data < (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
857 bool operator <= (const unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
858 { return data <= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
859 bool operator > (const unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
860 { return data > (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
861 bool operator >= (const unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
862 { return data >= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
863 bool operator == (const unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
864 { return data == (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
865 bool operator != (const unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
866 { return data != (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
867 bool operator < (const long& l) const { return data < (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
868 bool operator <= (const long& l) const { return data <= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
869 bool operator > (const long& l) const { return data > (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
870 bool operator >= (const long& l) const { return data >= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
871 bool operator == (const long& l) const { return data == (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
872 bool operator != (const long& l) const { return data != (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
873 bool operator < (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
874 { return data < (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
875 bool operator <= (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
876 { return data <= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
877 bool operator > (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
878 { return data > (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
879 bool operator >= (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
880 { return data >= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
881 bool operator == (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
882 { return data == (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
883 bool operator != (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
884 { return data != (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
885 bool operator < (const short& l) const { return data < (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
886 bool operator <= (const short& l) const { return data <= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
887 bool operator > (const short& l) const { return data > (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
888 bool operator >= (const short& l) const { return data >= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
889 bool operator == (const short& l) const { return data == (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
890 bool operator != (const short& l) const { return data != (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
891 bool operator < (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
892 { return data < (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
893 bool operator <= (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
894 { return data <= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
895 bool operator > (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
896 { return data > (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
897 bool operator >= (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
898 { return data >= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
899 bool operator == (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
900 { return data == (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
901 bool operator != (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
902 { return data != (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
903 bool operator ! () const { return !data; }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
904
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
905 /* Declare the "bad" or disallowed arithmetic and comparion operations
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
906 between class GOOD and class BAD. Meant to go inside the private
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
907 section of class GOOD. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
908
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
909 #define DECLARE_BAD_INTCLASS_ARITH_COMPARE(good, bad) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
910 good operator += (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
911 good operator -= (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
912 good operator *= (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
913 good operator /= (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
914 good operator + (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
915 good operator - (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
916 good operator * (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
917 good operator / (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
918 \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
919 bool operator < (const bad& l) { return 0; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
920 bool operator <= (const bad& l) { return 0; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
921 bool operator > (const bad& l) { return 0; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
922 bool operator >= (const bad& l) { return 0; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
923 bool operator == (const bad& l) { return 0; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
924 bool operator != (const bad& l) { return 0; }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
925
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
926 /* Declare the "bad" or disallowed arithmetic operations between class GOOD
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
927 and another of the same class, for a position class. Meant to go inside
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
928 the private section of class GOOD. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
929
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
930 #define DECLARE_BAD_POS_CLASS_ARITH(good) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
931 good operator += (const good& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
932 good operator -= (const good& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
933 good operator *= (const good& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
934 good operator /= (const good& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
935 good operator + (const good& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
936 good operator * (const good& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
937 good operator / (const good& l) { return badret; }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
938
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
939 /* Basic declaration at the top of all integral classes. Don't call
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
940 directly, use one of the more specific versions below. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
941
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
942 #define DECLARE_INTCLASS(cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
943 public: \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
944 EMACS_INT data; \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
945 cl () { data = 0xCDCDCDCD; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
946 cl (int i) { data = i; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
947 cl (unsigned int i) { data = i; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
948 cl (long i) { data = i; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
949 cl (unsigned long i) { data = i; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
950 cl (short i) { data = i; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
951 cl (unsigned short i) { data = i; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
952 operator EMACS_INT () const { return data; }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
953
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
954 /* Basic declaration at the top of all count classes. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
955
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
956 #define DECLARE_COUNT_CLASS(cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
957 DECLARE_INTCLASS (cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
958 DECLARE_INTCLASS_ARITH_COMPARE (cl, cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
959 private: \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
960 static cl badret;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
961
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
962 /* Basic declaration at the bottom of the prelude of all position classes.
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
963 Don't call directly. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
964
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
965 #define DECLARE_POS_CLASS_SECOND_HALF(cl, countcl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
966 DECLARE_INTCLASS_ARITH_COMPARE (cl, countcl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
967 countcl operator - (const cl& l) const { return countcl (data - l.data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
968 private: \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
969 static cl badret; \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
970 DECLARE_BAD_POS_INTCLASS_ARITH (cl)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
971
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
972 /* Basic declaration at the top of all buffer position classes. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
973
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
974 #define DECLARE_BPOS_CLASS(cl, countcl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
975 DECLARE_INTCLASS (cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
976 DECLARE_POS_CLASS_SECOND_HALF (cl, countcl)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
977
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
978 /* Basic declaration at the top of all X-position classes (that can refer
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
979 to buffers or strings). CL1 and CL2 are the equivalent more specific
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
980 classes referring only to buffers or strings, respectively. */
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
981
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
982 #define DECLARE_XPOS_CLASS(cl, countcl, cl1, cl2) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
983 DECLARE_INTCLASS (cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
984 cl (const cl1& x) { data = x.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
985 cl (const cl2& x) { data = x.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
986 operator cl1 () const { return cl1 (data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
987 operator cl2 () const { return cl2 (data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
988 DECLARE_POS_CLASS_SECOND_HALF (cl, countcl)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
989
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
990 /* Declare the "bad" or disallowed arithmetic and comparion operations
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
991 between class CHARCL (a character class) and various non-character
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
992 classes. Meant to go inside the private section of class GOOD. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
993
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
994 #define DECLARE_BAD_CHAR_INTCLASS_ARITH_COMPARE(charcl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
995 DECLARE_BAD_INTCLASS_ARITH_COMPARE (charcl, Bytecount) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
996 DECLARE_BAD_INTCLASS_ARITH_COMPARE (charcl, Bytebpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
997 DECLARE_BAD_INTCLASS_ARITH_COMPARE (charcl, Bytexpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
998 DECLARE_BAD_INTCLASS_ARITH_COMPARE (charcl, Membpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
999 DECLARE_BAD_INTCLASS_ARITH_COMPARE (charcl, Memxpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1000
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1001 /* Declare the "bad" or disallowed arithmetic and comparion operations
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1002 between class BYTECL (a byte class) and various non-byte classes.
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1003 Meant to go inside the private section of class GOOD. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1004
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1005 #define DECLARE_BAD_BYTE_INTCLASS_ARITH_COMPARE(bytecl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1006 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Charcount) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1007 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Charbpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1008 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Charxpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1009 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Membpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1010 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Memxpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1011
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1012 /* Declare the "bad" or disallowed arithmetic and comparion operations
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1013 between class BYTECL (a mem class) and various non-mem classes.
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1014 Meant to go inside the private section of class GOOD. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1015
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1016 #define DECLARE_BAD_MEM_INTCLASS_ARITH_COMPARE(bytecl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1017 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Charcount) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1018 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Charbpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1019 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Charxpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1020 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Bytebpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1021 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Bytexpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1022
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1023 class Charcount
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1024 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1025 DECLARE_COUNT_CLASS (Charcount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1026 DECLARE_BAD_CHAR_INTCLASS_ARITH_COMPARE (Charcount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1027 };
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1028
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1029 class Charbpos
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1030 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1031 DECLARE_BPOS_CLASS (Charbpos, Charcount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1032 DECLARE_BAD_CHAR_INTCLASS_ARITH_COMPARE (Charbpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1033 };
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1034
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1035 class Charxpos
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1036 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1037 DECLARE_XPOS_CLASS (Charxpos, Charcount, Charbpos, Charcount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1038 DECLARE_BAD_CHAR_INTCLASS_ARITH_COMPARE (Charxpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1039 };
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1040
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1041 class Bytecount
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1042 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1043 DECLARE_COUNT_CLASS (Bytecount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1044 DECLARE_BAD_BYTE_INTCLASS_ARITH_COMPARE (Bytecount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1045 };
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1046
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1047 class Bytebpos
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1048 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1049 DECLARE_BPOS_CLASS (Bytebpos, Bytecount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1050 DECLARE_BAD_BYTE_INTCLASS_ARITH_COMPARE (Bytebpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1051 };
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1052
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1053 class Bytexpos
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1054 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1055 DECLARE_XPOS_CLASS (Bytexpos, Bytecount, Bytebpos, Bytecount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1056 DECLARE_BAD_BYTE_INTCLASS_ARITH_COMPARE (Bytexpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1057 };
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1058
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1059 class Membpos
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1060 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1061 DECLARE_BPOS_CLASS (Membpos, Bytecount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1062 DECLARE_BAD_MEM_INTCLASS_ARITH_COMPARE (Membpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1063 };
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1064
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1065 class Memxpos
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1066 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1067 DECLARE_XPOS_CLASS (Memxpos, Bytecount, Membpos, Bytecount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1068 DECLARE_BAD_MEM_INTCLASS_ARITH_COMPARE (Memxpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1069 };
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1070
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1071 #define DECLARE_POINTER_TYPE_ARITH_COUNT(pointer, countcl) \
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1072 inline pointer operator += (const pointer & x, const countcl& y) \
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1073 { x += y.data; return x; } \
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1074 inline pointer operator -= (const pointer & x, const countcl& y) \
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1075 { x -= y.data; return x; } \
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1076 inline pointer operator + (const pointer x, const countcl& y) \
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1077 { return x + y.data; } \
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1078 inline pointer operator - (const pointer x, const countcl& y) \
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1079 { return x - y.data; }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1080
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1081 #define DECLARE_INTEGRAL_TYPE_ARITH_COUNT(integral, countcl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1082 inline integral operator += (integral & x, const countcl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1083 { x += y.data; return x; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1084 inline integral operator -= (integral & x, const countcl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1085 { x -= y.data; return x; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1086 inline countcl operator + (integral x, const countcl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1087 { return countcl (x + y.data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1088 inline countcl operator - (integral x, const countcl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1089 { return countcl (x - y.data); }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1090
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1091 #define DECLARE_INTEGRAL_TYPE_COMPARE(integral, cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1092 inline bool operator < (integral x, const cl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1093 { return (EMACS_INT) x < y.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1094 inline bool operator <= (integral x, const cl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1095 { return (EMACS_INT) x <= y.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1096 inline bool operator > (integral x, const cl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1097 { return (EMACS_INT) x > y.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1098 inline bool operator >= (integral x, const cl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1099 { return (EMACS_INT) x >= y.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1100 inline bool operator == (integral x, const cl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1101 { return (EMACS_INT) x == y.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1102 inline bool operator != (integral x, const cl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1103 { return (EMACS_INT) x != y.data; }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1104
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1105 #if 0
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1106 /* Unfortunately C++ doesn't let you overload the ?: operator, so we have
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1107 to manually deal with ambiguities using casting */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1108 #define DECLARE_INTEGRAL_TYPE_TRISTATE(integral, cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1109 inline cl operator ?: (bool b, integral x, const cl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1110 { return b ? cl (x) : y; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1111 inline cl operator ?: (bool b, const cl& x, integral y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1112 { return b ? x : cl (y); }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1113 #endif /* 0 */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1114
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
1115 /* DECLARE_POINTER_TYPE_ARITH_COUNT (const Ibyte *, Bytecount);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1116 DECLARE_POINTER_TYPE_ARITH_COUNT (const Extbyte *, Bytecount); */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
1117 DECLARE_POINTER_TYPE_ARITH_COUNT (Ibyte *, Bytecount);
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1118 DECLARE_POINTER_TYPE_ARITH_COUNT (Extbyte *, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1119
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1120 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (int, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1121 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (int, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1122 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (unsigned int, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1123 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (unsigned int, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1124 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (long, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1125 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (long, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1126 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (unsigned long, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1127 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (unsigned long, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1128
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1129 DECLARE_INTEGRAL_TYPE_COMPARE (int, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1130 DECLARE_INTEGRAL_TYPE_COMPARE (int, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1131 DECLARE_INTEGRAL_TYPE_COMPARE (unsigned int, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1132 DECLARE_INTEGRAL_TYPE_COMPARE (unsigned int, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1133 DECLARE_INTEGRAL_TYPE_COMPARE (long, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1134 DECLARE_INTEGRAL_TYPE_COMPARE (long, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1135 DECLARE_INTEGRAL_TYPE_COMPARE (unsigned long, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1136 DECLARE_INTEGRAL_TYPE_COMPARE (unsigned long, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1137
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1138 #if 0 /* doesn't work */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
1139 inline Bytecount operator - (const Ibyte *x, const Ibyte *y) \
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1140 { return Bytecount (x - y); }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1141 #endif
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1142
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1143 #endif /* __cplusplus */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1144
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1145 /* Counts of elements */
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1146 typedef EMACS_INT Elemcount;
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1147 /* Hash codes */
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1148 typedef unsigned long Hashcode;
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1149 /* Booleans */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1150 typedef int Boolint;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1151
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1152 /* ------------------------ basic compiler defines ------------------- */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1153
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
1154 #include "compiler.h"
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
1155
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1156 /* ------------------------ alignment definitions ------------------- */
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1157
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1158 /* No type has a greater alignment requirement than max_align_t.
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1159 (except perhaps for types we don't use, like long double) */
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1160 typedef union
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1161 {
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1162 struct { long l; } l;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1163 struct { void *p; } p;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1164 struct { void (*f)(void); } f;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1165 struct { double d; } d;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1166 } max_align_t;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1167
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1168 /* ALIGNOF returns the required alignment of a type -- i.e. a value such
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1169 that data of this type must begin at a memory address which is a
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1170 multiple of that value. For simple types, this is often the same size
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1171 as the type itself. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1172
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1173 #ifndef ALIGNOF
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1174 # if defined (__GNUC__) && (__GNUC__ >= 2)
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1175 /* gcc has an extension that gives us exactly what we want. */
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1176 # define ALIGNOF(type) __alignof__ (type)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1177 # elif ! defined (__cplusplus)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1178 /* The following is mostly portable, except that:
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1179 - it doesn't work for inside out declarations like void (*) (void).
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1180 (so just call ALIGNOF with a typedef'ed name)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1181 - it doesn't work with C++. The C++ committee has decided,
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1182 in its infinite wisdom, that:
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1183 "Types must be declared in declarations, not in expressions." */
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1184 # define ALIGNOF(type) offsetof (struct { char c; type member; }, member)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1185 # else
456
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1186 /* C++ is annoying, but it has a big bag of tricks.
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1187 The following doesn't have the "inside out" declaration bug C does. */
458
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
1188 template<typename T> struct alignment_trick { char c; T member; };
456
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1189 # define ALIGNOF(type) offsetof (alignment_trick<type>, member)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1190 # endif
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1191 #endif /* ALIGNOF */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1192
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1193 /* ALIGN_SIZE returns the smallest size greater than or equal to LEN which
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1194 is a multiple of UNIT. This can be used to assure that data that
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1195 follows a block of the returned size is of correct alignment for a type
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1196 whose alignment (as returned by ALIGNOF) is UNIT (provided that the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1197 block itself is correctly aligned for this type; memory returned by
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1198 malloc() is guaranteed to be correctly aligned for all types). */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1199
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1200 #define ALIGN_SIZE(len, unit) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1201 ((((len) + (unit) - 1) / (unit)) * (unit))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1202
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1203 /* ALIGN_FOR_TYPE returns the smallest size greater than or equal to LEN
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1204 which is aligned for the given type. This can be used to assure that
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1205 data that follows a block of the returned size is of correct alignment
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1206 for the type (provided that the block itself is correctly aligned for
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1207 this type; memory returned by malloc() is guaranteed to be correctly
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1208 aligned for all types). */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1209
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1210 #define ALIGN_FOR_TYPE(len, type) ALIGN_SIZE (len, ALIGNOF (type))
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1211
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1212 /* MAX_ALIGN_SIZE returns the smallest size greater than or equal to LEN
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1213 which guarantees that data following a block of such size is correctly
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1214 aligned for all types (provided that the block itself is so aligned,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1215 which is the case for memory returned by malloc()). */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1216
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1217 #define MAX_ALIGN_SIZE(len) ALIGN_FOR_TYPE (len, max_align_t)
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1218
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1219 /* ALIGN_PTR returns the smallest pointer >= PTR which is aligned for
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1220 data of TYPE. */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1221 #define ALIGN_PTR(ptr, type) ((void *) ALIGN_FOR_TYPE ((size_t) (ptr), type))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1222
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
1223 BEGIN_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
1224
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1225 /* ------------------------ assertions ------------------- */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1226
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1227 /* We define assert iff USE_ASSERTIONS or DEBUG_XEMACS is defined.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1228 Otherwise we define it to be empty. Quantify has shown that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1229 time the assert checks take is measurable so let's not include them
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1230 in production binaries.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1231
788
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
1232 If ASSERTIONS_DONT_ABORT defined, we will continue after assertion
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
1233 failures.
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
1234
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
1235 assert_at_line() is used for asserts inside of inline functions called
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
1236 from error-checking macros. If we're not tricky, we just get the file
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
1237 and line of the inline function, which is not very useful. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1238
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1239 /* Highly dubious kludge */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1240 /* (thanks, Jamie, I feel better now -- ben) */
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1241 MODULE_API void assert_failed (const Ascbyte *, int, const Ascbyte *);
5090
0ca81354c4c7 Further frame-geometry cleanups
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
1242 void assert_equal_failed (const Ascbyte *file, int line, EMACS_INT x,
0ca81354c4c7 Further frame-geometry cleanups
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
1243 EMACS_INT y, const Ascbyte *exprx,
0ca81354c4c7 Further frame-geometry cleanups
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
1244 const Ascbyte *expry);
4914
1628e3b9601a When aborting due to unknown opcode, output more descriptive msg
Ben Wing <ben@xemacs.org>
parents: 4910
diff changeset
1245 #define ABORT() assert_failed (__FILE__, __LINE__, "ABORT()")
4921
17362f371cc2 add more byte-code assertions and better failure output
Ben Wing <ben@xemacs.org>
parents: 4914
diff changeset
1246 #define abort_with_message(msg) assert_failed (__FILE__, __LINE__, msg)
2535
4c1f2310451d [xemacs-hg @ 2005-01-31 19:29:47 by ben]
ben
parents: 2532
diff changeset
1247
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
1248 /* This used to be ((void) (0)) but that triggers lots of unused variable
5050
6f2158fa75ed Fix quick-build, use asserts() in place of ABORT()
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1249 warnings -- furthermore, if `x' has any side effects, e.g.
6f2158fa75ed Fix quick-build, use asserts() in place of ABORT()
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1250 assert (++depth <= 20);, we DEFINITELY want to execute the code inside of
6f2158fa75ed Fix quick-build, use asserts() in place of ABORT()
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1251 `x'. Any reasonable compiler will eliminate an expression with
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
1252 no effects. We keep this abstracted out like this in case we want to
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
1253 change it in the future. */
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
1254 #define disabled_assert(x) ((void) (x))
4932
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
1255 #define disabled_assert_with_message(x, msg) ((void) msg, disabled_assert (x))
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
1256 #define disabled_assert_at_line(x, file, line) \
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
1257 ((void) file, (void) line, disabled_assert (x))
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
1258
2535
4c1f2310451d [xemacs-hg @ 2005-01-31 19:29:47 by ben]
ben
parents: 2532
diff changeset
1259 #ifdef USE_ASSERTIONS
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1260 # define assert(x) ((x) ? (void) 0 : assert_failed (__FILE__, __LINE__, #x))
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1261 # define assert_with_message(x, msg) \
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1262 ((x) ? (void) 0 : assert_failed (__FILE__, __LINE__, msg))
788
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
1263 # define assert_at_line(x, file, line) \
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
1264 ((x) ? (void) 0 : assert_failed (file, line, #x))
5090
0ca81354c4c7 Further frame-geometry cleanups
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
1265 # define assert_equal(x, y) \
0ca81354c4c7 Further frame-geometry cleanups
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
1266 ((x) == (y) ? (void) 0 : \
0ca81354c4c7 Further frame-geometry cleanups
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
1267 assert_equal_failed (__FILE__, __LINE__, (EMACS_INT) x, (EMACS_INT) y, \
0ca81354c4c7 Further frame-geometry cleanups
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
1268 #x, #y))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1269 #else
2956
ee35a8fdcfcd [xemacs-hg @ 2005-09-27 05:29:41 by ben]
ben
parents: 2862
diff changeset
1270 /* This used to be ((void) (0)) but that triggers lots of unused variable
ee35a8fdcfcd [xemacs-hg @ 2005-09-27 05:29:41 by ben]
ben
parents: 2862
diff changeset
1271 warnings. It's pointless to force all that code to be rewritten, with
ee35a8fdcfcd [xemacs-hg @ 2005-09-27 05:29:41 by ben]
ben
parents: 2862
diff changeset
1272 added ifdefs. Any reasonable compiler will eliminate an expression with
ee35a8fdcfcd [xemacs-hg @ 2005-09-27 05:29:41 by ben]
ben
parents: 2862
diff changeset
1273 no effects. */
4932
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
1274 # define assert(x) disabled_assert (x)
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
1275 # define assert_with_message(x, msg) disabled_assert_with_message (x, msg)
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
1276 # define assert_at_line(x, file, line) disabled_assert_at_line (x, file, line)
5090
0ca81354c4c7 Further frame-geometry cleanups
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
1277 # define assert_equal(x, y) disabled_assert ((x) == (y))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1278 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1279
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1280 /************************************************************************/
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1281 /** Memory allocation **/
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1282 /************************************************************************/
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1283
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1284 /* ------------------------ simple memory allocation ------------------- */
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1285
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1286 /* Basic memory allocation and freeing functions */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1287 void malloc_warning (const Ascbyte *);
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
1288 MODULE_API void *xmalloc (Bytecount size) ATTRIBUTE_MALLOC;
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
1289 MODULE_API void *xmalloc_and_zero (Bytecount size) ATTRIBUTE_MALLOC;
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
1290 MODULE_API void *xrealloc (void *, Bytecount size) ATTRIBUTE_MALLOC;
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1291 MODULE_API Chbyte *xstrdup (const Chbyte *) ATTRIBUTE_MALLOC;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1292
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1293 /* Basic free function */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1294
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1295 MODULE_API void xfree_1 (void *);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1296 #ifdef ERROR_CHECK_MALLOC
4976
16112448d484 Rename xfree(FOO, TYPE) -> xfree(FOO)
Ben Wing <ben@xemacs.org>
parents: 4969
diff changeset
1297 /* This used to use a temporary variable. But that triggered
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1298 complaints under strict aliasing. #### There should be a better way. */
4976
16112448d484 Rename xfree(FOO, TYPE) -> xfree(FOO)
Ben Wing <ben@xemacs.org>
parents: 4969
diff changeset
1299 #define xfree(lvalue) do \
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1300 { \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1301 xfree_1 (lvalue); \
3988
1227374e7199 [xemacs-hg @ 2007-05-26 18:28:19 by aidan]
aidan
parents: 3659
diff changeset
1302 VOIDP_CAST (lvalue) = (void *) DEADBEEF_CONSTANT; \
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1303 } while (0)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1304 #else
4976
16112448d484 Rename xfree(FOO, TYPE) -> xfree(FOO)
Ben Wing <ben@xemacs.org>
parents: 4969
diff changeset
1305 #define xfree(lvalue) xfree_1 (lvalue)
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1306 #endif /* ERROR_CHECK_MALLOC */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1307
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1308 /* ------------------------ stack allocation -------------------------- */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1309
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1310 /* Allocating excessively large blocks on the stack can cause crashes.
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1311 We provide MALLOC_OR_ALLOCA() below for places where it's likely that
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1312 large amounts will be allocated; it mallocs the block if it's too big.
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1313 Unfortunately, that requires a call to unbind_to() at the end of the
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1314 function, and it's not feasible to rewrite all calls to alloca() this
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1315 way.
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1316
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1317 Instead, we use the portable C alloca() substitute in alloca.c above a
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1318 certain size. This actually uses malloc(), but checks the current stack
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1319 pointer to see if data from previous alloca() calls needs to be freed.
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1320 However, this can lead to large heap sizes -- especially since cleanup
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1321 can only happen in a parent function, and will never happen if (as will
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1322 often be the case) it's the same function in the same place in the code
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1323 that keeps tripping the alloca() limit.
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1324
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1325 So we set up a system to periodically force cleanup. Currently we
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1326 do cleanup:
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1327
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1328 -- Only when there's C alloca() data, and then
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1329 -- Every stack alloca() or allocation of Lisp data, every call to
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1330 next_event_internal() [typically near the top of the stack],
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1331 or every 10th funcall
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1332
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1333 This should not be a big penalty because
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1334
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1335 (a) If there are few C alloca() chunks, checking them will be fast
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1336 (b) If not, we've allocated a huge amount of heap space (remember, each
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1337 chunk represents > 256K of heap), and we really want them gone
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1338 */
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1339
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1340 /* We use a larger maximum when the choice is alloca() vs. the C alloca()
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1341 substitute than when the choice is vs. malloc(), because in the former
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1342 case, our alternative choice is less palatable because the memory may
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1343 not be freed for awhile. */
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1344
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1345 #define MAX_ALLOCA_VS_C_ALLOCA 262144
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1346 #define MAX_ALLOCA_VS_MALLOC 65536
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1347
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1348 #define MAX_FUNCALLS_BETWEEN_ALLOCA_CLEANUP 10
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1349
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
1350 extern MODULE_API Bytecount __temp_alloca_size__;
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1351 extern Bytecount funcall_alloca_count;
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1352
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1353 #ifdef ERROR_CHECK_MALLOC
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
1354 extern MODULE_API int regex_malloc_disallowed;
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1355 #define REGEX_MALLOC_CHECK() assert (!regex_malloc_disallowed)
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1356 #else
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1357 #define REGEX_MALLOC_CHECK() ((void) 0)
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1358 #endif
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1359
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1360 /* Do stack or heap alloca() depending on size.
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1361
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1362 NOTE: The use of a global temporary like this is unsafe if ALLOCA() occurs
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1363 twice anywhere in the same expression; but that seems highly unlikely. The
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1364 alternative is to force all callers to declare a local temporary if the
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1365 expression has side effects -- something easy to forget. */
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1366
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1367 #define ALLOCA(size) \
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1368 (REGEX_MALLOC_CHECK (), \
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1369 __temp_alloca_size__ = (size), \
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1370 __temp_alloca_size__ > MAX_ALLOCA_VS_C_ALLOCA ? \
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1371 xemacs_c_alloca (__temp_alloca_size__) : \
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1372 (need_to_check_c_alloca ? xemacs_c_alloca (0) : 0, \
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1373 alloca (__temp_alloca_size__)))
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1374
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1375 /* Version of ALLOCA() that is guaranteed to work inside of function calls
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1376 (i.e., we call the C alloca if regular alloca() is broken inside of
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1377 function calls). */
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1378 #ifdef BROKEN_ALLOCA_IN_FUNCTION_CALLS
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1379 #define ALLOCA_FUNCALL_OK(size) xemacs_c_alloca (size)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1380 #else
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1381 #define ALLOCA_FUNCALL_OK(size) ALLOCA (size)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1382 #endif
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1383
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1384 MODULE_API void *xemacs_c_alloca (unsigned int size) ATTRIBUTE_MALLOC;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1385
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1386 MODULE_API int record_unwind_protect_freeing (void *ptr);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1387
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1388 DECLARE_INLINE_HEADER (
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1389 void *
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1390 xmalloc_and_record_unwind (Bytecount size)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1391 )
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1392 {
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1393 void *ptr = xmalloc (size);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1394 record_unwind_protect_freeing (ptr);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1395 return ptr;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1396 }
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1397
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1398 /* WARNING: If you use this, you must unbind_to() at the end of your
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1399 function! */
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1400
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1401 #define MALLOC_OR_ALLOCA(size) \
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1402 (REGEX_MALLOC_CHECK (), \
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1403 __temp_alloca_size__ = (size), \
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1404 __temp_alloca_size__ > MAX_ALLOCA_VS_MALLOC ? \
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1405 xmalloc_and_record_unwind (__temp_alloca_size__) : \
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1406 (need_to_check_c_alloca ? xemacs_c_alloca (0) : 0, \
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1407 alloca (__temp_alloca_size__)))
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1408
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1409 /* -------------- convenience functions for memory allocation ------------- */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1410
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1411 #define countof(x) ((int) (sizeof(x)/sizeof((x)[0])))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1412 #define xnew(type) ((type *) xmalloc (sizeof (type)))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1413 #define xnew_array(type, len) ((type *) xmalloc ((len) * sizeof (type)))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1414 #define xnew_and_zero(type) ((type *) xmalloc_and_zero (sizeof (type)))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1415 #define xzero(lvalue) ((void) memset (&(lvalue), '\0', sizeof (lvalue)))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1416 #define xnew_array_and_zero(type, len) ((type *) xmalloc_and_zero ((len) * sizeof (type)))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1417
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1418 #define alloca_new(type) ((type *) ALLOCA (sizeof (type)))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1419 #define alloca_array(type, len) ((type *) ALLOCA ((len) * sizeof (type)))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1420
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1421 #define alloca_itexts(num) alloca_array (Itext, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1422 #define alloca_ibytes(num) alloca_array (Ibyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1423 #define alloca_extbytes(num) alloca_array (Extbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1424 #define alloca_rawbytes(num) alloca_array (Rawbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1425 #define alloca_binbytes(num) alloca_array (Binbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1426 #define alloca_ascbytes(num) alloca_array (Ascbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1427 #define xmalloc_itexts(num) xnew_array (Itext, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1428 #define xnew_ibytes(num) xnew_array (Ibyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1429 #define xnew_extbytes(num) xnew_array (Extbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1430 #define xnew_rawbytes(num) xnew_array (Rawbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1431 #define xnew_binbytes(num) xnew_array (Binbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1432 #define xnew_ascbytes(num) xnew_array (Ascbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1433
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1434 /* Make an alloca'd copy of a Ibyte * */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1435 #define IBYTE_STRING_TO_ALLOCA(p, lval) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1436 do { \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1437 Ibyte **_bsta_ = (Ibyte **) &(lval); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1438 const Ibyte *_bsta_2 = (p); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1439 Bytecount _bsta_3 = qxestrlen (_bsta_2); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1440 *_bsta_ = alloca_ibytes (1 + _bsta_3); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1441 memcpy (*_bsta_, _bsta_2, 1 + _bsta_3); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1442 } while (0)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1443
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1444 /* ----------------- convenience functions for reallocation --------------- */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1445
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1446 #define XREALLOC_ARRAY(ptr, type, len) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1447 ((void) (ptr = (type *) xrealloc (ptr, (len) * sizeof (type))))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1448
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1449 /* also generally useful if you want to avoid arbitrary size limits
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1450 but don't need a full dynamic array. Assumes that BASEVAR points
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1451 to a malloced array of TYPE objects (or possibly a NULL pointer,
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1452 if SIZEVAR is 0), with the total size stored in SIZEVAR. This
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1453 macro will realloc BASEVAR as necessary so that it can hold at
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1454 least NEEDED_SIZE objects. The reallocing is done by doubling,
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1455 which ensures constant amortized time per element. */
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1456 #define DO_REALLOC(basevar, sizevar, needed_size, type) do { \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1457 Bytecount do_realloc_needed_size = (needed_size); \
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1458 REGEX_MALLOC_CHECK (); \
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1459 if ((sizevar) < do_realloc_needed_size) \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1460 { \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1461 if ((sizevar) < 32) \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1462 (sizevar) = 32; \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1463 while ((sizevar) < do_realloc_needed_size) \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1464 (sizevar) *= 2; \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1465 XREALLOC_ARRAY (basevar, type, (sizevar)); \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1466 } \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1467 } while (0)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1468
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1469 /************************************************************************/
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1470 /** Definitions of more complex types **/
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1471 /************************************************************************/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1472
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
1473 /* Note that the simplest typedefs are near the top of this file. */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
1474
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1475 /* We put typedefs here so that prototype declarations don't choke.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1476 Note that we don't actually declare the structures here (except
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1477 maybe for simple structures like dynarrs); that keeps them private
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1478 to the routines that actually use them. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1479
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1480 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1481 /* Error_Behavior typedefs */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1482 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1483
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
1484 #ifndef ERROR_CHECK_TYPES
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1485
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1486 typedef enum error_behavior
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1487 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1488 ERROR_ME,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1489 ERROR_ME_NOT,
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1490 ERROR_ME_WARN,
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1491 ERROR_ME_DEBUG_WARN
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1492 } Error_Behavior;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1493
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1494 #define ERRB_EQ(a, b) ((a) == (b))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1495
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1496 #else
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1497
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1498 /* By defining it like this, we provide strict type-checking
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1499 for code that lazily uses ints. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1500
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1501 typedef struct _error_behavior_struct_
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1502 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1503 int really_unlikely_name_to_have_accidentally_in_a_non_errb_structure;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1504 } Error_Behavior;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1505
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1506 extern Error_Behavior ERROR_ME;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1507 extern Error_Behavior ERROR_ME_NOT;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1508 extern Error_Behavior ERROR_ME_WARN;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1509 extern Error_Behavior ERROR_ME_DEBUG_WARN;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1510
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1511 #define ERRB_EQ(a, b) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1512 ((a).really_unlikely_name_to_have_accidentally_in_a_non_errb_structure == \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1513 (b).really_unlikely_name_to_have_accidentally_in_a_non_errb_structure)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1514
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1515 #endif
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1516
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1517 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1518 /* Empty structures and typedefs */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1519 /* ------------------------------- */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1520
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1521 struct buffer; /* "buffer.h" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1522 struct console; /* "console.h" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1523 struct device; /* "device.h" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1524 struct extent_fragment;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1525 struct extent;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1526 struct frame; /* "frame.h" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1527 struct window; /* "window.h" */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1528 struct utimbuf; /* "systime.h" or <utime.h> */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1529 struct display_line;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1530 struct display_glyph_area;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1531 struct display_box;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1532 struct redisplay_info;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1533 struct window_mirror;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1534 struct scrollbar_instance;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1535 struct font_metric_info;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1536 struct face_cachel;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1537 struct console_type_entry;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1538
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1539 /* This is shared by process.h, events.h and others in future.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1540 See events.h for description */
4123
5333f383efbd [xemacs-hg @ 2007-08-17 08:04:25 by crestani]
crestani
parents: 4096
diff changeset
1541 typedef unsigned EMACS_INT USID;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1542 typedef int face_index;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1543 typedef int glyph_index;
1726
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 1706
diff changeset
1544 typedef struct lstream Lstream; /* lstream.h */
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
1545 typedef struct extent *EXTENT; /* extents-impl.h */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1546 typedef struct Lisp_Event Lisp_Event; /* "events.h" */
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
1547 typedef struct Lisp_Face Lisp_Face; /* "faces-impl.h" */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1548 typedef struct Lisp_Process Lisp_Process; /* "procimpl.h" */
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
1549 typedef struct Lisp_Color_Instance Lisp_Color_Instance; /* objects-impl.h */
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
1550 typedef struct Lisp_Font_Instance Lisp_Font_Instance; /* objects-impl.h */
1726
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 1706
diff changeset
1551 typedef struct Lisp_Image_Instance Lisp_Image_Instance; /* glyphs.h */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1552 typedef struct Lisp_Gui_Item Lisp_Gui_Item;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1553
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1554 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1555 /* enum typedefs */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1556 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1557
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1558 enum run_hooks_condition
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1559 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1560 RUN_HOOKS_TO_COMPLETION,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1561 RUN_HOOKS_UNTIL_SUCCESS,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1562 RUN_HOOKS_UNTIL_FAILURE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1563 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1564
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1565 enum edge_style
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1566 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1567 EDGE_ETCHED_IN,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1568 EDGE_ETCHED_OUT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1569 EDGE_BEVEL_IN,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1570 EDGE_BEVEL_OUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1571 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1572
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1573 enum munge_me_out_the_door
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1574 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1575 MUNGE_ME_FUNCTION_KEY,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1576 MUNGE_ME_KEY_TRANSLATION
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1577 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1578
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1579 /* The various stages of font instantiation; initial means "find a font for
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1580 CHARSET that matches the charset's registries" and final means "find a
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1581 font for CHARSET that matches iso10646-1, since we haven't found a font
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1582 that matches its registry."
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1583 */
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1584 enum font_specifier_matchspec_stages
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1585 {
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1586 STAGE_INITIAL,
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1587 STAGE_FINAL,
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1588 NUM_MATCHSPEC_STAGES,
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1589 };
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1590
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1591 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1592 /* misc */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1593 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1594
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1595 #ifdef MEMORY_USAGE_STATS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1596
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1597 /* This structure is used to keep statistics on the amount of memory
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1598 in use.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1599
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1600 WAS_REQUESTED stores the actual amount of memory that was requested
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1601 of the allocation function. The *_OVERHEAD fields store the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1602 additional amount of memory that was grabbed by the functions to
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1603 facilitate allocation, reallocation, etc. MALLOC_OVERHEAD is for
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1604 memory allocated with malloc(); DYNARR_OVERHEAD is for dynamic
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1605 arrays; GAP_OVERHEAD is for gap arrays. Note that for (e.g.)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1606 dynamic arrays, there is both MALLOC_OVERHEAD and DYNARR_OVERHEAD
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1607 memory: The dynamic array allocates memory above and beyond what
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1608 was asked of it, and when it in turns allocates memory using
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1609 malloc(), malloc() allocates memory beyond what it was asked
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1610 to allocate.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1611
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1612 Functions that accept a structure of this sort do not initialize
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1613 the fields to 0, and add any existing values to whatever was there
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1614 before; this way, you can get a cumulative effect. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1615
5157
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5146
diff changeset
1616 struct usage_stats
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1617 {
5157
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5146
diff changeset
1618 Bytecount was_requested;
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5146
diff changeset
1619 Bytecount malloc_overhead;
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5146
diff changeset
1620 Bytecount dynarr_overhead;
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5146
diff changeset
1621 Bytecount gap_overhead;
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5146
diff changeset
1622 };
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5146
diff changeset
1623
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5146
diff changeset
1624 struct generic_usage_stats
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5146
diff changeset
1625 {
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5146
diff changeset
1626 struct usage_stats u;
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5146
diff changeset
1627 Bytecount othervals[32];
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1628 };
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1629
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1630 #endif /* MEMORY_USAGE_STATS */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1631
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1632
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1633 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1634 /* Definition of Lisp_Object data type */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1635 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1636
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1637 /* Define the fundamental Lisp data structures */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1638
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1639 /* This is the set of Lisp data types */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1640
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1641 enum Lisp_Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1642 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1643 Lisp_Type_Record,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1644 Lisp_Type_Int_Even,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1645 Lisp_Type_Char,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1646 Lisp_Type_Int_Odd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1647 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1648
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1649 #define POINTER_TYPE_P(type) ((type) == Lisp_Type_Record)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1650
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1651 /* Overridden by m/next.h */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1652 #ifndef ASSERT_VALID_POINTER
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1653 # define ASSERT_VALID_POINTER(pnt) (assert ((((EMACS_UINT) pnt) & 3) == 0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1654 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1655
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1656 #define GCMARKBITS 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1657 #define GCTYPEBITS 2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1658 #define GCBITS 2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1659 #define INT_GCBITS 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1660
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1661 #define INT_VALBITS (BITS_PER_EMACS_INT - INT_GCBITS)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1662 #define VALBITS (BITS_PER_EMACS_INT - GCBITS)
542
2e265ae71eed [xemacs-hg @ 2001-05-17 09:52:16 by yoshiki]
yoshiki
parents: 528
diff changeset
1663 #define EMACS_INT_MAX ((EMACS_INT) ((1UL << (INT_VALBITS - 1)) -1UL))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1664 #define EMACS_INT_MIN (-(EMACS_INT_MAX) - 1)
802
19dfb459d51a [xemacs-hg @ 2002-04-03 10:47:37 by ben]
ben
parents: 801
diff changeset
1665 /* WARNING: evaluates its arg twice. */
19dfb459d51a [xemacs-hg @ 2002-04-03 10:47:37 by ben]
ben
parents: 801
diff changeset
1666 #define NUMBER_FITS_IN_AN_EMACS_INT(num) \
19dfb459d51a [xemacs-hg @ 2002-04-03 10:47:37 by ben]
ben
parents: 801
diff changeset
1667 ((num) <= EMACS_INT_MAX && (num) >= EMACS_INT_MIN)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1668
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1669 #ifdef USE_UNION_TYPE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1670 # include "lisp-union.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1671 #else /* !USE_UNION_TYPE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1672 # include "lisp-disunion.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1673 #endif /* !USE_UNION_TYPE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1674
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1675 #define XPNTR(x) ((void *) XPNTRVAL(x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1676
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1677 /* Close your eyes now lest you vomit or spontaneously combust ... */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1678
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1679 #define HACKEQ_UNSAFE(obj1, obj2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1680 (EQ (obj1, obj2) || (!POINTER_TYPE_P (XTYPE (obj1)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1681 && !POINTER_TYPE_P (XTYPE (obj2)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1682 && XCHAR_OR_INT (obj1) == XCHAR_OR_INT (obj2)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1683
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1684 #ifdef DEBUG_XEMACS
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
1685 extern MODULE_API int debug_issue_ebola_notices;
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
1686 MODULE_API int eq_with_ebola_notice (Lisp_Object, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1687 #define EQ_WITH_EBOLA_NOTICE(obj1, obj2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1688 (debug_issue_ebola_notices ? eq_with_ebola_notice (obj1, obj2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1689 : EQ (obj1, obj2))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1690 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1691 #define EQ_WITH_EBOLA_NOTICE(obj1, obj2) EQ (obj1, obj2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1692 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1693
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1694 /* OK, you can open them again */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1695
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
1696 END_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
1697
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1698 #include "lrecord.h"
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1699
5013
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1700 /* Turn any void * pointer into a Lisp object. This is the counterpart of
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1701 STORE_LISP_IN_VOID, which works in the opposite direction. Note that
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1702 you CANNOT use STORE_LISP_IN_VOID to undo the effects of STORE_VOID_IN_LISP!
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1703 Instead, you GET_VOID_FROM_LISP:
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1704
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1705 STORE_VOID_IN_LISP <--> GET_VOID_FROM_LISP vs.
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1706 STORE_LISP_IN_VOID <--> GET_LISP_FROM_VOID
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1707
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1708 STORE_VOID_IN_LISP has a restriction on the void * pointers it can
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1709 handle -- the pointer must be an even address (lowest bit set to 0).
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1710 Generally this is not a problem as nowadays virtually all allocation is
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1711 at least 4-byte aligned, if not 8-byte.
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1712
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1713 However, if this proves problematic, you can use make_opaque_ptr(), which
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1714 is guaranteed to handle any kind of void * pointer but which does
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1715 Lisp allocation.
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1716 */
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1717
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1718 DECLARE_INLINE_HEADER (
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1719 Lisp_Object
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1720 STORE_VOID_IN_LISP (void *ptr)
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1721 )
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1722 {
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1723 EMACS_UINT p = (EMACS_UINT) ptr;
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1724
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1725 type_checking_assert ((p & 1) == 0);
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1726 return make_int (p >> 1);
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1727 }
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1728
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1729 DECLARE_INLINE_HEADER (
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1730 void *
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1731 GET_VOID_FROM_LISP (Lisp_Object obj)
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1732 )
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1733 {
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1734 EMACS_UINT p = XUINT (obj);
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1735 return (void *) (p << 1);
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1736 }
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1737
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1738 /************************************************************************/
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1739 /** Definitions of dynamic arrays (dynarrs) and other allocators **/
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1740 /************************************************************************/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1741
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
1742 BEGIN_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
1743
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1744 /************* Dynarr declaration *************/
3293
168191f9515f [xemacs-hg @ 2006-03-20 21:20:19 by crestani]
crestani
parents: 3263
diff changeset
1745
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1746 #ifdef NEW_GC
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1747 #define DECLARE_DYNARR_LISP_IMP() \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1748 const struct lrecord_implementation *lisp_imp;
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1749 #else
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1750 #define DECLARE_DYNARR_LISP_IMP()
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1751 #endif
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1752
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
1753 #ifdef ERROR_CHECK_DYNARR
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1754 #define DECLARE_DYNARR_LOCKED() \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1755 int locked;
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1756 #else
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1757 #define DECLARE_DYNARR_LOCKED()
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1758 #endif
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1759
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1760 #define Dynarr_declare(type) \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1761 struct lrecord_header header; \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1762 type *base; \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1763 DECLARE_DYNARR_LISP_IMP () \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1764 DECLARE_DYNARR_LOCKED () \
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1765 int elsize_; \
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1766 int len_; \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1767 int largest_; \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1768 int max_
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1769
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1770 typedef struct dynarr
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1771 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1772 Dynarr_declare (void);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1773 } Dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1774
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1775 #define XD_DYNARR_DESC(base_type, sub_desc) \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1776 { XD_BLOCK_PTR, offsetof (base_type, base), \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1777 XD_INDIRECT(1, 0), {sub_desc} }, \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1778 { XD_INT, offsetof (base_type, len_) }, \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1779 { XD_INT_RESET, offsetof (base_type, largest_), XD_INDIRECT(1, 0) }, \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1780 { XD_INT_RESET, offsetof (base_type, max_), XD_INDIRECT(1, 0) }
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1781
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1782 #ifdef NEW_GC
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1783 #define XD_LISP_DYNARR_DESC(base_type, sub_desc) \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1784 { XD_LISP_OBJECT_BLOCK_PTR, offsetof (base_type, base), \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1785 XD_INDIRECT(1, 0), {sub_desc} }, \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1786 { XD_INT, offsetof (base_type, len_) }, \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1787 { XD_INT_RESET, offsetof (base_type, largest_), XD_INDIRECT(1, 0) }, \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1788 { XD_INT_RESET, offsetof (base_type, max_), XD_INDIRECT(1, 0) }
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1789 #endif /* NEW_GC */
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1790
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1791 /************* Dynarr verification *************/
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1792
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1793 /* Dynarr locking and verification.
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1794
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1795 [I] VERIFICATION
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1796
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1797 Verification routines simply return their basic argument, possibly
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1798 casted, but in the process perform some verification on it, aborting if
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1799 the verification fails. The verification routines take FILE and LINE
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1800 parameters, and use them to output the file and line of the caller
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1801 when an abort occurs, rather than the file and line of the inline
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1802 function, which is less than useful.
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1803
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1804 There are three basic types of verification routines:
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1805
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1806 (1) Verify the dynarr itself. This verifies the basic invariant
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1807 involving the length/size values:
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1808
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1809 0 <= Dynarr_length(d) <= Dynarr_largest(d) <= Dynarr_max(d)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1810
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1811 (2) Verify the dynarr itself prior to modifying it. This performs
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1812 the same verification as previously, but also checks that the
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1813 dynarr is not locked (see below).
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1814
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1815 (3) Verify a dynarr position. Unfortunately we have to have
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1816 different verification routines depending on which kind of operation
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1817 is being performed:
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1818
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1819 (a) For Dynarr_at(), we check that the POS is bounded by Dynarr_largest(),
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1820 i.e. 0 <= POS < Dynarr_largest().
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1821 (b) For Dynarr_atp_allow_end(), we also have to allow
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1822 POS == Dynarr_largest().
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1823 (c) For Dynarr_atp(), we behave largely like Dynarr_at() but make a
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1824 special exception when POS == 0 and Dynarr_largest() == 0 -- see
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1825 comment below.
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1826 (d) Some other routines contain the POS verification within their code,
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1827 and make the check 0 <= POS < Dynarr_length() or
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1828 0 <= POS <= Dynarr_length().
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1829
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1830 #### It is not well worked-out whether and in what circumstances it's
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1831 allowed to use a position that is between Dynarr_length() and
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1832 Dynarr_largest(). The ideal solution is to never allow this, and require
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1833 instead that code first change the length before accessing higher
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1834 positions. That would require looking through all the code that accesses
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1835 dynarrs and fixing it appropriately (especially redisplay code, and
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1836 especially redisplay code in the vicinity of a reference to
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1837 Dynarr_largest(), since such code usually checks explicitly to see whether
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1838 there is extra stuff between Dynarr_length() and Dynarr_largest().)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1839
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1840 [II] LOCKING
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1841
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1842 The idea behind dynarr locking is simple: Locking a dynarr prevents
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1843 any modification from occurring, or rather, leads to an abort upon
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1844 any attempt to modify a dynarr.
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1845
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1846 Dynarr locking was originally added to catch some sporadic and hard-to-
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1847 debug crashes in the redisplay code where dynarrs appeared to be getting
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1848 corrupted in an unexpected fashion. The solution was to lock the
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1849 dynarrs that were getting corrupted (in this case, the display-line
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1850 dynarrs) around calls to routines that weren't supposed to be changing
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1851 these dynarrs but might somehow be calling code that modified them.
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1852 This eventually revealed that there was a reentrancy problem with
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1853 redisplay that involved the QUIT mechanism and the processing done in
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1854 order to determine whether C-g had been pressed -- this processing
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1855 involves retrieving, processing and queueing pending events to see
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1856 whether any of them result in a C-g keypress. However, at least under
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1857 MS Windows this can result in redisplay being called reentrantly.
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1858 For more info:--
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1859
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1860 (Info-goto-node "(internals)Critical Redisplay Sections")
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1861
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1862 */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1863
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
1864 #ifdef ERROR_CHECK_DYNARR
4844
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1865 DECLARE_INLINE_HEADER (
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1866 int
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1867 Dynarr_verify_pos_at (void *d, Elemcount pos, const Ascbyte *file, int line)
4844
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1868 )
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1869 {
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1870 Dynarr *dy = (Dynarr *) d;
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1871 /* We use `largest', not `len', because the redisplay code often
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1872 accesses stuff between len and largest. */
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1873 assert_at_line (pos >= 0 && pos < dy->largest_, file, line);
4844
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1874 return pos;
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1875 }
4929
b5ad8cf9f6e4 fix dynarr-related crash apparently due to compiler bug
Ben Wing <ben@xemacs.org>
parents: 4880
diff changeset
1876
4844
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1877 DECLARE_INLINE_HEADER (
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1878 int
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1879 Dynarr_verify_pos_atp (void *d, Elemcount pos, const Ascbyte *file, int line)
4844
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1880 )
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1881 {
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1882 Dynarr *dy = (Dynarr *) d;
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1883 /* We use `largest', not `len', because the redisplay code often
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1884 accesses stuff between len and largest. */
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
1885 /* [[ Code will often do something like ...
4844
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1886
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1887 val = make_bit_vector_from_byte_vector (Dynarr_atp (dyn, 0),
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1888 Dynarr_length (dyn));
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1889
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1890 which works fine when the Dynarr_length is non-zero, but when zero,
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1891 the result of Dynarr_atp() not only points past the end of the
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1892 allocated array, but the array may not have ever been allocated and
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1893 hence the return value is NULL. But the length of 0 causes the
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1894 pointer to never get checked. These can occur throughout the code
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
1895 so we put in a special check. --ben ]]
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
1896
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
1897 Update: The common idiom `Dynarr_atp (dyn, 0)' has been changed to
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
1898 `Dynarr_begin (dyn)'. Possibly this special check at POS 0 can be
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
1899 done only for Dynarr_begin() not for general Dynarr_atp(). --ben */
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1900 if (pos == 0 && dy->len_ == 0)
4844
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1901 return pos;
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1902 /* #### It's vaguely possible that some code could legitimately want to
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1903 retrieve a pointer to the position just past the end of dynarr memory.
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1904 This could happen with Dynarr_atp() but not Dynarr_at(). If so, it
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1905 will trigger this assert(). In such cases, it should be obvious that
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1906 the code wants to do this; rather than relaxing the assert, we should
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1907 probably create a new macro Dynarr_atp_allow_end() which is like
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1908 Dynarr_atp() but which allows for pointing at invalid addresses -- we
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1909 really want to check for cases of accessing just past the end of
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1910 memory, which is a likely off-by-one problem to occur and will usually
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1911 not trigger a protection fault (instead, you'll just get random
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
1912 behavior, possibly overwriting other memory, which is bad). --ben */
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1913 assert_at_line (pos >= 0 && pos < dy->largest_, file, line);
4844
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1914 return pos;
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1915 }
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1916
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1917 DECLARE_INLINE_HEADER (
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1918 int
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1919 Dynarr_verify_pos_atp_allow_end (void *d, Elemcount pos, const Ascbyte *file,
4844
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1920 int line)
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1921 )
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1922 {
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1923 Dynarr *dy = (Dynarr *) d;
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1924 /* We use `largest', not `len', because the redisplay code often
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1925 accesses stuff between len and largest.
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1926 We also allow referencing the very end, past the end of allocated
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1927 legitimately space. See comments in Dynarr_verify_pos_atp.()*/
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1928 assert_at_line (pos >= 0 && pos <= dy->largest_, file, line);
4844
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1929 return pos;
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1930 }
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1931
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1932 #else
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1933 #define Dynarr_verify_pos_at(d, pos, file, line) (pos)
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1934 #define Dynarr_verify_pos_atp(d, pos, file, line) (pos)
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1935 #define Dynarr_verify_pos_atp_allow_end(d, pos, file, line) (pos)
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
1936 #endif /* ERROR_CHECK_DYNARR */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
1937
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
1938 #ifdef ERROR_CHECK_DYNARR
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1939 DECLARE_INLINE_HEADER (
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1940 Dynarr *
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1941 Dynarr_verify_1 (void *d, const Ascbyte *file, int line)
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1942 )
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1943 {
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1944 Dynarr *dy = (Dynarr *) d;
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1945 assert_at_line (dy->len_ >= 0 && dy->len_ <= dy->largest_ &&
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1946 dy->largest_ <= dy->max_, file, line);
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1947 return dy;
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1948 }
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1949
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1950 DECLARE_INLINE_HEADER (
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1951 Dynarr *
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1952 Dynarr_verify_mod_1 (void *d, const Ascbyte *file, int line)
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1953 )
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1954 {
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1955 Dynarr *dy = (Dynarr *) d;
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1956 assert_at_line (!dy->locked, file, line);
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1957 return Dynarr_verify_1 (d, file, line);
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1958 }
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1959
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1960 #define Dynarr_verify(d) Dynarr_verify_1 (d, __FILE__, __LINE__)
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1961 #define Dynarr_verify_mod(d) Dynarr_verify_mod_1 (d, __FILE__, __LINE__)
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1962
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1963 DECLARE_INLINE_HEADER (
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1964 void
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1965 Dynarr_lock (void *d)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1966 )
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1967 {
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1968 Dynarr *dy = Dynarr_verify_mod (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1969 dy->locked = 1;
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1970 }
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1971
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1972 DECLARE_INLINE_HEADER (
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1973 void
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1974 Dynarr_unlock (void *d)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1975 )
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1976 {
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1977 Dynarr *dy = Dynarr_verify (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1978 assert (dy->locked);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1979 dy->locked = 0;
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1980 }
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1981
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1982 #else /* not ERROR_CHECK_DYNARR */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1983
5005
4170f3809a28 Cast correctly, Dynarr_verify, Dynarr_verify_mod, no ERROR_CHECK_STRUCTURES
Aidan Kehoe <kehoea@parhasard.net>
parents: 5001
diff changeset
1984 #define Dynarr_verify(d) ((Dynarr *) d)
4170f3809a28 Cast correctly, Dynarr_verify, Dynarr_verify_mod, no ERROR_CHECK_STRUCTURES
Aidan Kehoe <kehoea@parhasard.net>
parents: 5001
diff changeset
1985 #define Dynarr_verify_mod(d) ((Dynarr *) d)
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1986 #define Dynarr_lock(d) DO_NOTHING
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1987 #define Dynarr_unlock(d) DO_NOTHING
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1988
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
1989 #endif /* ERROR_CHECK_DYNARR */
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1990
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1991 /************* Dynarr creation *************/
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1992
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1993 MODULE_API void *Dynarr_newf (Bytecount elsize);
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1994 MODULE_API void Dynarr_free (void *d);
4844
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1995
3293
168191f9515f [xemacs-hg @ 2006-03-20 21:20:19 by crestani]
crestani
parents: 3263
diff changeset
1996 #ifdef NEW_GC
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1997 MODULE_API void *Dynarr_lisp_newf (Bytecount elsize,
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1998 const struct lrecord_implementation
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1999 *dynarr_imp,
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2000 const struct lrecord_implementation *imp);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2001
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2002 #define Dynarr_lisp_new(type, dynarr_imp, imp) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2003 ((type##_dynarr *) Dynarr_lisp_newf (sizeof (type), dynarr_imp, imp))
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2004 #define Dynarr_lisp_new2(dynarr_type, type, dynarr_imp, imp) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2005 ((dynarr_type *) Dynarr_lisp_newf (sizeof (type)), dynarr_imp, imp)
3293
168191f9515f [xemacs-hg @ 2006-03-20 21:20:19 by crestani]
crestani
parents: 3263
diff changeset
2006 #endif /* NEW_GC */
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2007 #define Dynarr_new(type) ((type##_dynarr *) Dynarr_newf (sizeof (type)))
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2008 #define Dynarr_new2(dynarr_type, type) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2009 ((dynarr_type *) Dynarr_newf (sizeof (type)))
4844
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
2010
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2011 /************* Dynarr access *************/
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2012
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
2013 #ifdef ERROR_CHECK_DYNARR
4844
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
2014 #define Dynarr_at(d, pos) \
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
2015 ((d)->base[Dynarr_verify_pos_at (d, pos, __FILE__, __LINE__)])
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
2016 #define Dynarr_atp_allow_end(d, pos) \
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
2017 (&((d)->base[Dynarr_verify_pos_atp_allow_end (d, pos, __FILE__, __LINE__)]))
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
2018 #define Dynarr_atp(d, pos) \
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
2019 (&((d)->base[Dynarr_verify_pos_atp (d, pos, __FILE__, __LINE__)]))
4929
b5ad8cf9f6e4 fix dynarr-related crash apparently due to compiler bug
Ben Wing <ben@xemacs.org>
parents: 4880
diff changeset
2020 #else
b5ad8cf9f6e4 fix dynarr-related crash apparently due to compiler bug
Ben Wing <ben@xemacs.org>
parents: 4880
diff changeset
2021 #define Dynarr_at(d, pos) ((d)->base[pos])
b5ad8cf9f6e4 fix dynarr-related crash apparently due to compiler bug
Ben Wing <ben@xemacs.org>
parents: 4880
diff changeset
2022 #define Dynarr_atp(d, pos) (&Dynarr_at (d, pos))
b5ad8cf9f6e4 fix dynarr-related crash apparently due to compiler bug
Ben Wing <ben@xemacs.org>
parents: 4880
diff changeset
2023 #define Dynarr_atp_allow_end(d, pos) Dynarr_atp (d, pos)
b5ad8cf9f6e4 fix dynarr-related crash apparently due to compiler bug
Ben Wing <ben@xemacs.org>
parents: 4880
diff changeset
2024 #endif
4844
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
2025
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
2026 /* Old #define Dynarr_atp(d, pos) (&Dynarr_at (d, pos)) */
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2027 #define Dynarr_begin(d) Dynarr_atp (d, 0)
4844
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
2028 #define Dynarr_lastp(d) Dynarr_atp (d, Dynarr_length (d) - 1)
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
2029 #define Dynarr_past_lastp(d) Dynarr_atp_allow_end (d, Dynarr_length (d))
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2030
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2031
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2032 /************* Dynarr length/size retrieval and setting *************/
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2033
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2034 /* Retrieve the length of a dynarr. The `+ 0' is to ensure that this cannot
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2035 be used as an lvalue. */
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2036 #define Dynarr_length(d) (Dynarr_verify (d)->len_ + 0)
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2037 /* Retrieve the largest ever length seen of a dynarr. The `+ 0' is to
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2038 ensure that this cannot be used as an lvalue. */
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2039 #define Dynarr_largest(d) (Dynarr_verify (d)->largest_ + 0)
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2040 /* Retrieve the number of elements that fit in the currently allocated
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2041 space. The `+ 0' is to ensure that this cannot be used as an lvalue. */
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2042 #define Dynarr_max(d) (Dynarr_verify (d)->max_ + 0)
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2043 /* Return the size in bytes of an element in a dynarr. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2044 #define Dynarr_elsize(d) (Dynarr_verify (d)->elsize_ + 0)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2045 /* Retrieve the advertised memory usage of a dynarr, i.e. the number of
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2046 bytes occupied by the elements in the dynarr, not counting any overhead. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2047 #define Dynarr_sizeof(d) (Dynarr_length (d) * Dynarr_elsize (d))
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2048
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2049 /* Actually set the length of a dynarr. This is a low-level routine that
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2050 should not be directly used; use Dynarr_set_length() or
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2051 Dynarr_set_lengthr() instead. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2052 DECLARE_INLINE_HEADER (
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2053 void
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2054 Dynarr_set_length_1 (void *d, Elemcount len)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2055 )
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2056 {
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2057 Dynarr *dy = Dynarr_verify_mod (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2058 dynarr_checking_assert (len >= 0 && len <= Dynarr_max (dy));
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2059 /* Use the raw field references here otherwise we get a crash because
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2060 we've set the length but not yet fixed up the largest value. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2061 dy->len_ = len;
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2062 if (dy->len_ > dy->largest_)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2063 dy->largest_ = dy->len_;
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2064 (void) Dynarr_verify_mod (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2065 }
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2066
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2067 /* "Restricted set-length": Set the length of dynarr D to LEN,
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2068 which must be in the range [0, Dynarr_largest(d)]. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2069
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2070 DECLARE_INLINE_HEADER (
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2071 void
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2072 Dynarr_set_lengthr (void *d, Elemcount len)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2073 )
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2074 {
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2075 Dynarr *dy = Dynarr_verify_mod (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2076 dynarr_checking_assert (len >= 0 && len <= Dynarr_largest (dy));
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2077 Dynarr_set_length_1 (dy, len);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2078 }
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2079
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2080 /* "Restricted increment": Increment the length of dynarr D by 1; the resulting
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2081 length must be in the range [0, Dynarr_largest(d)]. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2082
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2083 #define Dynarr_incrementr(d) Dynarr_set_lengthr (d, Dynarr_length (d) + 1)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2084
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2085
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2086 MODULE_API void Dynarr_resize (void *d, Elemcount size);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2087
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2088 DECLARE_INLINE_HEADER (
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2089 void
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2090 Dynarr_resize_to_fit (void *d, Elemcount size)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2091 )
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2092 {
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2093 Dynarr *dy = Dynarr_verify_mod (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2094 if (size > Dynarr_max (dy))
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2095 Dynarr_resize (dy, size);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2096 }
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2097
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2098 #define Dynarr_resize_to_add(d, numels) \
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2099 Dynarr_resize_to_fit (d, Dynarr_length (d) + numels)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2100
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2101 /* This is an optimization. This is like Dynarr_set_length() but the length
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2102 is guaranteed to be at least as big as the existing length. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2103
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2104 DECLARE_INLINE_HEADER (
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2105 void
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2106 Dynarr_increase_length (void *d, Elemcount len)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2107 )
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2108 {
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2109 Dynarr *dy = Dynarr_verify_mod (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2110 dynarr_checking_assert (len >= Dynarr_length (dy));
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2111 Dynarr_resize_to_fit (dy, len);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2112 Dynarr_set_length_1 (dy, len);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2113 }
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2114
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2115 /* Set the length of dynarr D to LEN. If the length increases, resize as
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2116 necessary to fit. (NOTE: This will leave uninitialized memory. If you
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2117 aren't planning on immediately overwriting the memory, use
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2118 Dynarr_set_length_and_zero() to zero out all the memory that would
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2119 otherwise be uninitialized.) */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2120
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2121 DECLARE_INLINE_HEADER (
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2122 void
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2123 Dynarr_set_length (void *d, Elemcount len)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2124 )
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2125 {
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2126 Dynarr *dy = Dynarr_verify_mod (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2127 Elemcount old_len = Dynarr_length (dy);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2128 if (old_len >= len)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2129 Dynarr_set_lengthr (dy, len);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2130 else
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2131 Dynarr_increase_length (d, len);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2132 }
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2133
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2134 #define Dynarr_increment(d) Dynarr_increase_length (d, Dynarr_length (d) + 1)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2135
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2136 /* Zero LEN contiguous elements starting at POS. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2137
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2138 DECLARE_INLINE_HEADER (
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2139 void
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2140 Dynarr_zero_many (void *d, Elemcount pos, Elemcount len)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2141 )
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2142 {
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2143 Dynarr *dy = Dynarr_verify_mod (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2144 memset ((Rawbyte *) dy->base + pos*Dynarr_elsize (dy), 0,
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2145 len*Dynarr_elsize (dy));
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2146 }
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2147
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2148 /* This is an optimization. This is like Dynarr_set_length_and_zero() but
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2149 the length is guaranteed to be at least as big as the existing
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2150 length. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2151
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2152 DECLARE_INLINE_HEADER (
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2153 void
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2154 Dynarr_increase_length_and_zero (void *d, Elemcount len)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2155 )
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2156 {
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2157 Dynarr *dy = Dynarr_verify_mod (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2158 Elemcount old_len = Dynarr_length (dy);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2159 Dynarr_increase_length (dy, len);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2160 Dynarr_zero_many (dy, old_len, len - old_len);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2161 }
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2162
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2163 /* Set the length of dynarr D to LEN. If the length increases, resize as
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2164 necessary to fit and zero out all the elements between the old and new
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2165 lengths. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2166
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2167 DECLARE_INLINE_HEADER (
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2168 void
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2169 Dynarr_set_length_and_zero (void *d, Elemcount len)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2170 )
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2171 {
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2172 Dynarr *dy = Dynarr_verify_mod (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2173 Elemcount old_len = Dynarr_length (dy);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2174 if (old_len >= len)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2175 Dynarr_set_lengthr (dy, len);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2176 else
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2177 Dynarr_increase_length_and_zero (d, len);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2178 }
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2179
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2180 /* Reset the dynarr's length to 0. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2181 #define Dynarr_reset(d) Dynarr_set_lengthr (d, 0)
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2182
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2183 #ifdef MEMORY_USAGE_STATS
5157
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5146
diff changeset
2184 struct usage_stats;
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5146
diff changeset
2185 Bytecount Dynarr_memory_usage (void *d, struct usage_stats *stats);
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2186 #endif
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2187
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2188 /************* Adding/deleting elements to/from a dynarr *************/
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2189
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2190 /* Set the Lisp implementation of the element at POS in dynarr D. Only
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2191 does this if the dynarr holds Lisp objects of a particular type (the
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2192 objects themselves, not pointers to them), and only under NEW_GC. */
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2193
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2194 #ifdef NEW_GC
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2195 #define DYNARR_SET_LISP_IMP(d, pos) \
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2196 do { \
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2197 if ((d)->lisp_imp) \
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2198 set_lheader_implementation \
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2199 ((struct lrecord_header *)&(((d)->base)[pos]), (d)->lisp_imp); \
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2200 } while (0)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2201 #else
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2202 #define DYNARR_SET_LISP_IMP(d, pos) DO_NOTHING
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2203 #endif /* (not) NEW_GC */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2204
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2205 /* Add Element EL to the end of dynarr D. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2206
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2207 #define Dynarr_add(d, el) \
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2208 do { \
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2209 Elemcount _da_pos = Dynarr_length (d); \
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2210 (void) Dynarr_verify_mod (d); \
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2211 Dynarr_increment (d); \
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2212 ((d)->base)[_da_pos] = (el); \
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2213 DYNARR_SET_LISP_IMP (d, _da_pos); \
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2214 } while (0)
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2215
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2216 /* Set EL as the element at position POS in dynarr D.
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2217 Expand the dynarr as necessary so that its length is enough to include
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2218 position POS within it, and zero out any new elements created as a
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2219 result of expansion, other than the one at POS. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2220
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2221 #define Dynarr_set(d, pos, el) \
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2222 do { \
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2223 Elemcount _ds_pos = (pos); \
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2224 (void) Dynarr_verify_mod (d); \
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2225 if (Dynarr_length (d) < _ds_pos + 1) \
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2226 Dynarr_increase_length_and_zero (d, _ds_pos + 1); \
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2227 ((d)->base)[_ds_pos] = (el); \
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2228 DYNARR_SET_LISP_IMP (d, _ds_pos); \
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2229 } while (0)
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2230
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2231 /* Add LEN contiguous elements, stored at BASE, to dynarr D. If BASE is
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2232 NULL, reserve space but don't store anything. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2233
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2234 DECLARE_INLINE_HEADER (
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2235 void
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2236 Dynarr_add_many (void *d, const void *base, Elemcount len)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2237 )
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2238 {
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2239 /* This duplicates Dynarr_insert_many to some extent; but since it is
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2240 called so often, it seemed useful to remove the unnecessary stuff
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2241 from that function and to make it inline */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2242 Dynarr *dy = Dynarr_verify_mod (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2243 Elemcount pos = Dynarr_length (dy);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2244 Dynarr_increase_length (dy, Dynarr_length (dy) + len);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2245 if (base)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2246 memcpy ((Rawbyte *) dy->base + pos*Dynarr_elsize (dy), base,
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2247 len*Dynarr_elsize (dy));
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2248 }
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2249
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2250 /* Insert LEN elements, currently pointed to by BASE, into dynarr D
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2251 starting at position POS. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2252
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2253 MODULE_API void Dynarr_insert_many (void *d, const void *base, Elemcount len,
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2254 Elemcount pos);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2255
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2256 /* Prepend LEN elements, currently pointed to by BASE, to the beginning. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2257
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2258 #define Dynarr_prepend_many(d, base, len) Dynarr_insert_many (d, base, len, 0)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2259
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2260 /* Add literal string S to dynarr D, which should hold chars or unsigned
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2261 chars. The final zero byte is not stored. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2262
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2263 #define Dynarr_add_literal_string(d, s) Dynarr_add_many (d, s, sizeof (s) - 1)
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2264
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2265 /* Convert Lisp string S to an external encoding according to CODESYS and
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2266 add to dynarr D, which should hold chars or unsigned chars. No final
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2267 zero byte is appended. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2268
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2269 /* #### This should be an inline function but LISP_STRING_TO_SIZED_EXTERNAL
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2270 isn't declared yet. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2271
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2272 #define Dynarr_add_ext_lisp_string(d, s, codesys) \
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2273 do { \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2274 Lisp_Object dyna_ls_s = (s); \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2275 Lisp_Object dyna_ls_cs = (codesys); \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2276 Extbyte *dyna_ls_eb; \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2277 Bytecount dyna_ls_bc; \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2278 \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2279 LISP_STRING_TO_SIZED_EXTERNAL (dyna_ls_s, dyna_ls_eb, \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2280 dyna_ls_bc, dyna_ls_cs); \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2281 Dynarr_add_many (d, dyna_ls_eb, dyna_ls_bc); \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2282 } while (0)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2283
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2284 /* Delete LEN elements starting at position POS. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2285
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2286 MODULE_API void Dynarr_delete_many (void *d, Elemcount pos, Elemcount len);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2287
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2288 /* Pop off (i.e. delete) the last element from the dynarr and return it */
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2289
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2290 #define Dynarr_pop(d) \
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
2291 (dynarr_checking_assert (Dynarr_length (d) > 0), \
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2292 Dynarr_verify_mod (d)->len_--, \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2293 Dynarr_at (d, Dynarr_length (d)))
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2294
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2295 /* Delete the item at POS */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2296
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2297 #define Dynarr_delete(d, pos) Dynarr_delete_many (d, pos, 1)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2298
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2299 /* Delete the item located at memory address P, which must be a `type *'
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2300 pointer, where `type' is the type of the elements of the dynarr. */
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2301 #define Dynarr_delete_by_pointer(d, p) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2302 Dynarr_delete_many (d, (p) - ((d)->base), 1)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2303
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2304 /* Delete all elements that are numerically equal to EL. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2305
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2306 #define Dynarr_delete_object(d, el) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2307 do \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2308 { \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2309 REGISTER int i; \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2310 for (i = Dynarr_length (d) - 1; i >= 0; i--) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2311 { \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2312 if (el == Dynarr_at (d, i)) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2313 Dynarr_delete_many (d, i, 1); \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2314 } \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2315 } while (0)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2316
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2317 /************* Dynarr typedefs *************/
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2318
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2319 /* Dynarr typedefs -- basic types first */
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2320
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2321 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2322 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2323 Dynarr_declare (Ibyte);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2324 } Ibyte_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2325
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2326 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2327 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2328 Dynarr_declare (Extbyte);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2329 } Extbyte_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2330
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2331 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2332 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2333 Dynarr_declare (Ichar);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2334 } Ichar_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2335
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2336 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2337 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2338 Dynarr_declare (char);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2339 } char_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2340
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2341 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2342 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2343 Dynarr_declare (char *);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2344 } char_ptr_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2345
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2346 typedef unsigned char unsigned_char;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2347 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2348 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2349 Dynarr_declare (unsigned char);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2350 } unsigned_char_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2351
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2352 typedef unsigned long unsigned_long;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2353 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2354 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2355 Dynarr_declare (unsigned long);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2356 } unsigned_long_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2357
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
2358 typedef const Ascbyte *const_Ascbyte_ptr;
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
2359 typedef struct
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
2360 {
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
2361 Dynarr_declare (const Ascbyte *);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
2362 } const_Ascbyte_ptr_dynarr;
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
2363
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
2364 extern const struct sized_memory_description const_Ascbyte_ptr_description;
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
2365 extern const struct sized_memory_description const_Ascbyte_ptr_dynarr_description;
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
2366
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2367 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2368 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2369 Dynarr_declare (int);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2370 } int_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2371
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2372 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2373 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2374 Dynarr_declare (Charbpos);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2375 } Charbpos_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2376
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2377 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2378 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2379 Dynarr_declare (Bytebpos);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2380 } Bytebpos_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2381
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2382 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2383 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2384 Dynarr_declare (Charcount);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2385 } Charcount_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2386
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2387 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2388 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2389 Dynarr_declare (Bytecount);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2390 } Bytecount_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2391
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2392 /* Dynarr typedefs -- more complex types */
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2393
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2394 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2395 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2396 Dynarr_declare (struct face_cachel);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2397 } face_cachel_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2398
3293
168191f9515f [xemacs-hg @ 2006-03-20 21:20:19 by crestani]
crestani
parents: 3263
diff changeset
2399 #ifdef NEW_GC
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 5117 4744
diff changeset
2400 DECLARE_LISP_OBJECT (face_cachel_dynarr, face_cachel_dynarr);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2401 #define XFACE_CACHEL_DYNARR(x) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2402 XRECORD (x, face_cachel_dynarr, face_cachel_dynarr)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2403 #define wrap_face_cachel_dynarr(p) wrap_record (p, face_cachel_dynarr)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2404 #define FACE_CACHEL_DYNARRP(x) RECORDP (x, face_cachel_dynarr)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2405 #define CHECK_FACE_CACHEL_DYNARR(x) CHECK_RECORD (x, face_cachel_dynarr)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2406 #define CONCHECK_FACE_CACHEL_DYNARR(x) CONCHECK_RECORD (x, face_cachel_dynarr)
3293
168191f9515f [xemacs-hg @ 2006-03-20 21:20:19 by crestani]
crestani
parents: 3263
diff changeset
2407 #endif /* NEW_GC */
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2408
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2409 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2410 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2411 Dynarr_declare (struct glyph_cachel);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2412 } glyph_cachel_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2413
3293
168191f9515f [xemacs-hg @ 2006-03-20 21:20:19 by crestani]
crestani
parents: 3263
diff changeset
2414 #ifdef NEW_GC
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 5117 4744
diff changeset
2415 DECLARE_LISP_OBJECT (glyph_cachel_dynarr, glyph_cachel_dynarr);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2416 #define XGLYPH_CACHEL_DYNARR(x) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2417 XRECORD (x, glyph_cachel_dynarr, glyph_cachel_dynarr)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2418 #define wrap_glyph_cachel_dynarr(p) wrap_record (p, glyph_cachel_dynarr)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2419 #define GLYPH_CACHEL_DYNARRP(x) RECORDP (x, glyph_cachel_dynarr)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2420 #define CHECK_GLYPH_CACHEL_DYNARR(x) CHECK_RECORD (x, glyph_cachel_dynarr)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2421 #define CONCHECK_GLYPH_CACHEL_DYNARR(x) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2422 CONCHECK_RECORD (x, glyph_cachel_dynarr)
3293
168191f9515f [xemacs-hg @ 2006-03-20 21:20:19 by crestani]
crestani
parents: 3263
diff changeset
2423 #endif /* NEW_GC */
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2424
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2425 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2426 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2427 Dynarr_declare (struct console_type_entry);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2428 } console_type_entry_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2429
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2430 /* WARNING WARNING WARNING. You must ensure on your own that proper
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2431 GC protection is provided for the elements in this array. */
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2432 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2433 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2434 Dynarr_declare (Lisp_Object);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2435 } Lisp_Object_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2436
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2437 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2438 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2439 Dynarr_declare (Lisp_Object *);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2440 } Lisp_Object_ptr_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2441
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2442
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2443 /************* Stack-like malloc/free: Another allocator *************/
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2444
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2445 void *stack_like_malloc (Bytecount size);
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2446 void stack_like_free (void *val);
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2447
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2448
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2449 /************************************************************************/
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2450 /** Definitions of other basic Lisp objects **/
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2451 /************************************************************************/
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2452
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2453 /*------------------------------ unbound -------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2454
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2455 /* Qunbound is a special Lisp_Object (actually of type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2456 symbol-value-forward), that can never be visible to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2457 the Lisp caller and thus can be used in the C code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2458 to mean "no such value". */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2459
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2460 #define UNBOUNDP(val) EQ (val, Qunbound)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2461
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2462 /* Evaluate expr, return it if it's not Qunbound. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2463 #define RETURN_IF_NOT_UNBOUND(expr) do \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2464 { \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2465 Lisp_Object ret_nunb_val = (expr); \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2466 if (!UNBOUNDP (ret_nunb_val)) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2467 RETURN_SANS_WARNINGS ret_nunb_val; \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2468 } while (0)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2469
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2470 /*------------------------------- cons ---------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2471
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2472 /* In a cons, the markbit of the car is the gc mark bit */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2473
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2474 struct Lisp_Cons
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2475 {
5120
d1247f3cc363 latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
2476 FROB_BLOCK_LISP_OBJECT_HEADER lheader;
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
2477 Lisp_Object car_, cdr_;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2478 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2479 typedef struct Lisp_Cons Lisp_Cons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2480
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2481 #if 0 /* FSFmacs */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2482 /* Like a cons, but records info on where the text lives that it was read from */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2483 /* This is not really in use now */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2484
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2485 struct Lisp_Buffer_Cons
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2486 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2487 Lisp_Object car, cdr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2488 struct buffer *buffer;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2489 int charbpos;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2490 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2491 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2492
5120
d1247f3cc363 latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
2493 DECLARE_MODULE_API_LISP_OBJECT (cons, Lisp_Cons);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2494 #define XCONS(x) XRECORD (x, cons, Lisp_Cons)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
2495 #define wrap_cons(p) wrap_record (p, cons)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2496 #define CONSP(x) RECORDP (x, cons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2497 #define CHECK_CONS(x) CHECK_RECORD (x, cons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2498 #define CONCHECK_CONS(x) CONCHECK_RECORD (x, cons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2499
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
2500 #ifdef NEW_GC
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2501 #define CONS_MARKED_P(c) MARKED_P (&((c)->lheader))
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2502 #define MARK_CONS(c) MARK (&((c)->lheader))
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
2503 #else /* not NEW_GC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2504 #define CONS_MARKED_P(c) MARKED_RECORD_HEADER_P(&((c)->lheader))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2505 #define MARK_CONS(c) MARK_RECORD_HEADER (&((c)->lheader))
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
2506 #endif /* not NEW_GC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2507
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
2508 extern MODULE_API Lisp_Object Qnil;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2509
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2510 #define NILP(x) EQ (x, Qnil)
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
2511 #define cons_car(a) ((a)->car_)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
2512 #define cons_cdr(a) ((a)->cdr_)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
2513 #define XCAR(a) (XCONS (a)->car_)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
2514 #define XCDR(a) (XCONS (a)->cdr_)
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2515 #define XCADR(a) (XCAR (XCDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2516 #define XCDDR(a) (XCDR (XCDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2517 #define XCADDR(a) (XCAR (XCDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2518 #define XCDDDR(a) (XCDR (XCDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2519 #define XCADDDR(a) (XCAR (XCDDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2520 #define XCDDDDR(a) (XCDR (XCDDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2521 #define XCADDDDR(a) (XCAR (XCDDDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2522 #define XCDDDDDR(a) (XCDR (XCDDDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2523 #define XCADDDDDR(a) (XCAR (XCDDDDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2524 #define XCDDDDDDR(a) (XCDR (XCDDDDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2525 #define X1ST(a) XCAR (a)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2526 #define X2ND(a) XCADR (a)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2527 #define X3RD(a) XCADDR (a)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2528 #define X4TH(a) XCADDDR (a)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2529 #define X5TH(a) XCADDDDR (a)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2530 #define X6TH(a) XCADDDDDR (a)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2531
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
2532 #define XSETCAR(a, b) (XCONS (a)->car_ = (b))
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
2533 #define XSETCDR(a, b) (XCONS (a)->cdr_ = (b))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2534 #define LISTP(x) (CONSP(x) || NILP(x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2535
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2536 #define CHECK_LIST(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2537 if (!LISTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2538 dead_wrong_type_argument (Qlistp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2539 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2540
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2541 #define CONCHECK_LIST(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2542 if (!LISTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2543 x = wrong_type_argument (Qlistp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2544 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2545
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2546 /*---------------------- list traversal macros -------------------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2547
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2548 /* Note: These macros are for traversing through a list in some format,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2549 and executing code that you specify on each member of the list.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2550
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2551 There are two kinds of macros, those requiring surrounding braces, and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2552 those not requiring this. Which type of macro will be indicated.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2553 The general format for using a brace-requiring macro is
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2554
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2555 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2556 LIST_LOOP_3 (elt, list, tail)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2557 execute_code_here;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2558 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2559
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2560 or
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2561
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2562 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2563 LIST_LOOP_3 (elt, list, tail)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2564 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2565 execute_code_here;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2566 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2567 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2568
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2569 You can put variable declarations between the brace and beginning of
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2570 macro, but NOTHING ELSE.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2571
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2572 The brace-requiring macros typically declare themselves any arguments
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2573 that are initialized and iterated by the macros. If for some reason
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2574 you need to declare these arguments yourself (e.g. to do something on
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2575 them before the iteration starts, use the _NO_DECLARE versions of the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2576 macros.)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2577 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2578
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2579 /* There are two basic kinds of macros: those that handle "internal" lists
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2580 that are known to be correctly structured (i.e. first element is a cons
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2581 or nil, and the car of each cons is also a cons or nil, and there are
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2582 no circularities), and those that handle "external" lists, where the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2583 list may have any sort of invalid formation. This is reflected in
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2584 the names: those with "EXTERNAL_" work with external lists, and those
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2585 without this prefix work with internal lists. The internal-list
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2586 macros will hit an assertion failure if the structure is ill-formed;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2587 the external-list macros will signal an error in this case, either a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2588 malformed-list error or a circular-list error.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2589 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2590
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2591 /* LIST_LOOP is a simple, old-fashioned macro. It doesn't require brace
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2592 surrounding, and iterates through a list, which may or may not known to
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2593 be syntactically correct. It accepts two args, TAIL (set progressively
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2594 to each cons starting with the first), and LIST, the list to iterate
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2595 over. TAIL needs to be defined by the caller.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2596
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2597 In each iteration, you can retrieve the current list item using XCAR
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2598 (tail), or destructively modify the list using XSETCAR (tail,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2599 ...). */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2600
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2601 #define LIST_LOOP(tail, list) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2602 for (tail = list; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2603 !NILP (tail); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2604 tail = XCDR (tail))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2605
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2606 /* The following macros are the "core" macros for list traversal.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2607
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2608 *** ALL OF THESE MACROS MUST BE DECLARED INSIDE BRACES -- SEE ABOVE. ***
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2609
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2610 LIST_LOOP_2 and EXTERNAL_LIST_LOOP_2 are the standard, most-often used
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2611 macros. They take two arguments, an element variable ELT and the list
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2612 LIST. ELT is automatically declared, and set to each element in turn
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2613 from LIST.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2614
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2615 LIST_LOOP_3 and EXTERNAL_LIST_LOOP_3 are the same, but they have a third
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2616 argument TAIL, another automatically-declared variable. At each iteration,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2617 this one points to the cons cell for which ELT is the car.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2618
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2619 EXTERNAL_LIST_LOOP_4 is like EXTERNAL_LIST_LOOP_3 but takes an additional
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2620 LEN argument, again automatically declared, which counts the number of
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2621 iterations gone by. It is 0 during the first iteration.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2622
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2623 EXTERNAL_LIST_LOOP_4_NO_DECLARE is like EXTERNAL_LIST_LOOP_4 but none
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2624 of the variables are automatically declared, and so you need to declare
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2625 them yourself. (ELT and TAIL are Lisp_Objects, and LEN is an EMACS_INT.)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2626 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2627
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2628 #define LIST_LOOP_2(elt, list) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2629 LIST_LOOP_3(elt, list, unused_tail_##elt)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2630
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2631 #define LIST_LOOP_3(elt, list, tail) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2632 Lisp_Object elt, tail; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2633 for (tail = list; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2634 NILP (tail) ? \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2635 0 : (elt = XCAR (tail), 1); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2636 tail = XCDR (tail))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2637
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2638 /* The following macros are for traversing lisp lists.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2639 Signal an error if LIST is not properly acyclic and nil-terminated.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2640
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2641 Use tortoise/hare algorithm to check for cycles, but only if it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2642 looks like the list is getting too long. Not only is the hare
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2643 faster than the tortoise; it even gets a head start! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2644
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2645 /* Optimized and safe macros for looping over external lists. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2646 #define CIRCULAR_LIST_SUSPICION_LENGTH 1024
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2647
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2648 #define EXTERNAL_LIST_LOOP_1(list) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2649 Lisp_Object ELL1_elt, ELL1_hare, ELL1_tortoise; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2650 EMACS_INT ELL1_len; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2651 PRIVATE_EXTERNAL_LIST_LOOP_6 (ELL1_elt, list, ELL1_len, ELL1_hare, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2652 ELL1_tortoise, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2653
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2654 #define EXTERNAL_LIST_LOOP_2(elt, list) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2655 Lisp_Object elt, hare_##elt, tortoise_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2656 EMACS_INT len_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2657 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len_##elt, hare_##elt, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2658 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2659
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2660
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2661 #define GC_EXTERNAL_LIST_LOOP_2(elt, list) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2662 do { \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2663 XGCDECL3 (elt); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2664 Lisp_Object elt, hare_##elt, tortoise_##elt; \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2665 EMACS_INT len_##elt; \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2666 XGCPRO3 (elt, elt, hare_##elt, tortoise_##elt); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2667 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len_##elt, hare_##elt, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2668 tortoise_##elt, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2669 CIRCULAR_LIST_SUSPICION_LENGTH)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2670
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2671 #define END_GC_EXTERNAL_LIST_LOOP(elt) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2672 XUNGCPRO (elt); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2673 } \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2674 while (0)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2675
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2676 #define EXTERNAL_LIST_LOOP_3(elt, list, tail) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2677 Lisp_Object elt, tail, tortoise_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2678 EMACS_INT len_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2679 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len_##elt, tail, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2680 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2681
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2682 #define EXTERNAL_LIST_LOOP_4_NO_DECLARE(elt, list, tail, len) \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2683 Lisp_Object tortoise_##elt; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2684 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len, tail, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2685 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2686
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2687 #define EXTERNAL_LIST_LOOP_4(elt, list, tail, len) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2688 Lisp_Object elt, tail, tortoise_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2689 EMACS_INT len; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2690 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len, tail, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2691 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2692
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2693
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2694 #define PRIVATE_EXTERNAL_LIST_LOOP_6(elt, list, len, hare, \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2695 tortoise, suspicion_length) \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2696 for (tortoise = hare = list, len = 0; \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2697 \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2698 (CONSP (hare) ? ((elt = XCAR (hare)), 1) : \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2699 (NILP (hare) ? 0 : \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2700 (signal_malformed_list_error (list), 0))); \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2701 \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2702 hare = XCDR (hare), \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2703 (void) \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2704 ((++len > suspicion_length) \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2705 && \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2706 ((((len & 1) != 0) && (tortoise = XCDR (tortoise), 0)), \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2707 (EQ (hare, tortoise) && (signal_circular_list_error (list), 0)))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2708
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2709 /* GET_LIST_LENGTH and GET_EXTERNAL_LIST_LENGTH:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2710
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2711 These two macros return the length of LIST (either an internal or external
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2712 list, according to which macro is used), stored into LEN (which must
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2713 be declared by the caller). Circularities are trapped in external lists
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2714 (and cause errors). Neither macro need be declared inside brackets. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2715
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2716 #define GET_LIST_LENGTH(list, len) do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2717 Lisp_Object GLL_tail; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2718 for (GLL_tail = list, len = 0; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2719 !NILP (GLL_tail); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2720 GLL_tail = XCDR (GLL_tail), ++len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2721 DO_NOTHING; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2722 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2723
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2724 #define GET_EXTERNAL_LIST_LENGTH(list, len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2725 do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2726 Lisp_Object GELL_elt, GELL_tail; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2727 EXTERNAL_LIST_LOOP_4_NO_DECLARE (GELL_elt, list, GELL_tail, len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2728 ; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2729 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2730
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2731 /* For a list that's known to be in valid list format, where we may
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2732 be deleting the current element out of the list --
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 2421
diff changeset
2733 will ABORT() if the list is not in valid format */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2734 #define LIST_LOOP_DELETING(consvar, nextconsvar, list) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2735 for (consvar = list; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2736 !NILP (consvar) ? (nextconsvar = XCDR (consvar), 1) :0; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2737 consvar = nextconsvar)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2738
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2739 /* LIST_LOOP_DELETE_IF and EXTERNAL_LIST_LOOP_DELETE_IF:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2740
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2741 These two macros delete all elements of LIST (either an internal or
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2742 external list, according to which macro is used) satisfying
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2743 CONDITION, a C expression referring to variable ELT. ELT is
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2744 automatically declared. Circularities are trapped in external
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2745 lists (and cause errors). Neither macro need be declared inside
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2746 brackets. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2747
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2748 #define LIST_LOOP_DELETE_IF(elt, list, condition) do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2749 /* Do not use ##list when creating new variables because \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2750 that may not be just a variable name. */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2751 Lisp_Object prev_tail_##elt = Qnil; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2752 LIST_LOOP_3 (elt, list, tail_##elt) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2753 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2754 if (condition) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2755 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2756 if (NILP (prev_tail_##elt)) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2757 list = XCDR (tail_##elt); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2758 else \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2759 XCDR (prev_tail_##elt) = XCDR (tail_##elt); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2760 } \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2761 else \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2762 prev_tail_##elt = tail_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2763 } \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2764 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2765
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2766 #define EXTERNAL_LIST_LOOP_DELETE_IF(elt, list, condition) do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2767 Lisp_Object prev_tail_##elt = Qnil; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2768 EXTERNAL_LIST_LOOP_4 (elt, list, tail_##elt, len_##elt) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2769 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2770 if (condition) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2771 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2772 if (NILP (prev_tail_##elt)) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2773 list = XCDR (tail_##elt); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2774 else \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2775 XCDR (prev_tail_##elt) = XCDR (tail_##elt); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2776 /* Keep tortoise from ever passing hare. */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2777 len_##elt = 0; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2778 } \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2779 else \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2780 prev_tail_##elt = tail_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2781 } \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2782 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2783
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2784
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2785 /* Macros for looping over internal alists.
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2786
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2787 *** ALL OF THESE MACROS MUST BE DECLARED INSIDE BRACES -- SEE ABOVE. ***
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2788
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2789 ALIST_LOOP_3 loops over an alist, at each iteration setting CAR and CDR
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2790 to the car and cdr of the acons. CAR and CDR are automatically
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2791 declared.
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2792
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2793 ALIST_LOOP_4 is similar to ALIST_LOOP_3 but contains an additional
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2794 variable ACONS at the beginning for access to the acons itself.All of
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2795 the variables ACONS, CAR and CDR are automatically declared.
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2796 */
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2797
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2798 #define ALIST_LOOP_3(car, cdr, alist) \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2799 Lisp_Object _al3_acons_##car, car, cdr, _al3_tail_##car; \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2800 for (_al3_tail_##car = alist; \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2801 NILP (_al3_tail_##car) ? \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2802 0 : (_al3_acons_##car = XCAR (_al3_tail_##car), \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2803 car = XCAR (_al3_acons_##car), \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2804 cdr = XCDR (_al3_acons_##car), 1); \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2805 _al3_tail_##car = XCDR (_al3_tail_##car))
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2806
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2807 #define ALIST_LOOP_4(acons, car, cdr, list) \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2808 Lisp_Object acons, car, cdr, _al4_tail_##car; \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2809 for (_al4_tail_##car = list; \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2810 NILP (_al4_tail_##car) ? \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2811 0 : (elt = XCAR (_al4_tail_##car), car = XCAR (elt), \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2812 cdr = XCDR (elt), 1); \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2813 _al4_tail_##car = XCDR (tail))
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2814
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2815 /* Macros for looping over external alists.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2816
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2817 *** ALL OF THESE MACROS MUST BE DECLARED INSIDE BRACES -- SEE ABOVE. ***
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2818
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2819 EXTERNAL_ALIST_LOOP_4 is similar to EXTERNAL_LIST_LOOP_2, but it
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2820 assumes the elements are aconses (the elements in an alist) and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2821 sets two additional argument variables ELT_CAR and ELT_CDR to the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2822 car and cdr of the acons. All of the variables ELT, ELT_CAR and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2823 ELT_CDR are automatically declared.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2824
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2825 EXTERNAL_ALIST_LOOP_5 adds a TAIL argument to EXTERNAL_ALIST_LOOP_4,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2826 just like EXTERNAL_LIST_LOOP_3 does, and again TAIL is automatically
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2827 declared.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2828
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2829 EXTERNAL_ALIST_LOOP_6 adds a LEN argument to EXTERNAL_ALIST_LOOP_5,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2830 just like EXTERNAL_LIST_LOOP_4 does, and again LEN is automatically
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2831 declared.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2832
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2833 EXTERNAL_ALIST_LOOP_6_NO_DECLARE does not declare any of its arguments,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2834 just like EXTERNAL_LIST_LOOP_4_NO_DECLARE, and so these must be declared
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2835 manually.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2836 */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2837
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2838 /* Optimized and safe macros for looping over external alists. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2839 #define EXTERNAL_ALIST_LOOP_4(elt, elt_car, elt_cdr, list) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2840 Lisp_Object elt, elt_car, elt_cdr; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2841 Lisp_Object hare_##elt, tortoise_##elt; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2842 EMACS_INT len_##elt; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2843 PRIVATE_EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2844 len_##elt, hare_##elt, tortoise_##elt, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2845 CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2846
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2847 #define EXTERNAL_ALIST_LOOP_5(elt, elt_car, elt_cdr, list, tail) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2848 Lisp_Object elt, elt_car, elt_cdr, tail; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2849 Lisp_Object tortoise_##elt; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2850 EMACS_INT len_##elt; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2851 PRIVATE_EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2852 len_##elt, tail, tortoise_##elt, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2853 CIRCULAR_LIST_SUSPICION_LENGTH) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2854
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2855 #define EXTERNAL_ALIST_LOOP_6(elt, elt_car, elt_cdr, list, tail, len) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2856 Lisp_Object elt, elt_car, elt_cdr, tail; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2857 EMACS_INT len; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2858 Lisp_Object tortoise_##elt; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2859 PRIVATE_EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2860 len, tail, tortoise_##elt, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2861 CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2862
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2863 #define EXTERNAL_ALIST_LOOP_6_NO_DECLARE(elt, elt_car, elt_cdr, list, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2864 tail, len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2865 Lisp_Object tortoise_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2866 PRIVATE_EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2867 len, tail, tortoise_##elt, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2868 CIRCULAR_LIST_SUSPICION_LENGTH)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2869
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2870
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2871 #define PRIVATE_EXTERNAL_ALIST_LOOP_8(elt, elt_car, elt_cdr, list, len, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2872 hare, tortoise, suspicion_length) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2873 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len, hare, tortoise, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2874 suspicion_length) \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2875 if (CONSP (elt) ? (elt_car = XCAR (elt), elt_cdr = XCDR (elt), 0) :1) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2876 continue; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2877 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2878
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2879 /* Macros for looping over external property lists.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2880
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2881 *** ALL OF THESE MACROS MUST BE DECLARED INSIDE BRACES -- SEE ABOVE. ***
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2882
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2883 EXTERNAL_PROPERTY_LIST_LOOP_3 maps over an external list assumed to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2884 be a property list, consisting of alternating pairs of keys
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2885 (typically symbols or keywords) and values. Each iteration
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2886 processes one such pair out of LIST, assigning the two elements to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2887 KEY and VALUE respectively. Malformed lists and circularities are
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2888 trapped as usual, and in addition, property lists with an odd number
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2889 of elements also signal an error.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2890
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2891 EXTERNAL_PROPERTY_LIST_LOOP_4 adds a TAIL argument to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2892 EXTERNAL_PROPERTY_LIST_LOOP_3, just like EXTERNAL_LIST_LOOP_3 does,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2893 and again TAIL is automatically declared.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2894
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2895 EXTERNAL_PROPERTY_LIST_LOOP_5 adds a LEN argument to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2896 EXTERNAL_PROPERTY_LIST_LOOP_4, just like EXTERNAL_LIST_LOOP_4 does,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2897 and again LEN is automatically declared. Note that in this case,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2898 LEN counts the iterations, NOT the total number of list elements
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2899 processed, which is 2 * LEN.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2900
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2901 EXTERNAL_PROPERTY_LIST_LOOP_5_NO_DECLARE does not declare any of its
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2902 arguments, just like EXTERNAL_LIST_LOOP_4_NO_DECLARE, and so these
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2903 must be declared manually. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2904
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2905 /* Optimized and safe macros for looping over external property lists. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2906 #define EXTERNAL_PROPERTY_LIST_LOOP_3(key, value, list) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2907 Lisp_Object key, value, hare_##key, tortoise_##key; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2908 EMACS_INT len_##key; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2909 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len_##key, hare_##key, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2910 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2911
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2912 #define EXTERNAL_PROPERTY_LIST_LOOP_4(key, value, list, tail) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2913 Lisp_Object key, value, tail, tortoise_##key; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2914 EMACS_INT len_##key; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2915 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len_##key, tail, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2916 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2917
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2918 #define EXTERNAL_PROPERTY_LIST_LOOP_5(key, value, list, tail, len) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2919 Lisp_Object key, value, tail, tortoise_##key; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2920 EMACS_INT len; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2921 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len, tail, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2922 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2923
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2924 #define EXTERNAL_PROPERTY_LIST_LOOP_5_NO_DECLARE(key, value, list, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2925 tail, len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2926 Lisp_Object tortoise_##key; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2927 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len, tail, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2928 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2929
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2930
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2931 #define EXTERNAL_PROPERTY_LIST_LOOP_7(key, value, list, len, hare, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2932 tortoise, suspicion_length) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2933 for (tortoise = hare = list, len = 0; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2934 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2935 ((CONSP (hare) && \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2936 (key = XCAR (hare), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2937 hare = XCDR (hare), \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2938 (CONSP (hare) ? 1 : \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2939 (signal_malformed_property_list_error (list), 0)))) ? \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2940 (value = XCAR (hare), 1) : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2941 (NILP (hare) ? 0 : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2942 (signal_malformed_property_list_error (list), 0))); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2943 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2944 hare = XCDR (hare), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2945 ((++len < suspicion_length) ? \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2946 ((void) 0) : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2947 (((len & 1) ? \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2948 ((void) (tortoise = XCDR (XCDR (tortoise)))) : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2949 ((void) 0)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2950 , \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2951 (EQ (hare, tortoise) ? \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2952 ((void) signal_circular_property_list_error (list)) : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2953 ((void) 0)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2954
2421
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2955 #define PRIVATE_PROPERTY_LIST_LOOP_4(tail, key, value, plist) \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2956 for (tail = plist; \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2957 NILP (tail) ? 0 : \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2958 (key = XCAR (tail), tail = XCDR (tail), \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2959 value = XCAR (tail), tail = XCDR (tail), 1); \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2960 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2961
2421
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2962 #define PROPERTY_LIST_LOOP_3(key, value, plist) \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2963 Lisp_Object key, value, tail_##key; \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2964 PRIVATE_PROPERTY_LIST_LOOP_4 (tail_##key, key, value, plist)
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2965
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2966 #define GC_PROPERTY_LIST_LOOP_3(key, value, plist) \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2967 do { \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2968 XGCDECL3 (key); \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2969 Lisp_Object key, value, tail_##key; \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2970 XGCPRO3 (key, key, value, tail_##key); \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2971 PRIVATE_PROPERTY_LIST_LOOP_4 (tail_##key, key, value, plist)
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2972
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2973 #define END_GC_PROPERTY_LIST_LOOP(key) \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2974 XUNGCPRO (key); \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2975 } \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2976 while (0)
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2977
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2978 /* Return 1 if LIST is properly acyclic and nil-terminated, else 0. */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2979 DECLARE_INLINE_HEADER (
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2980 int
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2981 TRUE_LIST_P (Lisp_Object object)
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2982 )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2983 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2984 Lisp_Object hare, tortoise;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2985 EMACS_INT len;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2986
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2987 for (hare = tortoise = object, len = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2988 CONSP (hare);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2989 hare = XCDR (hare), len++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2990 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2991 if (len < CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2992 continue;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2993
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2994 if (len & 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2995 tortoise = XCDR (tortoise);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2996 else if (EQ (hare, tortoise))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2997 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2998 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2999
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3000 return NILP (hare);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3001 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3002
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3003 /* Signal an error if LIST is not properly acyclic and nil-terminated. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3004 #define CHECK_TRUE_LIST(list) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3005 Lisp_Object CTL_list = (list); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3006 Lisp_Object CTL_hare, CTL_tortoise; \
436
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
3007 EMACS_INT CTL_len; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3008 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3009 for (CTL_hare = CTL_tortoise = CTL_list, CTL_len = 0; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3010 CONSP (CTL_hare); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3011 CTL_hare = XCDR (CTL_hare), CTL_len++) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3012 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3013 if (CTL_len < CIRCULAR_LIST_SUSPICION_LENGTH) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3014 continue; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3015 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3016 if (CTL_len & 1) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3017 CTL_tortoise = XCDR (CTL_tortoise); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3018 else if (EQ (CTL_hare, CTL_tortoise)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3019 Fsignal (Qcircular_list, list1 (CTL_list)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3020 } \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3021 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3022 if (! NILP (CTL_hare)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3023 signal_malformed_list_error (CTL_list); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3024 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3025
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3026 /*------------------------------ string --------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3027
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3028 #ifdef NEW_GC
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3029 struct Lisp_String_Direct_Data
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3030 {
5127
a9c41067dd88 more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents: 5126
diff changeset
3031 NORMAL_LISP_OBJECT_HEADER header;
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3032 Bytecount size;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3033 Ibyte data[1];
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3034 };
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3035 typedef struct Lisp_String_Direct_Data Lisp_String_Direct_Data;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3036
5120
d1247f3cc363 latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
3037 DECLARE_MODULE_API_LISP_OBJECT (string_direct_data, Lisp_String_Direct_Data);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3038 #define XSTRING_DIRECT_DATA(x) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3039 XRECORD (x, string_direct_data, Lisp_String_Direct_Data)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3040 #define wrap_string_direct_data(p) wrap_record (p, string_direct_data)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3041 #define STRING_DIRECT_DATAP(x) RECORDP (x, string_direct_data)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3042 #define CHECK_STRING_DIRECT_DATA(x) CHECK_RECORD (x, string_direct_data)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3043 #define CONCHECK_STRING_DIRECT_DATA(x) CONCHECK_RECORD (x, string_direct_data)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3044
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3045 #define XSTRING_DIRECT_DATA_SIZE(x) XSTRING_DIRECT_DATA (x)->size
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3046 #define XSTRING_DIRECT_DATA_DATA(x) XSTRING_DIRECT_DATA (x)->data
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3047
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3048
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3049 struct Lisp_String_Indirect_Data
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3050 {
5127
a9c41067dd88 more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents: 5126
diff changeset
3051 NORMAL_LISP_OBJECT_HEADER header;
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3052 Bytecount size;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3053 Ibyte *data;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3054 };
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3055 typedef struct Lisp_String_Indirect_Data Lisp_String_Indirect_Data;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3056
5120
d1247f3cc363 latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
3057 DECLARE_MODULE_API_LISP_OBJECT (string_indirect_data, Lisp_String_Indirect_Data);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3058 #define XSTRING_INDIRECT_DATA(x) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3059 XRECORD (x, string_indirect_data, Lisp_String_Indirect_Data)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3060 #define wrap_string_indirect_data(p) wrap_record (p, string_indirect_data)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3061 #define STRING_INDIRECT_DATAP(x) RECORDP (x, string_indirect_data)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3062 #define CHECK_STRING_INDIRECT_DATA(x) CHECK_RECORD (x, string_indirect_data)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3063 #define CONCHECK_STRING_INDIRECT_DATA(x) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3064 CONCHECK_RECORD (x, string_indirect_data)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3065
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3066 #define XSTRING_INDIRECT_DATA_SIZE(x) XSTRING_INDIRECT_DATA (x)->size
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3067 #define XSTRING_INDIRECT_DATA_DATA(x) XSTRING_INDIRECT_DATA (x)->data
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3068
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3069
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3070 #define XSTRING_DATA_SIZE(s) ((s)->indirect)? \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3071 XSTRING_INDIRECT_DATA_SIZE ((s)->data_object): \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3072 XSTRING_DIRECT_DATA_SIZE ((s)->data_object)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3073 #define XSTRING_DATA_DATA(s) ((s)->indirect)? \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3074 XSTRING_INDIRECT_DATA_DATA ((s)->data_object): \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3075 XSTRING_DIRECT_DATA_DATA ((s)->data_object)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3076
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3077 #define XSET_STRING_DATA_SIZE(s, len) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3078 if ((s)->indirect) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3079 XSTRING_INDIRECT_DATA_SIZE ((s)->data_object) = len; \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3080 else \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3081 XSTRING_DIRECT_DATA_SIZE ((s)->data_object) = len
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3082 #define XSET_STRING_DATA_DATA(s, ptr) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3083 if ((s)->indirect) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3084 XSTRING_INDIRECT_DATA_DATA ((s)->data_object) = ptr; \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3085 else \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3086 XSTRING_DIRECT_DATA_DATA ((s)->data_object) = ptr
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3087 #endif /* NEW_GC */
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3088
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3089 struct Lisp_String
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3090 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3091 union
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3092 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3093 struct lrecord_header lheader;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3094 struct
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3095 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3096 /* WARNING: Everything before ascii_begin must agree exactly with
5142
f965e31a35f0 reduce lcrecord headers to 2 words, rename printing_unreadable_object
Ben Wing <ben@xemacs.org>
parents: 5128
diff changeset
3097 struct lrecord_header. (Actually, the `free' field in old-GC
f965e31a35f0 reduce lcrecord headers to 2 words, rename printing_unreadable_object
Ben Wing <ben@xemacs.org>
parents: 5128
diff changeset
3098 overlaps with ascii_begin there; we can get away with this
f965e31a35f0 reduce lcrecord headers to 2 words, rename printing_unreadable_object
Ben Wing <ben@xemacs.org>
parents: 5128
diff changeset
3099 because in old-GC the `free' field is used only for lcrecords. */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3100 unsigned int type :8;
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
3101 #ifdef NEW_GC
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3102 unsigned int lisp_readonly :1;
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3103 unsigned int free :1;
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3104 /* Number of chars at beginning of string that are one byte in length
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3105 (byte_ascii_p) */
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3106 unsigned int ascii_begin :22;
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
3107 #else /* not NEW_GC */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3108 unsigned int mark :1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3109 unsigned int c_readonly :1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3110 unsigned int lisp_readonly :1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3111 /* Number of chars at beginning of string that are one byte in length
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3112 (byte_ascii_p) */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3113 unsigned int ascii_begin :21;
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
3114 #endif /* not NEW_GC */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3115 } v;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3116 } u;
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3117 #ifdef NEW_GC
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3118 int indirect;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3119 Lisp_Object data_object;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3120 #else /* not NEW_GC */
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3121 Bytecount size_;
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3122 Ibyte *data_;
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3123 #endif /* not NEW_GC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3124 Lisp_Object plist;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3125 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3126 typedef struct Lisp_String Lisp_String;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3127
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
3128 #ifdef NEW_GC
3063
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3129 #define MAX_STRING_ASCII_BEGIN ((1 << 22) - 1)
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
3130 #else /* not NEW_GC */
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
3131 #define MAX_STRING_ASCII_BEGIN ((1 << 21) - 1)
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
3132 #endif /* not NEW_GC */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3133
5120
d1247f3cc363 latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
3134 DECLARE_MODULE_API_LISP_OBJECT (string, Lisp_String);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3135 #define XSTRING(x) XRECORD (x, string, Lisp_String)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
3136 #define wrap_string(p) wrap_record (p, string)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3137 #define STRINGP(x) RECORDP (x, string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3138 #define CHECK_STRING(x) CHECK_RECORD (x, string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3139 #define CONCHECK_STRING(x) CONCHECK_RECORD (x, string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3140
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3141 /* Most basic macros for strings -- basically just accessing or setting
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3142 fields -- are here. Everything else is in text.h, since they depend on
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3143 stuff there. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3144
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3145 /* Operations on Lisp_String *'s; only ones left */
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3146 #ifdef NEW_GC
3304
73051095a712 [xemacs-hg @ 2006-03-26 14:33:37 by crestani]
crestani
parents: 3293
diff changeset
3147 #define set_lispstringp_direct(s) ((s)->indirect = 0)
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3148 #define set_lispstringp_indirect(s) ((s)->indirect = 1)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3149 #define set_lispstringp_length(s, len) XSET_STRING_DATA_SIZE (s, len)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3150 #define set_lispstringp_data(s, ptr) XSET_STRING_DATA_DATA (s, ptr)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3151 #else /* not NEW_GC */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3152 #define set_lispstringp_length(s, len) ((void) ((s)->size_ = (len)))
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3153 #define set_lispstringp_data(s, ptr) ((void) ((s)->data_ = (ptr)))
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3154 #endif /* not NEW_GC */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3155
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3156 /* Operations on strings as Lisp_Objects. Don't manipulate Lisp_String *'s
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3157 in any new code. */
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3158 #ifdef NEW_GC
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3159 #define STRING_DATA_OBJECT(s) ((s)->data_object)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3160 #define XSTRING_DATA_OBJECT(s) (STRING_DATA_OBJECT (XSTRING (s)))
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3161 #define XSTRING_LENGTH(s) (XSTRING_DATA_SIZE (XSTRING (s)))
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3162 #else /* not NEW_GC */
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3163 #define XSTRING_LENGTH(s) (XSTRING (s)->size_)
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3164 #endif /* not NEW_GC */
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3165 #define XSTRING_PLIST(s) (XSTRING (s)->plist)
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3166 #ifdef NEW_GC
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3167 #define XSTRING_DATA(s) (XSTRING_DATA_DATA (XSTRING (s)))
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3168 #else /* not NEW_GC */
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3169 #define XSTRING_DATA(s) (XSTRING (s)->data_ + 0)
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3170 #endif /* not NEW_GC */
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3171 #define XSTRING_ASCII_BEGIN(s) (XSTRING (s)->u.v.ascii_begin + 0)
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3172 #define XSET_STRING_LENGTH(s, ptr) set_lispstringp_length (XSTRING (s), ptr)
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3173 #define XSET_STRING_DATA(s, ptr) set_lispstringp_data (XSTRING (s), ptr)
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3174 /* WARNING: If you modify an existing string, you must call
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3175 bump_string_modiff() afterwards. */
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3176 #define XSET_STRING_ASCII_BEGIN(s, val) \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3177 ((void) (XSTRING (s)->u.v.ascii_begin = (val)))
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3178 #define XSTRING_FORMAT(s) FORMAT_DEFAULT
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3179
456
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3180 /* Return the true aligned size of a struct whose last member is a
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3181 variable-length array field. (this is known as the "struct hack") */
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3182 /* Implementation: in practice, structtype and fieldtype usually have
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3183 the same alignment, but we can't be sure. We need to use
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3184 ALIGN_SIZE to be absolutely sure of getting the correct alignment.
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3185 To help the compiler's optimizer, we use a ternary expression that
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3186 only a very stupid compiler would fail to correctly simplify. */
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3187 #define FLEXIBLE_ARRAY_STRUCT_SIZEOF(structtype, \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3188 fieldtype, \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3189 fieldname, \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3190 array_length) \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3191 (ALIGNOF (structtype) == ALIGNOF (fieldtype) \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3192 ? (offsetof (structtype, fieldname) + \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3193 (offsetof (structtype, fieldname[1]) - \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3194 offsetof (structtype, fieldname[0])) * \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3195 (array_length)) \
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3196 : (ALIGN_FOR_TYPE \
456
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3197 ((offsetof (structtype, fieldname) + \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3198 (offsetof (structtype, fieldname[1]) - \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3199 offsetof (structtype, fieldname[0])) * \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3200 (array_length)), \
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3201 structtype)))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3202
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3203 /*------------------------------ vector --------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3204
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3205 struct Lisp_Vector
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3206 {
5127
a9c41067dd88 more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents: 5126
diff changeset
3207 NORMAL_LISP_OBJECT_HEADER header;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3208 long size;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3209 Lisp_Object contents[1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3210 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3211 typedef struct Lisp_Vector Lisp_Vector;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3212
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 5117 4744
diff changeset
3213 DECLARE_LISP_OBJECT (vector, Lisp_Vector);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3214 #define XVECTOR(x) XRECORD (x, vector, Lisp_Vector)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
3215 #define wrap_vector(p) wrap_record (p, vector)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3216 #define VECTORP(x) RECORDP (x, vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3217 #define CHECK_VECTOR(x) CHECK_RECORD (x, vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3218 #define CONCHECK_VECTOR(x) CONCHECK_RECORD (x, vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3219
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3220 #define vector_length(v) ((v)->size)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3221 #define XVECTOR_LENGTH(s) vector_length (XVECTOR (s))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3222 #define vector_data(v) ((v)->contents)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3223 #define XVECTOR_DATA(s) vector_data (XVECTOR (s))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3224
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3225 /*---------------------------- bit vectors -----------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3226
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3227 #if (LONGBITS < 16)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3228 #error What the hell?!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3229 #elif (LONGBITS < 32)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3230 # define LONGBITS_LOG2 4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3231 # define LONGBITS_POWER_OF_2 16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3232 #elif (LONGBITS < 64)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3233 # define LONGBITS_LOG2 5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3234 # define LONGBITS_POWER_OF_2 32
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3235 #elif (LONGBITS < 128)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3236 # define LONGBITS_LOG2 6
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3237 # define LONGBITS_POWER_OF_2 64
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3238 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3239 #error You really have 128-bit integers?!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3240 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3241
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3242 struct Lisp_Bit_Vector
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3243 {
5127
a9c41067dd88 more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents: 5126
diff changeset
3244 NORMAL_LISP_OBJECT_HEADER lheader;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3245 Elemcount size;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3246 unsigned long bits[1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3247 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3248 typedef struct Lisp_Bit_Vector Lisp_Bit_Vector;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3249
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 5117 4744
diff changeset
3250 DECLARE_LISP_OBJECT (bit_vector, Lisp_Bit_Vector);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3251 #define XBIT_VECTOR(x) XRECORD (x, bit_vector, Lisp_Bit_Vector)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
3252 #define wrap_bit_vector(p) wrap_record (p, bit_vector)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3253 #define BIT_VECTORP(x) RECORDP (x, bit_vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3254 #define CHECK_BIT_VECTOR(x) CHECK_RECORD (x, bit_vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3255 #define CONCHECK_BIT_VECTOR(x) CONCHECK_RECORD (x, bit_vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3256
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3257 #define BITP(x) (INTP (x) && (XINT (x) == 0 || XINT (x) == 1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3258
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3259 #define CHECK_BIT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3260 if (!BITP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3261 dead_wrong_type_argument (Qbitp, x);\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3262 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3263
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3264 #define CONCHECK_BIT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3265 if (!BITP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3266 x = wrong_type_argument (Qbitp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3267 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3268
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3269 #define bit_vector_length(v) ((v)->size)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3270
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3271 DECLARE_INLINE_HEADER (
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3272 int
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3273 bit_vector_bit (Lisp_Bit_Vector *v, Elemcount n)
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3274 )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3275 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3276 return ((v->bits[n >> LONGBITS_LOG2] >> (n & (LONGBITS_POWER_OF_2 - 1)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3277 & 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3278 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3279
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3280 DECLARE_INLINE_HEADER (
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3281 void
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3282 set_bit_vector_bit (Lisp_Bit_Vector *v, Elemcount n, int value)
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3283 )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3284 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3285 if (value)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3286 v->bits[n >> LONGBITS_LOG2] |= (1UL << (n & (LONGBITS_POWER_OF_2 - 1)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3287 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3288 v->bits[n >> LONGBITS_LOG2] &= ~(1UL << (n & (LONGBITS_POWER_OF_2 - 1)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3289 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3290
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3291 /* Number of longs required to hold LEN bits */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3292 #define BIT_VECTOR_LONG_STORAGE(len) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3293 (((len) + LONGBITS_POWER_OF_2 - 1) >> LONGBITS_LOG2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3294
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3498
diff changeset
3295 /* For when we want to include a bit vector in another structure, and we
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3498
diff changeset
3296 know it's of a fixed size. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3498
diff changeset
3297 #define DECLARE_INLINE_LISP_BIT_VECTOR(numbits) struct { \
5127
a9c41067dd88 more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents: 5126
diff changeset
3298 NORMAL_LISP_OBJECT_HEADER lheader; \
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3498
diff changeset
3299 Elemcount size; \
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3498
diff changeset
3300 unsigned long bits[BIT_VECTOR_LONG_STORAGE(numbits)]; \
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3498
diff changeset
3301 }
4995
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3302 /*---------------------- array, sequence -----------------------------*/
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3303
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3304 #define ARRAYP(x) (VECTORP (x) || STRINGP (x) || BIT_VECTORP (x))
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3305
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3306 #define CHECK_ARRAY(x) do { \
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3307 if (!ARRAYP (x)) \
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3308 dead_wrong_type_argument (Qarrayp, x); \
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3309 } while (0)
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3310
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3311 #define CONCHECK_ARRAY(x) do { \
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3312 if (!ARRAYP (x)) \
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3313 x = wrong_type_argument (Qarrayp, x); \
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3314 } while (0)
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3315
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3316 #define SEQUENCEP(x) (LISTP (x) || ARRAYP (x))
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3317
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3318 #define CHECK_SEQUENCE(x) do { \
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3319 if (!SEQUENCEP (x)) \
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3320 dead_wrong_type_argument (Qsequencep, x); \
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3321 } while (0)
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3322
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3323 #define CONCHECK_SEQUENCE(x) do { \
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3324 if (!SEQUENCEP (x)) \
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3325 x = wrong_type_argument (Qsequencep, x); \
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3326 } while (0)
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3327
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3328 /*------------------------------ symbol --------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3329
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3330 typedef struct Lisp_Symbol Lisp_Symbol;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3331 struct Lisp_Symbol
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3332 {
5124
623d57b7fbe8 separate regular and disksave finalization, print method fixes.
Ben Wing <ben@xemacs.org>
parents: 5120
diff changeset
3333 FROB_BLOCK_LISP_OBJECT_HEADER lheader;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3334 /* next symbol in this obarray bucket */
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3335 Lisp_Symbol *next;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3336 Lisp_Object name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3337 Lisp_Object value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3338 Lisp_Object function;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3339 Lisp_Object plist;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3340 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3341
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3342 #define SYMBOL_IS_KEYWORD(sym) \
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3343 ((string_byte (symbol_name (XSYMBOL (sym)), 0) == ':') \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3344 && EQ (sym, oblookup (Vobarray, \
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3345 XSTRING_DATA (symbol_name (XSYMBOL (sym))), \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3346 XSTRING_LENGTH (symbol_name (XSYMBOL (sym))))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3347 #define KEYWORDP(obj) (SYMBOLP (obj) && SYMBOL_IS_KEYWORD (obj))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3348
5120
d1247f3cc363 latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
3349 DECLARE_MODULE_API_LISP_OBJECT (symbol, Lisp_Symbol);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3350 #define XSYMBOL(x) XRECORD (x, symbol, Lisp_Symbol)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
3351 #define wrap_symbol(p) wrap_record (p, symbol)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3352 #define SYMBOLP(x) RECORDP (x, symbol)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3353 #define CHECK_SYMBOL(x) CHECK_RECORD (x, symbol)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3354 #define CONCHECK_SYMBOL(x) CONCHECK_RECORD (x, symbol)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3355
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3356 #define symbol_next(s) ((s)->next)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3357 #define symbol_name(s) ((s)->name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3358 #define symbol_value(s) ((s)->value)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3359 #define symbol_function(s) ((s)->function)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3360 #define symbol_plist(s) ((s)->plist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3361
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3362 #define XSYMBOL_NEXT(s) (XSYMBOL (s)->next)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3363 #define XSYMBOL_NAME(s) (XSYMBOL (s)->name)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3364 #define XSYMBOL_VALUE(s) (XSYMBOL (s)->value)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3365 #define XSYMBOL_FUNCTION(s) (XSYMBOL (s)->function)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3366 #define XSYMBOL_PLIST(s) (XSYMBOL (s)->plist)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3367
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3368
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3369 /*------------------------------- subr ---------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3370
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3371 /* A function that takes no arguments and returns a Lisp_Object.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3372 We could define such types for n arguments, if needed. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3373 typedef Lisp_Object (*lisp_fn_t) (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3374
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3375 struct Lisp_Subr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3376 {
5120
d1247f3cc363 latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
3377 FROB_BLOCK_LISP_OBJECT_HEADER lheader;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3378 short min_args;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3379 short max_args;
3379
b544987e2eca [xemacs-hg @ 2006-05-06 08:09:35 by aidan]
aidan
parents: 3319
diff changeset
3380 /* #### We should make these const Ascbyte * or const Ibyte *, not const
b544987e2eca [xemacs-hg @ 2006-05-06 08:09:35 by aidan]
aidan
parents: 3319
diff changeset
3381 char *. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3382 const char *prompt;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3383 const char *doc;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3384 const char *name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3385 lisp_fn_t subr_fn;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3386 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3387 typedef struct Lisp_Subr Lisp_Subr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3388
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 5117 4744
diff changeset
3389 DECLARE_LISP_OBJECT (subr, Lisp_Subr);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3390 #define XSUBR(x) XRECORD (x, subr, Lisp_Subr)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
3391 #define wrap_subr(p) wrap_record (p, subr)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3392 #define SUBRP(x) RECORDP (x, subr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3393 #define CHECK_SUBR(x) CHECK_RECORD (x, subr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3394 #define CONCHECK_SUBR(x) CONCHECK_RECORD (x, subr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3395
436
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
3396 #define subr_function(subr) ((subr)->subr_fn)
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
3397 #define SUBR_FUNCTION(subr,max_args) \
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
3398 ((Lisp_Object (*) (EXFUN_##max_args)) (subr)->subr_fn)
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
3399 #define subr_name(subr) ((subr)->name)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3400
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3401 /*------------------------------ marker --------------------------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3402
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3403
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3404 typedef struct Lisp_Marker Lisp_Marker;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3405 struct Lisp_Marker
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3406 {
5120
d1247f3cc363 latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
3407 FROB_BLOCK_LISP_OBJECT_HEADER lheader;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3408 Lisp_Marker *next;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3409 Lisp_Marker *prev;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3410 struct buffer *buffer;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3411 Membpos membpos;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3412 char insertion_type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3413 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3414
5120
d1247f3cc363 latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
3415 DECLARE_MODULE_API_LISP_OBJECT (marker, Lisp_Marker);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3416 #define XMARKER(x) XRECORD (x, marker, Lisp_Marker)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
3417 #define wrap_marker(p) wrap_record (p, marker)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3418 #define MARKERP(x) RECORDP (x, marker)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3419 #define CHECK_MARKER(x) CHECK_RECORD (x, marker)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3420 #define CONCHECK_MARKER(x) CONCHECK_RECORD (x, marker)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3421
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3422 /* The second check was looking for GCed markers still in use */
5050
6f2158fa75ed Fix quick-build, use asserts() in place of ABORT()
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
3423 /* assert (!INTP (XMARKER (x)->lheader.next.v)); */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3424
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3425 #define marker_next(m) ((m)->next)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3426 #define marker_prev(m) ((m)->prev)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3427
3063
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3428 /*-------------------basic int (no connection to char)------------------*/
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3429
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3430 #define ZEROP(x) EQ (x, Qzero)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3431
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
3432 #ifdef ERROR_CHECK_TYPES
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3433
3063
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3434 #define XINT(x) XINT_1 (x, __FILE__, __LINE__)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3435
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3436 DECLARE_INLINE_HEADER (
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3437 EMACS_INT
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3438 XINT_1 (Lisp_Object obj, const Ascbyte *file, int line)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3439 )
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3440 {
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3441 assert_at_line (INTP (obj), file, line);
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3442 return XREALINT (obj);
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3443 }
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3444
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
3445 #else /* not ERROR_CHECK_TYPES */
3063
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3446
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3447 #define XINT(obj) XREALINT (obj)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3448
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
3449 #endif /* (not) ERROR_CHECK_TYPES */
3063
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3450
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3451 #define CHECK_INT(x) do { \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3452 if (!INTP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3453 dead_wrong_type_argument (Qintegerp, x); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3454 } while (0)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3455
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3456 #define CONCHECK_INT(x) do { \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3457 if (!INTP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3458 x = wrong_type_argument (Qintegerp, x); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3459 } while (0)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3460
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
3461 /* NOTE NOTE NOTE! This definition of "natural number" is mathematically
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
3462 wrong. Mathematically, a natural number is a positive integer; 0
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
3463 isn't included. This would be better called NONNEGINT(). */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
3464
3063
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3465 #define NATNUMP(x) (INTP (x) && XINT (x) >= 0)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3466
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3467 #define CHECK_NATNUM(x) do { \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3468 if (!NATNUMP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3469 dead_wrong_type_argument (Qnatnump, x); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3470 } while (0)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3471
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3472 #define CONCHECK_NATNUM(x) do { \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3473 if (!NATNUMP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3474 x = wrong_type_argument (Qnatnump, x); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3475 } while (0)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3476
5092
3aa3888729c3 move inclusion point of text.h to clean things up a bit
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
3477 END_C_DECLS
3aa3888729c3 move inclusion point of text.h to clean things up a bit
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
3478
3aa3888729c3 move inclusion point of text.h to clean things up a bit
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
3479 /* -------------- properties of internally-formatted text ------------- */
3aa3888729c3 move inclusion point of text.h to clean things up a bit
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
3480
3aa3888729c3 move inclusion point of text.h to clean things up a bit
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
3481 #include "text.h"
3aa3888729c3 move inclusion point of text.h to clean things up a bit
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
3482
3063
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3483 /*------------------------------- char ---------------------------------*/
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3484
5092
3aa3888729c3 move inclusion point of text.h to clean things up a bit
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
3485 BEGIN_C_DECLS
3aa3888729c3 move inclusion point of text.h to clean things up a bit
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
3486
3aa3888729c3 move inclusion point of text.h to clean things up a bit
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
3487 #ifdef ERROR_CHECK_TYPES
3aa3888729c3 move inclusion point of text.h to clean things up a bit
Ben Wing <ben@xemacs.org>
parents: 5077
diff changeset
3488
3063
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3489 /* NOTE: There are basic functions for converting between a character and
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3490 the string representation of a character in text.h, as well as lots of
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3491 other character-related stuff. There are other functions/macros for
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3492 working with Ichars in charset.h, for retrieving the charset of an
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3493 Ichar, the length of an Ichar when converted to text, etc.
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3494 */
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3495
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3496 DECLARE_INLINE_HEADER (
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3497 int
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3498 CHARP_1 (Lisp_Object obj, const Ascbyte *file, int line)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3499 )
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3500 {
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3501 if (XTYPE (obj) != Lisp_Type_Char)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3502 return 0;
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3503 assert_at_line (valid_ichar_p (XCHARVAL (obj)), file, line);
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3504 return 1;
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3505 }
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3506
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3507 #define CHARP(x) CHARP_1 (x, __FILE__, __LINE__)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3508
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3509 DECLARE_INLINE_HEADER (
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3510 Ichar
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3511 XCHAR_1 (Lisp_Object obj, const Ascbyte *file, int line)
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3512 )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3513 {
3063
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3514 Ichar ch;
788
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
3515 assert_at_line (CHARP (obj), file, line);
3063
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3516 ch = XCHARVAL (obj);
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3517 assert_at_line (valid_ichar_p (ch), file, line);
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3518 return ch;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3519 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3520
788
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
3521 #define XCHAR(x) XCHAR_1 (x, __FILE__, __LINE__)
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
3522
3063
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3523 #else /* not ERROR_CHECK_TYPES */
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3524
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3525 #define CHARP(x) (XTYPE (x) == Lisp_Type_Char)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3526 #define XCHAR(x) ((Ichar) XCHARVAL (x))
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3527
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3528 #endif /* (else) not ERROR_CHECK_TYPES */
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3529
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3530 #define CONCHECK_CHAR(x) do { \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3531 if (!CHARP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3532 x = wrong_type_argument (Qcharacterp, x); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3533 } while (0)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3534
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3535 #define CHECK_CHAR(x) do { \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3536 if (!CHARP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3537 dead_wrong_type_argument (Qcharacterp, x); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3538 } while (0)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3539
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3540
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3541 DECLARE_INLINE_HEADER (
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3542 Lisp_Object
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3543 make_char (Ichar val)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3544 )
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3545 {
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3546 type_checking_assert (valid_ichar_p (val));
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3547 /* This is defined in lisp-union.h or lisp-disunion.h */
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3548 return make_char_1 (val);
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3549 }
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3550
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3551 /*------------------------- int-char connection ------------------------*/
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3552
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3553 #ifdef ERROR_CHECK_TYPES
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3554
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3555 #define XCHAR_OR_INT(x) XCHAR_OR_INT_1 (x, __FILE__, __LINE__)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3556
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3557 DECLARE_INLINE_HEADER (
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3558 EMACS_INT
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3559 XCHAR_OR_INT_1 (Lisp_Object obj, const Ascbyte *file, int line)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3560 )
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3561 {
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3562 assert_at_line (INTP (obj) || CHARP (obj), file, line);
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3563 return CHARP (obj) ? XCHAR (obj) : XINT (obj);
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3564 }
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3565
788
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
3566 #else /* no error checking */
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
3567
4134
ac5a714be3a2 [xemacs-hg @ 2007-08-21 20:32:33 by aidan]
aidan
parents: 4123
diff changeset
3568 /* obj is multiply eval'ed and not an lvalue; use an inline function instead
ac5a714be3a2 [xemacs-hg @ 2007-08-21 20:32:33 by aidan]
aidan
parents: 4123
diff changeset
3569 of a macro. */
ac5a714be3a2 [xemacs-hg @ 2007-08-21 20:32:33 by aidan]
aidan
parents: 4123
diff changeset
3570 DECLARE_INLINE_HEADER (
ac5a714be3a2 [xemacs-hg @ 2007-08-21 20:32:33 by aidan]
aidan
parents: 4123
diff changeset
3571 EMACS_INT
ac5a714be3a2 [xemacs-hg @ 2007-08-21 20:32:33 by aidan]
aidan
parents: 4123
diff changeset
3572 XCHAR_OR_INT (Lisp_Object obj)
ac5a714be3a2 [xemacs-hg @ 2007-08-21 20:32:33 by aidan]
aidan
parents: 4123
diff changeset
3573 )
ac5a714be3a2 [xemacs-hg @ 2007-08-21 20:32:33 by aidan]
aidan
parents: 4123
diff changeset
3574 {
ac5a714be3a2 [xemacs-hg @ 2007-08-21 20:32:33 by aidan]
aidan
parents: 4123
diff changeset
3575 return CHARP (obj) ? XCHAR (obj) : XINT (obj);
ac5a714be3a2 [xemacs-hg @ 2007-08-21 20:32:33 by aidan]
aidan
parents: 4123
diff changeset
3576 }
788
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
3577
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
3578 #endif /* no error checking */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3579
3063
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3580 /* True of X is an integer whose value is the valid integral equivalent of a
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3581 character. */
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3582
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3583 #define CHAR_INTP(x) (INTP (x) && valid_ichar_p (XINT (x)))
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3584
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3585 /* True of X is a character or an integral value that can be converted into a
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3586 character. */
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3587 #define CHAR_OR_CHAR_INTP(x) (CHARP (x) || CHAR_INTP (x))
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3588
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3589 DECLARE_INLINE_HEADER (
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3590 Ichar
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3591 XCHAR_OR_CHAR_INT (Lisp_Object obj)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3592 )
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3593 {
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3594 return CHARP (obj) ? XCHAR (obj) : XINT (obj);
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3595 }
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3596
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3597 /* Signal an error if CH is not a valid character or integer Lisp_Object.
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3598 If CH is an integer Lisp_Object, convert it to a character Lisp_Object,
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3599 but merely by repackaging, without performing tests for char validity.
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3600 */
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3601
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3602 #define CHECK_CHAR_COERCE_INT(x) do { \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3603 if (CHARP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3604 ; \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3605 else if (CHAR_INTP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3606 x = make_char (XINT (x)); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3607 else \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3608 x = wrong_type_argument (Qcharacterp, x); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3609 } while (0)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3610
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3611 /* next three always continuable because they coerce their arguments. */
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3612 #define CHECK_INT_COERCE_CHAR(x) do { \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3613 if (INTP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3614 ; \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3615 else if (CHARP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3616 x = make_int (XCHAR (x)); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3617 else \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3618 x = wrong_type_argument (Qinteger_or_char_p, x); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3619 } while (0)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3620
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3621 #define CHECK_INT_COERCE_MARKER(x) do { \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3622 if (INTP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3623 ; \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3624 else if (MARKERP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3625 x = make_int (marker_position (x)); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3626 else \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3627 x = wrong_type_argument (Qinteger_or_marker_p, x); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3628 } while (0)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3629
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3630 #define CHECK_INT_COERCE_CHAR_OR_MARKER(x) do { \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3631 if (INTP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3632 ; \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3633 else if (CHARP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3634 x = make_int (XCHAR (x)); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3635 else if (MARKERP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3636 x = make_int (marker_position (x)); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3637 else \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3638 x = wrong_type_argument (Qinteger_char_or_marker_p, x); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3639 } while (0)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3640
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3641 /*------------------------------ float ---------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3642
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3643 /* Note: the 'unused_next_' field exists only to ensure that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3644 `next' pointer fits within the structure, for the purposes of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3645 free list. This makes a difference in the unlikely case of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3646 sizeof(double) being smaller than sizeof(void *). */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3647
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3648 struct Lisp_Float
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3649 {
5120
d1247f3cc363 latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
3650 FROB_BLOCK_LISP_OBJECT_HEADER lheader;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3651 union { double d; struct Lisp_Float *unused_next_; } data;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3652 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3653 typedef struct Lisp_Float Lisp_Float;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3654
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 5117 4744
diff changeset
3655 DECLARE_LISP_OBJECT (float, Lisp_Float);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3656 #define XFLOAT(x) XRECORD (x, float, Lisp_Float)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
3657 #define wrap_float(p) wrap_record (p, float)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3658 #define FLOATP(x) RECORDP (x, float)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3659 #define CHECK_FLOAT(x) CHECK_RECORD (x, float)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3660 #define CONCHECK_FLOAT(x) CONCHECK_RECORD (x, float)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3661
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3662 #define float_data(f) ((f)->data.d)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3663 #define XFLOAT_DATA(x) float_data (XFLOAT (x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3664
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3665 #define XFLOATINT(n) extract_float (n)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3666
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3667 #define CHECK_INT_OR_FLOAT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3668 if (!INT_OR_FLOATP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3669 dead_wrong_type_argument (Qnumberp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3670 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3671
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3672 #define CONCHECK_INT_OR_FLOAT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3673 if (!INT_OR_FLOATP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3674 x = wrong_type_argument (Qnumberp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3675 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3676
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3677 # define INT_OR_FLOATP(x) (INTP (x) || FLOATP (x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3678
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3679 /*--------------------------- readonly objects -------------------------*/
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3680
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
3681 #ifndef NEW_GC
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3682 #define CHECK_C_WRITEABLE(obj) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3683 do { if (c_readonly (obj)) c_write_error (obj); } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3684
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3685 #define C_READONLY(obj) (C_READONLY_RECORD_HEADER_P(XRECORD_LHEADER (obj)))
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
3686 #endif /* not NEW_GC */
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3687
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3688 #define CHECK_LISP_WRITEABLE(obj) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3689 do { if (lisp_readonly (obj)) lisp_write_error (obj); } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3690
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3691 #define LISP_READONLY(obj) (LISP_READONLY_RECORD_HEADER_P(XRECORD_LHEADER (obj)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3692
980
2ec85ed291da [xemacs-hg @ 2002-08-30 08:05:30 by youngs]
youngs
parents: 970
diff changeset
3693 /*----------------------------- structures ----------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3694
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3695 typedef struct structure_keyword_entry structure_keyword_entry;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3696 struct structure_keyword_entry
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3697 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3698 Lisp_Object keyword;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3699 int (*validate) (Lisp_Object keyword, Lisp_Object value,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
3700 Error_Behavior errb);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3701 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3702
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3703 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3704 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3705 Dynarr_declare (structure_keyword_entry);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3706 } structure_keyword_entry_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3707
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3708 typedef struct structure_type structure_type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3709 struct structure_type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3710 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3711 Lisp_Object type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3712 structure_keyword_entry_dynarr *keywords;
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
3713 int (*validate) (Lisp_Object data, Error_Behavior errb);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3714 Lisp_Object (*instantiate) (Lisp_Object data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3715 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3716
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3717 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3718 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3719 Dynarr_declare (structure_type);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3720 } structure_type_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3721
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3722 struct structure_type *define_structure_type (Lisp_Object type,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3723 int (*validate)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3724 (Lisp_Object data,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
3725 Error_Behavior errb),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3726 Lisp_Object (*instantiate)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3727 (Lisp_Object data));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3728 void define_structure_type_keyword (struct structure_type *st,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3729 Lisp_Object keyword,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3730 int (*validate) (Lisp_Object keyword,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3731 Lisp_Object value,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
3732 Error_Behavior errb));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3733
858
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3734 /*---------------------------- weak boxes ------------------------------*/
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3735
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3736 struct weak_box
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3737 {
5127
a9c41067dd88 more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents: 5126
diff changeset
3738 NORMAL_LISP_OBJECT_HEADER header;
858
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3739 Lisp_Object value;
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3740
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3741 Lisp_Object next_weak_box; /* don't mark through this! */
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3742 };
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3743
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3744 void prune_weak_boxes (void);
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3745 Lisp_Object make_weak_box (Lisp_Object value);
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3746 Lisp_Object weak_box_ref (Lisp_Object value);
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3747
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 5117 4744
diff changeset
3748 DECLARE_LISP_OBJECT (weak_box, struct weak_box);
858
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3749 #define XWEAK_BOX(x) XRECORD (x, weak_box, struct weak_box)
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3750 #define XSET_WEAK_BOX(x, v) (XWEAK_BOX (x)->value = (v))
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3751 #define wrap_weak_box(p) wrap_record (p, weak_box)
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3752 #define WEAK_BOXP(x) RECORDP (x, weak_box)
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3753 #define CHECK_WEAK_BOX(x) CHECK_RECORD (x, weak_box)
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3754 #define CONCHECK_WEAK_BOX(x) CONCHECK_RECORD (x, weak_box)
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3755
888
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3756 /*--------------------------- ephemerons ----------------------------*/
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3757
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3758 struct ephemeron
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3759 {
5127
a9c41067dd88 more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents: 5126
diff changeset
3760 NORMAL_LISP_OBJECT_HEADER header;
888
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3761
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3762 Lisp_Object key;
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3763
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3764 /* This field holds a pair. The cdr of this cons points to the next
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3765 ephemeron in Vall_ephemerons. The car points to another pair
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3766 whose car is the value and whose cdr is the finalizer.
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3767
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3768 This representation makes it very easy to unlink an ephemeron
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3769 from Vall_ephemerons and chain it into
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3770 Vall_ephemerons_to_finalize. */
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3771
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3772 Lisp_Object cons_chain;
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3773
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3774 Lisp_Object value;
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3775 };
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3776
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3777 void prune_ephemerons (void);
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3778 Lisp_Object ephemeron_value(Lisp_Object ephi);
1590
03009473262a [xemacs-hg @ 2003-07-26 14:00:27 by michaels]
michaels
parents: 1467
diff changeset
3779 void init_marking_ephemerons(void);
03009473262a [xemacs-hg @ 2003-07-26 14:00:27 by michaels]
michaels
parents: 1467
diff changeset
3780 int continue_marking_ephemerons(void);
888
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3781 int finish_marking_ephemerons(void);
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3782 Lisp_Object zap_finalize_list(void);
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3783 Lisp_Object make_ephemeron(Lisp_Object key, Lisp_Object value, Lisp_Object finalizer);
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3784
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 5117 4744
diff changeset
3785 DECLARE_LISP_OBJECT(ephemeron, struct ephemeron);
888
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3786 #define XEPHEMERON(x) XRECORD (x, ephemeron, struct ephemeron)
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3787 #define XEPHEMERON_REF(x) (XEPHEMERON (x)->value)
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3788 #define XEPHEMERON_NEXT(x) (XCDR (XEPHEMERON(x)->cons_chain))
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3789 #define XEPHEMERON_FINALIZER(x) (XCDR (XCAR (XEPHEMERON (x)->cons_chain)))
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3790 #define XSET_EPHEMERON_NEXT(x, n) (XSETCDR (XEPHEMERON(x)->cons_chain, n))
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3791 #define XSET_EPHEMERON_VALUE(x, v) (XEPHEMERON(x)->value = (v))
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3792 #define XSET_EPHEMERON_KEY(x, k) (XEPHEMERON(x)->key = (k))
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3793 #define wrap_ephemeron(p) wrap_record (p, ephemeron)
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3794 #define EPHEMERONP(x) RECORDP (x, ephemeron)
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3795 #define CHECK_EPHEMERON(x) CHECK_RECORD (x, ephemeron)
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3796 #define CONCHECK_EPHEMERON(x) CONCHECK_RECORD (x, ephemeron)
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3797
858
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3798
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3799 /*---------------------------- weak lists ------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3800
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3801 enum weak_list_type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3802 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3803 /* element disappears if it's unmarked. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3804 WEAK_LIST_SIMPLE,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3805 /* element disappears if it's a cons and either its car or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3806 cdr is unmarked. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3807 WEAK_LIST_ASSOC,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3808 /* element disappears if it's a cons and its car is unmarked. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3809 WEAK_LIST_KEY_ASSOC,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3810 /* element disappears if it's a cons and its cdr is unmarked. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3811 WEAK_LIST_VALUE_ASSOC,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3812 /* element disappears if it's a cons and neither its car nor
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3813 its cdr is marked. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3814 WEAK_LIST_FULL_ASSOC
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3815 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3816
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3817 struct weak_list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3818 {
5127
a9c41067dd88 more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents: 5126
diff changeset
3819 NORMAL_LISP_OBJECT_HEADER header;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3820 Lisp_Object list; /* don't mark through this! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3821 enum weak_list_type type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3822 Lisp_Object next_weak; /* don't mark through this! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3823 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3824
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 5117 4744
diff changeset
3825 DECLARE_LISP_OBJECT (weak_list, struct weak_list);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3826 #define XWEAK_LIST(x) XRECORD (x, weak_list, struct weak_list)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
3827 #define wrap_weak_list(p) wrap_record (p, weak_list)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3828 #define WEAK_LISTP(x) RECORDP (x, weak_list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3829 #define CHECK_WEAK_LIST(x) CHECK_RECORD (x, weak_list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3830 #define CONCHECK_WEAK_LIST(x) CONCHECK_RECORD (x, weak_list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3831
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3832 #define weak_list_list(w) ((w)->list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3833 #define XWEAK_LIST_LIST(w) (XWEAK_LIST (w)->list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3834
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3835 Lisp_Object make_weak_list (enum weak_list_type type);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3836 /* The following two are only called by the garbage collector */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3837 int finish_marking_weak_lists (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3838 void prune_weak_lists (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3839
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
3840 END_C_DECLS
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3841
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3842 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3843 /* Definitions of primitive Lisp functions and variables */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3844 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3845
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3846
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3847 /* DEFUN - Define a built-in Lisp-visible C function or `subr'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3848 `lname' should be the name to give the function in Lisp,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3849 as a null-terminated C string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3850 `Fname' should be the C equivalent of `lname', using only characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3851 valid in a C identifier, with an "F" prepended.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3852 The name of the C constant structure that records information
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3853 on this function for internal use is "S" concatenated with Fname.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3854 `min_args' should be a number, the minimum number of arguments allowed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3855 `max_args' should be a number, the maximum number of arguments allowed,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3856 or else MANY or UNEVALLED.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3857 MANY means pass a vector of evaluated arguments,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3858 in the form of an integer number-of-arguments
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3859 followed by the address of a vector of Lisp_Objects
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3860 which contains the argument values.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3861 UNEVALLED means pass the list of unevaluated arguments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3862 `prompt' says how to read arguments for an interactive call.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3863 See the doc string for `interactive'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3864 A null string means call interactively with no arguments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3865 `arglist' are the comma-separated arguments (always Lisp_Objects) for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3866 the function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3867 The docstring for the function is placed as a "C" comment between
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3868 the prompt and the `args' argument. make-docfile reads the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3869 comment and creates the DOC file from it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3870 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3871
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3872 #define EXFUN_0 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3873 #define EXFUN_1 Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3874 #define EXFUN_2 Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3875 #define EXFUN_3 Lisp_Object,Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3876 #define EXFUN_4 Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3877 #define EXFUN_5 Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3878 #define EXFUN_6 Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3879 Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3880 #define EXFUN_7 Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3881 Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3882 #define EXFUN_8 Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3883 Lisp_Object,Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3884 #define EXFUN_MANY int, Lisp_Object*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3885 #define EXFUN_UNEVALLED Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3886 #define EXFUN(sym, max_args) Lisp_Object sym (EXFUN_##max_args)
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3887 #define EXFUN_NORETURN(sym, max_args) \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3888 DECLARE_DOESNT_RETURN_TYPE (Lisp_Object, sym (EXFUN_##max_args))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3889
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3890 #define SUBR_MAX_ARGS 8
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3891 #define MANY -2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3892 #define UNEVALLED -1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3893
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3894 /* Can't be const, because then subr->doc is read-only and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3895 Snarf_documentation chokes */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3896
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
3897 #ifdef NEW_GC
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3898 #define DEFUN(lname, Fname, min_args, max_args, prompt, arglist) \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3899 Lisp_Object Fname (EXFUN_##max_args); \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3900 static struct Lisp_Subr MC_ALLOC_S##Fname = \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3901 { \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3902 { /* struct lrecord_header */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3903 lrecord_type_subr, /* lrecord_type_index */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3904 1, /* lisp_readonly bit */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3905 0, /* free */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3906 0 /* uid */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3907 }, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3908 min_args, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3909 max_args, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3910 prompt, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3911 0, /* doc string */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3912 lname, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3913 (lisp_fn_t) Fname \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3914 }; \
2814
520c08f04735 [xemacs-hg @ 2005-06-16 19:59:33 by crestani]
crestani
parents: 2720
diff changeset
3915 static struct Lisp_Subr *S##Fname; \
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3916 Lisp_Object Fname (DEFUN_##max_args arglist)
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3917
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3918 #define DEFUN_NORETURN(lname, Fname, min_args, max_args, prompt, arglist) \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3919 DECLARE_DOESNT_RETURN_TYPE (Lisp_Object, Fname (EXFUN_##max_args)); \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3920 static struct Lisp_Subr MC_ALLOC_S##Fname = \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3921 { \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3922 { /* struct lrecord_header */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3923 lrecord_type_subr, /* lrecord_type_index */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3924 1, /* lisp_readonly bit */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3925 0, /* free */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3926 0 /* uid */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3927 }, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3928 min_args, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3929 max_args, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3930 prompt, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3931 0, /* doc string */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3932 lname, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3933 (lisp_fn_t) Fname \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3934 }; \
2814
520c08f04735 [xemacs-hg @ 2005-06-16 19:59:33 by crestani]
crestani
parents: 2720
diff changeset
3935 static struct Lisp_Subr *S##Fname; \
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3936 DOESNT_RETURN_TYPE (Lisp_Object) Fname (DEFUN_##max_args arglist)
2834
172fb92bd156 [xemacs-hg @ 2005-06-28 11:32:13 by crestani]
crestani
parents: 2828
diff changeset
3937 #define GET_DEFUN_LISP_OBJECT(Fname) \
172fb92bd156 [xemacs-hg @ 2005-06-28 11:32:13 by crestani]
crestani
parents: 2828
diff changeset
3938 wrap_subr (S##Fname);
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
3939 #else /* not NEW_GC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3940 #define DEFUN(lname, Fname, min_args, max_args, prompt, arglist) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3941 Lisp_Object Fname (EXFUN_##max_args); \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3942 static struct Lisp_Subr S##Fname = \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3943 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3944 { /* struct lrecord_header */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3945 lrecord_type_subr, /* lrecord_type_index */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3946 1, /* mark bit */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3947 1, /* c_readonly bit */ \
1111
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 1104
diff changeset
3948 1, /* lisp_readonly bit */ \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3949 }, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3950 min_args, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3951 max_args, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3952 prompt, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3953 0, /* doc string */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3954 lname, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3955 (lisp_fn_t) Fname \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3956 }; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3957 Lisp_Object Fname (DEFUN_##max_args arglist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3958
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3959 #define DEFUN_NORETURN(lname, Fname, min_args, max_args, prompt, arglist) \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3960 DECLARE_DOESNT_RETURN_TYPE (Lisp_Object, Fname (EXFUN_##max_args)); \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3961 static struct Lisp_Subr S##Fname = \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3962 { \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3963 { /* struct lrecord_header */ \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3964 lrecord_type_subr, /* lrecord_type_index */ \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3965 1, /* mark bit */ \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3966 1, /* c_readonly bit */ \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3967 1, /* lisp_readonly bit */ \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3968 }, \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3969 min_args, \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3970 max_args, \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3971 prompt, \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3972 0, /* doc string */ \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3973 lname, \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3974 (lisp_fn_t) Fname \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3975 }; \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3976 DOESNT_RETURN_TYPE (Lisp_Object) Fname (DEFUN_##max_args arglist)
2834
172fb92bd156 [xemacs-hg @ 2005-06-28 11:32:13 by crestani]
crestani
parents: 2828
diff changeset
3977 #define GET_DEFUN_LISP_OBJECT(Fname) \
172fb92bd156 [xemacs-hg @ 2005-06-28 11:32:13 by crestani]
crestani
parents: 2828
diff changeset
3978 wrap_subr (&S##Fname);
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
3979 #endif /* not NEW_GC */
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3980
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3981 /* Heavy ANSI C preprocessor hackery to get DEFUN to declare a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3982 prototype that matches max_args, and add the obligatory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3983 `Lisp_Object' type declaration to the formal C arguments. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3984
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3985 #define DEFUN_MANY(named_int, named_Lisp_Object) named_int, named_Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3986 #define DEFUN_UNEVALLED(args) Lisp_Object args
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3987 #define DEFUN_0() void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3988 #define DEFUN_1(a) Lisp_Object a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3989 #define DEFUN_2(a,b) DEFUN_1(a), Lisp_Object b
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3990 #define DEFUN_3(a,b,c) DEFUN_2(a,b), Lisp_Object c
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3991 #define DEFUN_4(a,b,c,d) DEFUN_3(a,b,c), Lisp_Object d
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3992 #define DEFUN_5(a,b,c,d,e) DEFUN_4(a,b,c,d), Lisp_Object e
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3993 #define DEFUN_6(a,b,c,d,e,f) DEFUN_5(a,b,c,d,e), Lisp_Object f
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3994 #define DEFUN_7(a,b,c,d,e,f,g) DEFUN_6(a,b,c,d,e,f), Lisp_Object g
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3995 #define DEFUN_8(a,b,c,d,e,f,g,h) DEFUN_7(a,b,c,d,e,f,g),Lisp_Object h
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3996
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3997 /* WARNING: If you add defines here for higher values of max_args,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3998 make sure to also fix the clauses in PRIMITIVE_FUNCALL(),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3999 and change the define of SUBR_MAX_ARGS above. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4000
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4001 #include "symeval.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4002
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
4003 BEGIN_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
4004
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4005 /* `specpdl' is the special binding/unwind-protect stack.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4006
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4007 Knuth says (see the Jargon File):
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4008 At MIT, `pdl' [abbreviation for `Push Down List'] used to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4009 be a more common synonym for `stack'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4010 Everywhere else `stack' seems to be the preferred term.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4011
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4012 specpdl_depth is the current depth of `specpdl'.
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4013 Save this for use later as arg to `unbind_to_1'. */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4014 extern MODULE_API int specpdl_depth_counter;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4015 #define specpdl_depth() specpdl_depth_counter
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4016
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4017
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4018 #define CHECK_FUNCTION(fun) do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4019 while (NILP (Ffunctionp (fun))) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4020 signal_invalid_function_error (fun); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4021 } while (0)
5084
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4022
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4023 /************************************************************************/
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4024 /* Parsing keyword arguments */
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4025 /************************************************************************/
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4026
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4027 /* The C subr must have been declared with MANY as its max args, and this
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4028 PARSE_KEYWORDS call must come before any statements.
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4029
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4030 FUNCTION is the name of the current function, as a symbol.
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4031
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4032 NARGS is the count of arguments supplied to FUNCTION.
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4033
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4034 ARGS is a pointer to the argument vector (not a Lisp vector) supplied to
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4035 FUNCTION.
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4036
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4037 KEYWORDS_OFFSET is the offset into ARGS where the keyword arguments start.
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4038
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4039 KEYWORD_COUNT is the number of keywords FUNCTION is normally prepared to
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4040 handle.
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4041
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4042 KEYWORDS is a parenthesised list of those keywords, without the initial
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4043 Q_.
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4044
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4045 KEYWORD_DEFAULTS allows you to set non-nil defaults. Put (keywordname =
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4046 initial_value) in this parameter, a collection of C statements surrounded
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4047 by parentheses and separated by the comma operator. If you don't need
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4048 this, supply NULL as KEYWORD_DEFAULTS.
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4049
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4050 ALLOW_OTHER_KEYS corresponds to the &allow-other-keys argument list
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4051 entry in defun*; it is 1 if other keys are normally allowed, 0
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4052 otherwise. This may be overridden in the caller by specifying
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4053 :allow-other-keys t in the argument list.
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4054
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4055 For keywords which appear multiple times in the called argument list, the
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4056 leftmost one overrides, as specified in section 7.1.1 of the CLHS.
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4057
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4058 If you want to check whether a given keyword argument was set (as in the
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4059 SVAR argument to defun*), supply Qunbound as its default in
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4060 KEYWORD_DEFAULTS, and examine it once PARSE_KEYWORDS is done. Lisp code
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4061 cannot supply Qunbound as an argument, so if it is still Qunbound, it was
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4062 not set.
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4063
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4064 There is no elegant way with this macro to have one name for the keyword
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4065 and an unrelated name for the local variable, as is possible with the
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4066 ((:keyword unrelated-var)) syntax in defun* and in Common Lisp. That
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4067 shouldn't matter in practice. */
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4068
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4069 #define PARSE_KEYWORDS(function, nargs, args, keywords_offset, \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4070 keyword_count, keywords, keyword_defaults, \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4071 allow_other_keys) \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4072 DECLARE_N_KEYWORDS_##keyword_count keywords; \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4073 \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4074 do \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4075 { \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4076 Lisp_Object pk_key, pk_value; \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4077 Elemcount pk_i = nargs - 1; \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4078 Boolint pk_allow_other_keys = allow_other_keys; \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4079 \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4080 if ((nargs - keywords_offset) & 1) \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4081 { \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4082 if (!allow_other_keys \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4083 && !(pk_allow_other_keys \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4084 = non_nil_allow_other_keys_p (keywords_offset, \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4085 nargs, args))) \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4086 { \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4087 signal_wrong_number_of_arguments_error (function, nargs); \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4088 } \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4089 else \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4090 { \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4091 /* Ignore the trailing arg; so below always sees an even \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4092 number of arguments. */ \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4093 pk_i -= 1; \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4094 } \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4095 } \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4096 \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4097 (void)(keyword_defaults); \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4098 \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4099 /* Start from the end, because the leftmost element overrides. */ \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4100 while (pk_i > keywords_offset) \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4101 { \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4102 pk_value = args[pk_i--]; \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4103 pk_key = args[pk_i--]; \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4104 \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4105 if (0) {} \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4106 CHECK_N_KEYWORDS_##keyword_count keywords \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4107 else if (allow_other_keys || pk_allow_other_keys) \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4108 { \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4109 continue; \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4110 } \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4111 else if (!(pk_allow_other_keys \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4112 = non_nil_allow_other_keys_p (keywords_offset, \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4113 nargs, args))) \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4114 { \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4115 invalid_keyword_argument (function, pk_key); \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4116 } \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4117 } \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4118 } while (0)
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4119
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4120 #define DECLARE_N_KEYWORDS_1(a) \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4121 Lisp_Object a = Qnil
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4122 #define DECLARE_N_KEYWORDS_2(a,b) \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4123 DECLARE_N_KEYWORDS_1(a), b = Qnil
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4124 #define DECLARE_N_KEYWORDS_3(a,b,c) \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4125 DECLARE_N_KEYWORDS_2(a,b), c = Qnil
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4126 #define DECLARE_N_KEYWORDS_4(a,b,c,d) \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4127 DECLARE_N_KEYWORDS_3(a,b,c), d = Qnil
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4128 #define DECLARE_N_KEYWORDS_5(a,b,c,d,e) \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4129 DECLARE_N_KEYWORDS_4(a,b,c,d), e = Qnil
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4130 #define DECLARE_N_KEYWORDS_6(a,b,c,d,e,f) \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4131 DECLARE_N_KEYWORDS_5(a,b,c,d,e), f = Qnil
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4132 #define DECLARE_N_KEYWORDS_7(a,b,c,d,e,f,g) \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4133 DECLARE_N_KEYWORDS_6(a,b,c,d,e,f), g = Qnil
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4134
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4135 #define CHECK_N_KEYWORDS_1(a) \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4136 else if (EQ (pk_key, Q_##a)) { a = pk_value; }
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4137 #define CHECK_N_KEYWORDS_2(a,b) CHECK_N_KEYWORDS_1(a) \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4138 else if (EQ (pk_key, Q_##b)) { b = pk_value; }
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4139 #define CHECK_N_KEYWORDS_3(a,b,c) CHECK_N_KEYWORDS_2(a,b) \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4140 else if (EQ (pk_key, Q_##c)) { c = pk_value; }
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4141 #define CHECK_N_KEYWORDS_4(a,b,c,d) CHECK_N_KEYWORDS_3(a,b,c) \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4142 else if (EQ (pk_key, Q_##d)) { d = pk_value; }
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4143 #define CHECK_N_KEYWORDS_5(a,b,c,d,e) CHECK_N_KEYWORDS_4(a,b,c,d) \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4144 else if (EQ (pk_key, Q_##e)) { e = pk_value; }
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4145 #define CHECK_N_KEYWORDS_6(a,b,c,d,e,f) CHECK_N_KEYWORDS_5(a,b,c,d,e) \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4146 else if (EQ (pk_key, Q_##f)) { f = pk_value; }
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4147 #define CHECK_N_KEYWORDS_7(a,b,c,d,e,f,g) CHECK_N_KEYWORDS_6(a,b,c,d,e,f) \
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4148 else if (EQ (pk_key, Q_##g)) { g = pk_value; }
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4149
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4150 Boolint non_nil_allow_other_keys_p (Elemcount offset, int nargs,
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
4151 Lisp_Object *args);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4152
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4153
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4154 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4155 /* Checking for QUIT */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4156 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4157
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4158 /* NOTE NOTE NOTE: Invoking QUIT can cause random Lisp code to be executed!
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4159 This can happen in numerous ways. For example, on many platforms, QUIT
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4160 needs to drain the event queue to see whether there's a C-g in the works.
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4161 A side effect of this is that, if there's a menu-press event, menu filters
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4162 (i.e. Lisp code) will be invoked. Lisp code could also happen if there's
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4163 an asynchronous timeout, or if the debugger is invoked as a result of
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4164 debug-on-quit and the user returns by hitting `r', etc. etc.
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4165
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4166 However, GC CANNOT HAPPEN. It is forbidden everywhere within the QUIT-
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4167 processing code, because most callers cannot tolerate GC during QUIT
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4168 since it's just too prevalent. */
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4169
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4170 /* The exact workings of this mechanism are described in detail in signal.c. */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4171
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4172 /* Asynchronous events set something_happened, and then are processed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4173 within the QUIT macro. At this point, we are guaranteed to not be in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4174 any sensitive code. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4175
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4176 extern MODULE_API volatile int something_happened;
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4177 extern MODULE_API int dont_check_for_quit;
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4178 MODULE_API void check_what_happened (void);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4179
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4180 extern MODULE_API volatile int quit_check_signal_happened;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4181 extern volatile int quit_check_signal_tick_count;
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4182 MODULE_API void check_quit (void);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4183
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4184 MODULE_API void signal_quit (void);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4185
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4186 int begin_dont_check_for_quit (void);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4187 int begin_do_check_for_quit (void);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4188
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4189 /* Nonzero if the values of `quit-flag' and `inhibit-quit' indicate
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4190 that a quit should be signalled. */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4191 #define QUIT_FLAG_SAYS_SHOULD_QUIT \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4192 (!NILP (Vquit_flag) && \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4193 (NILP (Vinhibit_quit) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4194 || (EQ (Vquit_flag, Qcritical) && !dont_check_for_quit)))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4195
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4196 /* Nonzero if ought to quit now. This is the "efficient" version, which
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4197 respects the flags set to indicate whether the full quit check should
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4198 be done. Therefore it may be inaccurate (i.e. lagging reality), esp.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4199 when poll for quit is used.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4200
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4201 This is defined for code that wants to allow quitting, but needs to
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4202 do some cleanup if that happens. (You could always register the cleanup
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4203 code using record_unwind_protect(), but sometimes it makes more sense
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4204 to do it using QUITP.) To use this macro, just call it at the
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4205 appropriate time, and if its value is non-zero, do your cleanup code
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4206 and then call QUIT.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4207
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4208 A different version (below) is used for the actual QUIT macro. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4209 #define QUITP \
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4210 ((quit_check_signal_happened ? check_quit () : (void) 0), \
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4211 QUIT_FLAG_SAYS_SHOULD_QUIT)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4212
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4213 /* This is the version actually called by QUIT. The difference
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4214 between it and QUITP is that it also has side effects in that it
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4215 will handle anything else that has recently signalled itself
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4216 asynchronously and wants to be handled now. Currently this
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4217 includes executing asynchronous timeouts that may have been set
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4218 from Lisp or from the poll-for-quit or poll-for-sigchld
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4219 timers. (#### It seems that, to be slightly more accurate, we
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4220 should also process poll-for-quit timers in the above version.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4221 However, this mechanism is inherently approximate, so it really
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4222 doesn't matter much.) In the future, it might also include doing a
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4223 thread context switch. Callers of QUITP generally don't except
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4224 random side effects to happen (#### unfortunately, random side effects
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4225 can happen anyway, e.g. through menu filters -- see comment above),
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4226 so we have this different version. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4227 #define INTERNAL_QUITP \
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4228 ((something_happened ? check_what_happened () : (void) 0), \
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4229 QUIT_FLAG_SAYS_SHOULD_QUIT)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4230
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4231 /* Check quit-flag and quit if it is non-nil. Also do any other things
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4232 that are triggered by asynchronous events and might want to be
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4233 handled. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4234 #define QUIT do { if (INTERNAL_QUITP) signal_quit (); } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4235
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4236
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4237 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4238 /* hashing */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4239 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4240
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4241 /* #### for a 64-bit machine, we should substitute a prime just over 2^32 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4242 #define GOOD_HASH 65599 /* prime number just over 2^16; Dragon book, p. 435 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4243 #define HASH2(a,b) (GOOD_HASH * (a) + (b))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4244 #define HASH3(a,b,c) (GOOD_HASH * HASH2 (a,b) + (c))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4245 #define HASH4(a,b,c,d) (GOOD_HASH * HASH3 (a,b,c) + (d))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4246 #define HASH5(a,b,c,d,e) (GOOD_HASH * HASH4 (a,b,c,d) + (e))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4247 #define HASH6(a,b,c,d,e,f) (GOOD_HASH * HASH5 (a,b,c,d,e) + (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4248 #define HASH7(a,b,c,d,e,f,g) (GOOD_HASH * HASH6 (a,b,c,d,e,f) + (g))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4249 #define HASH8(a,b,c,d,e,f,g,h) (GOOD_HASH * HASH7 (a,b,c,d,e,f,g) + (h))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4250 #define HASH9(a,b,c,d,e,f,g,h,i) (GOOD_HASH * HASH8 (a,b,c,d,e,f,g,h) + (i))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4251
5013
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
4252 #define LISP_HASH(obj) ((unsigned long) STORE_LISP_IN_VOID (obj))
2516
b87570db038f [xemacs-hg @ 2005-01-26 10:25:03 by ben]
ben
parents: 2500
diff changeset
4253 Hashcode memory_hash (const void *xv, Bytecount size);
b87570db038f [xemacs-hg @ 2005-01-26 10:25:03 by ben]
ben
parents: 2500
diff changeset
4254 Hashcode internal_hash (Lisp_Object obj, int depth);
b87570db038f [xemacs-hg @ 2005-01-26 10:25:03 by ben]
ben
parents: 2500
diff changeset
4255 Hashcode internal_array_hash (Lisp_Object *arr, int size, int depth);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4256
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4257
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4258 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4259 /* String translation */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4260 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4261
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4262 /* When support for message translation exists, GETTEXT() translates a
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4263 string from English into the language defined by
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4264 `current-language-environment'. This is done by looking the string
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4265 up in a large predefined table; if no translation is found, the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4266 original string is returned, and the failure is possibly logged so
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4267 that the translation can later be entered into the table.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4268
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4269 In addition to this, there is a mechanism to snarf message strings
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4270 out of the source code so that they can be entered into the tables.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4271 This is what make-msgfile.lex does.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4272
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4273 Handling `format' strings is more difficult: The format string
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4274 should get translated, but not under all circumstances. When the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4275 format string is a Lisp string, what should happen is that
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4276 Fformat() should format the untranslated args[0] and return that,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4277 and also call Fgettext() on args[0] and, if that is different,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4278 format it and store it in the `string-translatable' property of the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4279 returned string. See Fgettext().
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4280
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4281 The variations IGETTEXT, CIGETTEXT and ASCGETTEXT operate on
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4282 Ibyte *, CIbyte *, and Ascbyte * strings, respectively. The
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4283 ASCGETTEXT version has an assert check to verify that its string
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4284 really is pure-ASCII. Plain GETTEXT is defined as ASCGETTEXT, and
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4285 so works the same way. (There are no versions that work for Extbyte *.
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4286 Translate to internal format before working on it.)
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4287
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4288 There are similar functions for building a Lisp string from a C
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4289 string and translating in the process. They again come in three
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4290 variants: build_msg_istring(), build_msg_cistring(), and
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4291 build_msg_ascstring(). Again, build_msg_ascstring() asserts that
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4292 its text is pure-ASCII, and build_msg_string() is the same as
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4293 build_msg_ascstring().
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4294 */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4295
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4296 /* Return value NOT Ascbyte, because the result in general will have been
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4297 translated into a foreign language. */
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4298 DECLARE_INLINE_HEADER (const CIbyte *ASCGETTEXT (const Ascbyte *s))
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4299 {
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4300 ASSERT_ASCTEXT_ASCII (s);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4301 return s;
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4302 }
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4303
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4304 DECLARE_INLINE_HEADER (const Ibyte *IGETTEXT (const Ibyte *s))
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4305 {
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4306 return s;
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4307 }
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4308
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4309 DECLARE_INLINE_HEADER (const CIbyte *CIGETTEXT (const CIbyte *s))
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4310 {
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4311 return s;
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4312 }
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4313
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4314 DECLARE_INLINE_HEADER (Lisp_Object LISP_GETTEXT (Lisp_Object s))
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4315 {
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4316 return s;
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4317 }
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4318
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4319 #define GETTEXT ASCGETTEXT
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4320
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4321 MODULE_API Lisp_Object build_msg_istring (const Ibyte *);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4322 MODULE_API Lisp_Object build_msg_cistring (const CIbyte *);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4323 MODULE_API Lisp_Object build_msg_ascstring (const Ascbyte *);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4324 #define build_msg_string build_msg_ascstring
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4325
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4326
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4327 /* DEFER_GETTEXT() and variants are used to identify strings which are not
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4328 meant to be translated immediately, but instead at some later time.
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4329 This is used in strings that are stored somewhere at dump or
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4330 initialization time, at a time when the current language environment is
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4331 not set. It is the duty of the user of the string to call GETTEXT or
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4332 some variant at the appropriate time. DEFER_GETTTEXT() serves only as a
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4333 marker that the string is translatable, and will as a result be snarfed
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4334 during message snarfing (see above).
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4335
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4336 build_defer_string() and variants are the deferred equivalents of
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4337 build_msg_string() and variants. Similarly to DEFER_GETTEXT(), they
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4338 don't actually do any translation, but serve as place markers for
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4339 message snarfing. However, they may do something more than just build
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4340 a Lisp string -- in particular, they may store a string property
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4341 indicating that the string is translatable (see discussion above about
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4342 this property).
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4343 */
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4344
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4345 DECLARE_INLINE_HEADER (const Ascbyte *DEFER_ASCGETTEXT (const Ascbyte *s))
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4346 {
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4347 ASSERT_ASCTEXT_ASCII (s);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4348 return s;
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4349 }
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4350
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4351 DECLARE_INLINE_HEADER (const Ibyte *DEFER_IGETTEXT (const Ibyte *s))
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4352 {
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4353 return s;
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4354 }
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4355
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4356 DECLARE_INLINE_HEADER (const CIbyte *DEFER_CIGETTEXT (const CIbyte *s))
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4357 {
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4358 return s;
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4359 }
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4360
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4361 #define DEFER_GETTEXT DEFER_ASCGETTEXT
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4362
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4363 MODULE_API Lisp_Object build_defer_istring (const Ibyte *);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4364 MODULE_API Lisp_Object build_defer_cistring (const CIbyte *);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4365 MODULE_API Lisp_Object build_defer_ascstring (const Ascbyte *);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4366
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4367 #define build_defer_string build_defer_ascstring
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4368
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4369
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4370 void write_msg_istring (Lisp_Object stream, const Ibyte *str);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4371 void write_msg_cistring (Lisp_Object stream, const CIbyte *str);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4372 void write_msg_ascstring (Lisp_Object stream, const Ascbyte *str);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4373
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4374 #define write_msg_string write_msg_ascstring
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4375
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4376
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4377 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4378 /* Garbage collection / GC-protection */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4379 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4380
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4381 /* Structure for recording stack slots that need marking */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4382
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4383 /* This is a chain of structures, each of which points at a Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4384 variable whose value should be marked in garbage collection.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4385 Normally every link of the chain is an automatic variable of a function,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4386 and its `val' points to some argument or local variable of the function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4387 On exit to the function, the chain is set back to the value it had on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4388 entry. This way, no link remains in the chain when the stack frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4389 containing the link disappears.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4390
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4391 Every function that can call Feval must protect in this fashion all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4392 Lisp_Object variables whose contents will be used again. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4393
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4394 extern MODULE_API struct gcpro *gcprolist;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4395
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
4396 END_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
4397
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4398 /* #### Catching insufficient gcpro:
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4399
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4400 The C++ code below catches GCPRO without UNGCPRO or vice-versa.
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4401 Catching cases where there's no GCPRO or UNGCPRO but should be, however,
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4402 is much harder, but could be done:
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4403
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4404 1. Lisp_Object becomes a real object. Its creator and destructor need to
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4405 figure out whether the object is on the stack (by looking at the range
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4406 that `this' is within), and if so, add the pointer to a list of all
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4407 stack-based Lisp_Objects.
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4408
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4409 2. The assignment method needs to do reference-counting on actual Lisp
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4410 objects -- in particular, we need to know if there are any references
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4411 to a Lisp object that are *NOT* from stack-based Lisp_Objects.
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4412
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4413 3. When we get to a point in the code where we might garbage collect --
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4414 i.e. Ffuncall(), Feval(), or Fgarbage_collect() is called -- we look
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4415 at our list of stack-based Lisp_Objects, and if there are any that
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4416 point to Lisp objects with no non-stack references, see if there are
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4417 any gcpros pointing to the object, and if not, set a flag indicating
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4418 that the object is "destroyed". (Don't abort yet because the function
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4419 might not use the object any more.)
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4420
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4421 4. When we detag a pointer using XFOO(), abort if its "destroyed" flag
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4422 is set.
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4423
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4424 --ben
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4425 */
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4426
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4427 struct gcpro
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4428 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4429 struct gcpro *next;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4430 const Lisp_Object *var; /* Address of first protected variable */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4431 int nvars; /* Number of consecutive protected variables */
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4432 #if defined (__cplusplus) && defined (ERROR_CHECK_GC)
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4433 /* Try to catch GCPRO without UNGCPRO, or vice-versa. G++ complains (at
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4434 least with sufficient numbers of warnings enabled, i.e. -Weffc++) if a
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4435 copy constructor or assignment operator is not defined. */
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4436 gcpro () : next (0), var (0), nvars (0) { }
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4437 gcpro (const gcpro& g) : next (g.next), var (g.var), nvars (g.nvars) { }
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4438 gcpro& operator= (const gcpro& g) { next = g.next; var = g.var;
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4439 nvars = g.nvars;
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4440 return *this;}
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4441 ~gcpro () { assert (!next); }
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4442 #endif /* defined (__cplusplus) && defined (ERROR_CHECK_GC) */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4443 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4444
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4445 /* Normally, you declare variables gcpro1, gcpro2, ... and use the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4446 GCPROn() macros. However, if you need to have nested gcpro's,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4447 declare ngcpro1, ngcpro2, ... and use NGCPROn(). If you need
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4448 to nest another level, use nngcpro1, nngcpro2, ... and use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4449 NNGCPROn(). If you need to nest yet another level, create
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4450 the appropriate macros. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4451
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4452 /* NOTE: About comments like "This function does not GC": These are there to
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4453 try to track whether GCPROing is necessary. Strictly speaking, some
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4454 functions that say this might actually GC, but only when it is never
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4455 possible to return (more specifically, in the process of signalling an
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4456 error, the debugger may be invoked, and could GC). For GCPRO purposes,
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4457 you only have to worry about functions that can GC and then return.
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4458 The QUIT macro cannot GC any more, although this wasn't true at some point,
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4459 and so some "This function can GC" comments may be inaccurate.
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4460 */
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4461
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
4462 BEGIN_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
4463
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4464 #define XGCDECL1(x) struct gcpro x##cpro1
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4465 #define XGCDECL2(x) struct gcpro x##cpro1, x##cpro2
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4466 #define XGCDECL3(x) struct gcpro x##cpro1, x##cpro2, x##cpro3
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4467 #define XGCDECL4(x) struct gcpro x##cpro1, x##cpro2, x##cpro3, x##cpro4
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4468 #define XGCDECL5(x) struct gcpro x##cpro1, x##cpro2, x##cpro3, x##cpro4, x##cpro5
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4469
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4470 #ifdef DEBUG_GCPRO
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4471
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4472 MODULE_API void debug_gcpro1 (Ascbyte *, int, struct gcpro *, Lisp_Object *);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4473 MODULE_API void debug_gcpro2 (Ascbyte *, int, struct gcpro *, struct gcpro *,
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4474 Lisp_Object *, Lisp_Object *);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4475 MODULE_API void debug_gcpro3 (Ascbyte *, int, struct gcpro *, struct gcpro *,
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4476 struct gcpro *, Lisp_Object *, Lisp_Object *,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4477 Lisp_Object *);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4478 MODULE_API void debug_gcpro4 (Ascbyte *, int, struct gcpro *, struct gcpro *,
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4479 struct gcpro *, struct gcpro *, Lisp_Object *,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4480 Lisp_Object *, Lisp_Object *, Lisp_Object *);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4481 MODULE_API void debug_gcpro5 (Ascbyte *, int, struct gcpro *, struct gcpro *,
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4482 struct gcpro *, struct gcpro *, struct gcpro *,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4483 Lisp_Object *, Lisp_Object *, Lisp_Object *,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4484 Lisp_Object *, Lisp_Object *);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4485 MODULE_API void debug_ungcpro(Ascbyte *, int, struct gcpro *);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4486
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4487 #define XGCPRO1(x,v) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4488 debug_gcpro1 (__FILE__, __LINE__,&x##cpro1,&v)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4489 #define XGCPRO2(x,v1,v2) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4490 debug_gcpro2 (__FILE__, __LINE__,&x##cpro1,&x##cpro2,&v1,&v2)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4491 #define XGCPRO3(x,v1,v2,v3) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4492 debug_gcpro3 (__FILE__, __LINE__,&x##cpro1,&x##cpro2,&x##cpro3, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4493 &v1,&v2,&v3)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4494 #define XGCPRO4(x,v1,v2,v3,v4) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4495 debug_gcpro4 (__FILE__, __LINE__,&x##cpro1,&x##cpro2,&x##cpro3, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4496 &x##cpro4, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4497 &v1,&v2,&v3,&v4)
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4498 #define XGCPRO5(x,v1,v2,v3,v4,v5) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4499 debug_gcpro5 (__FILE__, __LINE__,&x##cpro1,&x##cpro2,&x##cpro3, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4500 &x##cpro4,&x##cpro5, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4501 &v1,&v2,&v3,&v4,&v5)
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4502 #define XUNGCPRO(x) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4503 debug_ungcpro(__FILE__, __LINE__,&x##cpro1)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4504
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4505 #else /* ! DEBUG_GCPRO */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4506
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4507 #define XGCPRO1(x, var1) ((void) ( \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4508 x##cpro1.next = gcprolist, x##cpro1.var = &var1, x##cpro1.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4509 gcprolist = &x##cpro1 ))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4510
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4511 #define XGCPRO2(x, var1, var2) ((void) ( \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4512 x##cpro1.next = gcprolist, x##cpro1.var = &var1, x##cpro1.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4513 x##cpro2.next = &x##cpro1, x##cpro2.var = &var2, x##cpro2.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4514 gcprolist = &x##cpro2 ))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4515
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4516 #define XGCPRO3(x, var1, var2, var3) ((void) ( \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4517 x##cpro1.next = gcprolist, x##cpro1.var = &var1, x##cpro1.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4518 x##cpro2.next = &x##cpro1, x##cpro2.var = &var2, x##cpro2.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4519 x##cpro3.next = &x##cpro2, x##cpro3.var = &var3, x##cpro3.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4520 gcprolist = &x##cpro3 ))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4521
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4522 #define XGCPRO4(x, var1, var2, var3, var4) ((void) ( \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4523 x##cpro1.next = gcprolist, x##cpro1.var = &var1, x##cpro1.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4524 x##cpro2.next = &x##cpro1, x##cpro2.var = &var2, x##cpro2.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4525 x##cpro3.next = &x##cpro2, x##cpro3.var = &var3, x##cpro3.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4526 x##cpro4.next = &x##cpro3, x##cpro4.var = &var4, x##cpro4.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4527 gcprolist = &x##cpro4 ))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4528
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4529 #define XGCPRO5(x, var1, var2, var3, var4, var5) ((void) ( \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4530 x##cpro1.next = gcprolist, x##cpro1.var = &var1, x##cpro1.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4531 x##cpro2.next = &x##cpro1, x##cpro2.var = &var2, x##cpro2.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4532 x##cpro3.next = &x##cpro2, x##cpro3.var = &var3, x##cpro3.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4533 x##cpro4.next = &x##cpro3, x##cpro4.var = &var4, x##cpro4.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4534 x##cpro5.next = &x##cpro4, x##cpro5.var = &var5, x##cpro5.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4535 gcprolist = &x##cpro5 ))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4536
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4537 #define XGCPRO1_ARRAY(x, array, n) ((void) ( \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4538 x##cpro1.next = gcprolist, x##cpro1.var = array, x##cpro1.nvars = n, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4539 gcprolist = &x##cpro1 ))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4540
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4541 #define XGCPRO2_ARRAY(x, array1, n1, array2, n2) ((void) ( \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4542 x##cpro1.next = gcprolist, x##cpro1.var = array1, x##cpro1.nvars = n1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4543 x##cpro2.next = &x##cpro1, x##cpro2.var = array2, x##cpro2.nvars = n2, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4544 gcprolist = &x##cpro2 ))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4545
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4546 #define XGCPRO3_ARRAY(x, array1, n1, array2, n2, array3, n3) ((void) ( \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4547 x##cpro1.next = gcprolist, x##cpro1.var = array1, x##cpro1.nvars = n1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4548 x##cpro2.next = &x##cpro1, x##cpro2.var = array2, x##cpro2.nvars = n2, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4549 x##cpro3.next = &x##cpro2, x##cpro3.var = array3, x##cpro3.nvars = n3, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4550 gcprolist = &x##cpro3 ))
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4551
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4552 #if defined (__cplusplus) && defined (ERROR_CHECK_GC)
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4553 /* We need to reset each gcpro to avoid triggering the assert() in
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4554 ~gcpro(). This happens in UNGCPRO and longjmp(). */
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4555 #define UNWIND_GCPRO_TO(val) \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4556 do \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4557 { \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4558 struct gcpro *__gcpro_stop = (val); \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4559 /* Try to catch UNGCPRO without GCPRO. We arrange for there to be a \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4560 sentinel at the end of the gcprolist, so it should never be NULL. */ \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4561 assert (__gcpro_stop); \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4562 while (gcprolist != __gcpro_stop) \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4563 { \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4564 struct gcpro *__gcpro_next = gcprolist->next; \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4565 gcprolist->next = 0; \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4566 gcprolist = __gcpro_next; \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4567 assert (gcprolist); \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4568 } \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4569 } while (0)
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4570 #else
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4571 #define UNWIND_GCPRO_TO(val) (gcprolist = (val))
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4572 #endif /* defined (__cplusplus) && defined (ERROR_CHECK_GC) */
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4573
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4574 #define XUNGCPRO(x) UNWIND_GCPRO_TO (x##cpro1.next)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4575
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4576 #endif /* ! DEBUG_GCPRO */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4577
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4578 #define GCDECL1 XGCDECL1 (g)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4579 #define GCDECL2 XGCDECL2 (g)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4580 #define GCDECL3 XGCDECL3 (g)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4581 #define GCDECL4 XGCDECL4 (g)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4582 #define GCDECL5 XGCDECL5 (g)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4583
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4584 #define GCPRO1(a) XGCPRO1 (g,a)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4585 #define GCPRO2(a,b) XGCPRO2 (g,a,b)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4586 #define GCPRO3(a,b,c) XGCPRO3 (g,a,b,c)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4587 #define GCPRO4(a,b,c,d) XGCPRO4 (g,a,b,c,d)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4588 #define GCPRO5(a,b,c,d,e) XGCPRO5 (g,a,b,c,d,e)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4589
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4590 #define GCPRO1_ARRAY(a1,n1) XGCPRO1_ARRAY(g,a1,n1)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4591 #define GCPRO2_ARRAY(a1,n1,a2,n2) XGCPRO2_ARRAY (g,a1,n1,a2,n2)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4592 #define GCPRO3_ARRAY(a1,n1,a2,n2,a3,n3) XGCPRO3_ARRAY (g,a1,n1,a2,n2,a3,n3)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4593
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4594 #define UNGCPRO XUNGCPRO (g)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4595
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4596 #define NGCDECL1 XGCDECL1 (ng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4597 #define NGCDECL2 XGCDECL2 (ng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4598 #define NGCDECL3 XGCDECL3 (ng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4599 #define NGCDECL4 XGCDECL4 (ng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4600 #define NGCDECL5 XGCDECL5 (ng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4601
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4602 #define NGCPRO1(a) XGCPRO1 (ng,a)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4603 #define NGCPRO2(a,b) XGCPRO2 (ng,a,b)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4604 #define NGCPRO3(a,b,c) XGCPRO3 (ng,a,b,c)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4605 #define NGCPRO4(a,b,c,d) XGCPRO4 (ng,a,b,c,d)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4606 #define NGCPRO5(a,b,c,d,e) XGCPRO5 (ng,a,b,c,d,e)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4607
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4608 #define NGCPRO1_ARRAY(a1,n1) XGCPRO1_ARRAY(ng,a1,n1)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4609 #define NGCPRO2_ARRAY(a1,n1,a2,n2) XGCPRO2_ARRAY (ng,a1,n1,a2,n2)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4610 #define NGCPRO3_ARRAY(a1,n1,a2,n2,a3,n3) XGCPRO3_ARRAY (ng,a1,n1,a2,n2,a3,n3)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4611
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4612 #define NUNGCPRO XUNGCPRO (ng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4613
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4614 #define NNGCDECL1 XGCDECL1 (nng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4615 #define NNGCDECL2 XGCDECL2 (nng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4616 #define NNGCDECL3 XGCDECL3 (nng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4617 #define NNGCDECL4 XGCDECL4 (nng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4618 #define NNGCDECL5 XGCDECL5 (nng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4619
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4620 #define NNGCPRO1(a) XGCPRO1 (nng,a)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4621 #define NNGCPRO2(a,b) XGCPRO2 (nng,a,b)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4622 #define NNGCPRO3(a,b,c) XGCPRO3 (nng,a,b,c)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4623 #define NNGCPRO4(a,b,c,d) XGCPRO4 (nng,a,b,c,d)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4624 #define NNGCPRO5(a,b,c,d,e) XGCPRO5 (nng,a,b,c,d,e)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4625
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4626 #define NNGCPRO1_ARRAY(a1,n1) XGCPRO1_ARRAY(nng,a1,n1)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4627 #define NNGCPRO2_ARRAY(a1,n1,a2,n2) XGCPRO2_ARRAY (nng,a1,n1,a2,n2)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4628 #define NNGCPRO3_ARRAY(a1,n1,a2,n2,a3,n3) XGCPRO3_ARRAY (nng,a1,n1,a2,n2,a3,n3)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4629
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4630 #define NNUNGCPRO XUNGCPRO (nng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4631
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4632 /* Evaluate expr, UNGCPRO, and then return the value of expr. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4633 #define RETURN_UNGCPRO(expr) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4634 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4635 Lisp_Object ret_ungc_val = (expr); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4636 UNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4637 RETURN_SANS_WARNINGS ret_ungc_val; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4638 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4639
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4640 /* Evaluate expr, NUNGCPRO, UNGCPRO, and then return the value of expr. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4641 #define RETURN_NUNGCPRO(expr) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4642 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4643 Lisp_Object ret_ungc_val = (expr); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4644 NUNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4645 UNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4646 RETURN_SANS_WARNINGS ret_ungc_val; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4647 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4648
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4649 /* Evaluate expr, NNUNGCPRO, NUNGCPRO, UNGCPRO, and then return the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4650 value of expr. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4651 #define RETURN_NNUNGCPRO(expr) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4652 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4653 Lisp_Object ret_ungc_val = (expr); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4654 NNUNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4655 NUNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4656 UNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4657 RETURN_SANS_WARNINGS ret_ungc_val; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4658 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4659
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
4660 extern Lisp_Object_ptr_dynarr *staticpros;
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
4661 extern Lisp_Object_ptr_dynarr *staticpros_nodump;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4662 #ifdef DEBUG_XEMACS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4663
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4664 /* Help debug crashes gc-marking a staticpro'ed object. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4665
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4666 MODULE_API void staticpro_1 (Lisp_Object *, const Ascbyte *);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4667 MODULE_API void staticpro_nodump_1 (Lisp_Object *, const Ascbyte *);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4668 #define staticpro(ptr) staticpro_1 (ptr, #ptr)
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4669 #define staticpro_nodump(ptr) staticpro_nodump_1 (ptr, #ptr)
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4670
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
4671 #ifdef HAVE_SHLIB
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4672 MODULE_API void unstaticpro_nodump_1 (Lisp_Object *, const Ascbyte *);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4673 #define unstaticpro_nodump(ptr) unstaticpro_nodump_1 (ptr, #ptr)
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
4674 #endif
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
4675
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4676 #else
611
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 609
diff changeset
4677
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4678 /* Call staticpro (&var) to protect static variable `var'. */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4679 MODULE_API void staticpro (Lisp_Object *);
4979
4234fd5a7b17 fix bug #668 (compile error, not --with-debug)
Ben Wing <ben@xemacs.org>
parents: 4976
diff changeset
4680 /* staticpro_1 (varptr, name) is used when we're not directly calling
4234fd5a7b17 fix bug #668 (compile error, not --with-debug)
Ben Wing <ben@xemacs.org>
parents: 4976
diff changeset
4681 staticpro() on the address of a Lisp variable, but on a pointer we
4234fd5a7b17 fix bug #668 (compile error, not --with-debug)
Ben Wing <ben@xemacs.org>
parents: 4976
diff changeset
4682 got from elsewhere. In that case, NAME is a string describing the
4234fd5a7b17 fix bug #668 (compile error, not --with-debug)
Ben Wing <ben@xemacs.org>
parents: 4976
diff changeset
4683 actual variable in question. NAME is used only for debugging purposes,
4234fd5a7b17 fix bug #668 (compile error, not --with-debug)
Ben Wing <ben@xemacs.org>
parents: 4976
diff changeset
4684 and hence when not DEBUG_XEMACS, staticpro_1() just calls staticpro().
4234fd5a7b17 fix bug #668 (compile error, not --with-debug)
Ben Wing <ben@xemacs.org>
parents: 4976
diff changeset
4685 With DEBUG_XEMACS, however, it's the reverse -- staticpro() calls
4234fd5a7b17 fix bug #668 (compile error, not --with-debug)
Ben Wing <ben@xemacs.org>
parents: 4976
diff changeset
4686 staticpro_1(), using the ANSI "stringize" operator to construct a string
4234fd5a7b17 fix bug #668 (compile error, not --with-debug)
Ben Wing <ben@xemacs.org>
parents: 4976
diff changeset
4687 out of the variable name. */
4234fd5a7b17 fix bug #668 (compile error, not --with-debug)
Ben Wing <ben@xemacs.org>
parents: 4976
diff changeset
4688 #define staticpro_1(ptr, name) staticpro (ptr)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4689
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4690 /* Call staticpro_nodump (&var) to protect static variable `var'. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4691 /* var will not be saved at dump time */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4692 MODULE_API void staticpro_nodump (Lisp_Object *);
4979
4234fd5a7b17 fix bug #668 (compile error, not --with-debug)
Ben Wing <ben@xemacs.org>
parents: 4976
diff changeset
4693 #define staticpro_nodump_1(ptr, name) staticpro_nodump (ptr)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4694
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
4695 #ifdef HAVE_SHLIB
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
4696 /* Call unstaticpro_nodump (&var) to stop protecting static variable `var'. */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4697 MODULE_API void unstaticpro_nodump (Lisp_Object *);
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
4698 #endif
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
4699
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4700 #endif
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4701
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
4702 #ifdef NEW_GC
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
4703 extern Lisp_Object_dynarr *mcpros;
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
4704 #ifdef DEBUG_XEMACS
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
4705 /* Help debug crashes gc-marking a mcpro'ed object. */
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4706 MODULE_API void mcpro_1 (Lisp_Object, const Ascbyte *);
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
4707 #define mcpro(ptr) mcpro_1 (ptr, #ptr)
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
4708 #else /* not DEBUG_XEMACS */
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
4709 /* Call mcpro (&var) to protect mc variable `var'. */
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
4710 MODULE_API void mcpro (Lisp_Object);
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
4711 #endif /* not DEBUG_XEMACS */
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
4712 #endif /* NEW_GC */
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
4713
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4714 void register_post_gc_action (void (*fun) (void *), void *arg);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4715 int begin_gc_forbidden (void);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4716 void end_gc_forbidden (int count);
1957
59e1bbea04fe [xemacs-hg @ 2004-03-19 02:59:08 by james]
james
parents: 1927
diff changeset
4717 extern int gc_currently_forbidden;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4718
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
4719 END_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
4720
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4721
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4722 /************************************************************************/
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4723 /* Misc definitions */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4724 /************************************************************************/
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4725
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4726 /************************************************************************/
1983
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
4727 /* Other numeric types */
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
4728 /************************************************************************/
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
4729 #include "number.h"
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
4730
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
4731
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
4732 /************************************************************************/
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4733 /* prototypes */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4734 /************************************************************************/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4735
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4736 /* NOTE: Prototypes should go HERE, not in various header files, unless
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4737 they specifically reference a type that's not defined in lisp.h.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4738 (And even then, you might consider adding the type to lisp.h.)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4739
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4740 The idea is that header files typically contain the innards of objects,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4741 and we want to minimize the number of "dependencies" of one file on
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4742 the specifics of such objects. Putting prototypes here minimizes the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4743 number of header files that need to be included -- good for a number
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4744 of reasons. --ben */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4745
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4746 /* Prototypes for all init/syms_of/vars_of initialization functions. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4747 #include "symsinit.h"
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4748
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
4749 BEGIN_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
4750
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4751 /* Defined in abbrev.c */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4752 MODULE_API EXFUN (Fexpand_abbrev, 0);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4753
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4754 /* Defined in alloc.c */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4755 MODULE_API EXFUN (Fcons, 2);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4756 MODULE_API EXFUN (Flist, MANY);
4995
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
4757 EXFUN (Fbit_vector, MANY);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4758 EXFUN (Fmake_byte_code, MANY);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4759 MODULE_API EXFUN (Fmake_list, 2);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4760 MODULE_API EXFUN (Fmake_string, 2);
4995
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
4761 EXFUN (Fstring, MANY);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4762 MODULE_API EXFUN (Fmake_symbol, 1);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4763 MODULE_API EXFUN (Fmake_vector, 2);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4764 MODULE_API EXFUN (Fvector, MANY);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4765
5146
88bd4f3ef8e4 make lrecord UID's have a separate UID space for each object, resurrect debug SOE code in extents.c
Ben Wing <ben@xemacs.org>
parents: 5143
diff changeset
4766 void deadbeef_memory (void *ptr, Bytecount size);
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
4767 #ifndef NEW_GC
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4768 void release_breathing_space (void);
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
4769 #endif /* not NEW_GC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4770 Lisp_Object noseeum_cons (Lisp_Object, Lisp_Object);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4771 MODULE_API Lisp_Object make_vector (Elemcount, Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4772 MODULE_API Lisp_Object vector1 (Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4773 MODULE_API Lisp_Object vector2 (Lisp_Object, Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4774 MODULE_API Lisp_Object vector3 (Lisp_Object, Lisp_Object, Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
4775 Lisp_Object make_bit_vector (Elemcount, Lisp_Object);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
4776 Lisp_Object make_bit_vector_from_byte_vector (unsigned char *, Elemcount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4777 Lisp_Object noseeum_make_marker (void);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
4778 #ifndef NEW_GC
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4779 void garbage_collect_1 (void);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
4780 #endif /* not NEW_GC */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4781 MODULE_API Lisp_Object acons (Lisp_Object, Lisp_Object, Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4782 MODULE_API Lisp_Object cons3 (Lisp_Object, Lisp_Object, Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4783 MODULE_API Lisp_Object list1 (Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4784 MODULE_API Lisp_Object list2 (Lisp_Object, Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4785 MODULE_API Lisp_Object list3 (Lisp_Object, Lisp_Object, Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4786 MODULE_API Lisp_Object list4 (Lisp_Object, Lisp_Object, Lisp_Object,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4787 Lisp_Object);
5157
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5146
diff changeset
4788 MODULE_API Lisp_Object list5 (Lisp_Object, Lisp_Object, Lisp_Object,
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4789 Lisp_Object, Lisp_Object);
5157
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5146
diff changeset
4790 MODULE_API Lisp_Object list6 (Lisp_Object, Lisp_Object, Lisp_Object,
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5146
diff changeset
4791 Lisp_Object, Lisp_Object, Lisp_Object);
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5146
diff changeset
4792 MODULE_API Lisp_Object listn (int numargs, ...);
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5146
diff changeset
4793 MODULE_API Lisp_Object listu (Lisp_Object, ...);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4794 DECLARE_DOESNT_RETURN (memory_full (void));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4795 void disksave_object_finalization (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4796 extern int purify_flag;
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
4797 #ifndef NEW_GC
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4798 extern EMACS_INT gc_generation_number[1];
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
4799 #endif /* not NEW_GC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4800 int c_readonly (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4801 int lisp_readonly (Lisp_Object);
4953
304aebb79cd3 function renamings to track names of char typedefs
Ben Wing <ben@xemacs.org>
parents: 4952
diff changeset
4802 MODULE_API Lisp_Object build_istring (const Ibyte *);
304aebb79cd3 function renamings to track names of char typedefs
Ben Wing <ben@xemacs.org>
parents: 4952
diff changeset
4803 MODULE_API Lisp_Object build_cistring (const CIbyte *);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4804 MODULE_API Lisp_Object build_ascstring (const Ascbyte *);
4953
304aebb79cd3 function renamings to track names of char typedefs
Ben Wing <ben@xemacs.org>
parents: 4952
diff changeset
4805 MODULE_API Lisp_Object build_extstring (const Extbyte *, Lisp_Object);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4806 MODULE_API Lisp_Object make_string (const Ibyte *, Bytecount);
4953
304aebb79cd3 function renamings to track names of char typedefs
Ben Wing <ben@xemacs.org>
parents: 4952
diff changeset
4807 MODULE_API Lisp_Object make_extstring (const Extbyte *, EMACS_INT, Lisp_Object);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4808 void init_string_ascii_begin (Lisp_Object string);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4809 Lisp_Object make_uninit_string (Bytecount);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4810 MODULE_API Lisp_Object make_float (double);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4811 Lisp_Object make_string_nocopy (const Ibyte *, Bytecount);
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4812 void free_cons (Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4813 void free_list (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4814 void free_alist (Lisp_Object);
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4815 void free_marker (Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4816 int object_dead_p (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4817 void mark_object (Lisp_Object obj);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
4818 #ifndef NEW_GC
1598
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1590
diff changeset
4819 #ifdef USE_KKCC
2645
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
4820 #ifdef DEBUG_XEMACS
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
4821 void kkcc_gc_stack_push_lisp_object_1 (Lisp_Object obj, int level, int pos);
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
4822 #define kkcc_gc_stack_push_lisp_object(obj, level, pos) \
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
4823 kkcc_gc_stack_push_lisp_object_1 (obj, level, pos)
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
4824 void kkcc_backtrace (void);
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
4825 #else
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
4826 void kkcc_gc_stack_push_lisp_object_1 (Lisp_Object obj);
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
4827 #define kkcc_gc_stack_push_lisp_object(obj, level, pos) \
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
4828 kkcc_gc_stack_push_lisp_object_1 (obj)
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
4829 #define kkcc_backtrace()
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
4830 #endif
1598
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1590
diff changeset
4831 #endif /* USE_KKCC */
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
4832 #endif /* not NEW_GC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4833 int marked_p (Lisp_Object obj);
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
4834 extern int funcall_allocation_flag;
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
4835 extern int need_to_garbage_collect;
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4836 extern MODULE_API int need_to_check_c_alloca;
888
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
4837 extern int need_to_signal_post_gc;
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
4838 extern Lisp_Object Qpost_gc_hook, Qgarbage_collecting;
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
4839 void recompute_funcall_allocation_flag (void);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4840
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4841 #ifdef MEMORY_USAGE_STATS
5157
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5146
diff changeset
4842 Bytecount malloced_storage_size (void *, Bytecount, struct usage_stats *);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
4843 Bytecount fixed_type_block_overhead (Bytecount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4844 #endif
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4845
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4846 #ifdef EVENT_DATA_AS_OBJECTS
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4847 Lisp_Object make_key_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4848 Lisp_Object make_button_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4849 Lisp_Object make_motion_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4850 Lisp_Object make_process_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4851 Lisp_Object make_timeout_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4852 Lisp_Object make_magic_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4853 Lisp_Object make_magic_eval_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4854 Lisp_Object make_eval_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4855 Lisp_Object make_misc_user_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4856 void free_key_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4857 void free_button_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4858 void free_motion_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4859 void free_process_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4860 void free_timeout_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4861 void free_magic_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4862 void free_magic_eval_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4863 void free_eval_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4864 void free_misc_user_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4865 #endif /* EVENT_DATA_AS_OBJECTS */
934
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 930
diff changeset
4866
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4867 /* Defined in buffer.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4868 Lisp_Object get_truename_buffer (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4869 void switch_to_buffer (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4870 extern int find_file_compare_truenames;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4871 extern int find_file_use_truenames;
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4872 Ibyte *get_initial_directory (Ibyte *pathname, Bytecount size);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4873 void set_buffer_internal (struct buffer *b);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4874 struct buffer *decode_buffer (Lisp_Object buffer, int allow_string);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4875
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4876 void record_buffer (Lisp_Object buf);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4877 Lisp_Object get_buffer (Lisp_Object name,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4878 int error_if_deleted_or_does_not_exist);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4879 int map_over_sharing_buffers (struct buffer *buf,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4880 int (*mapfun) (struct buffer *buf,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4881 void *closure),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4882 void *closure);
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4883 void cleanup_buffer_undo_lists (void);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4884
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4885 extern struct buffer *current_buffer;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4886
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4887 extern void init_initial_directory (void); /* initialize initial_directory */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4888
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4889 EXFUN (Fbuffer_disable_undo, 1);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4890 MODULE_API EXFUN (Fbuffer_modified_p, 1);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4891 MODULE_API EXFUN (Fbuffer_name, 1);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4892 MODULE_API EXFUN (Fcurrent_buffer, 0);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4893 EXFUN (Ferase_buffer, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4894 EXFUN (Fget_buffer, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4895 EXFUN (Fget_buffer_create, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4896 EXFUN (Fget_file_buffer, 1);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4897 MODULE_API EXFUN (Fkill_buffer, 1);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4898 EXFUN (Fother_buffer, 3);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4899 EXFUN (Frecord_buffer, 1);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4900 MODULE_API EXFUN (Fset_buffer, 1);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4901 EXFUN (Fset_buffer_modified_p, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4902
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4903 extern Lisp_Object QSscratch, Qafter_change_function, Qafter_change_functions;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4904 extern Lisp_Object Qbefore_change_function, Qbefore_change_functions;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4905 extern Lisp_Object Qbuffer_or_string_p, Qdefault_directory, Qfirst_change_hook;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4906 extern Lisp_Object Qpermanent_local, Vafter_change_function;
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4907 extern Lisp_Object Qbuffer_live_p;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4908 extern Lisp_Object Vafter_change_functions, Vbefore_change_function;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4909 extern Lisp_Object Vbefore_change_functions, Vbuffer_alist, Vbuffer_defaults;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4910 extern Lisp_Object Vinhibit_read_only, Vtransient_mark_mode;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4911
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4912 /* Defined in bytecode.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4913 EXFUN (Fbyte_code, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4914
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 578
diff changeset
4915 DECLARE_DOESNT_RETURN (invalid_byte_code
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4916 (const Ascbyte *reason, Lisp_Object frob));
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4917
4932
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
4918 extern Lisp_Object Qbyte_code, Qinvalid_byte_code;
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4919
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4920 /* Defined in callint.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4921 EXFUN (Fcall_interactively, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4922 EXFUN (Fprefix_numeric_value, 1);
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4923 extern Lisp_Object Qcall_interactively;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4924 extern Lisp_Object Qmouse_leave_buffer_hook;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4925 extern Lisp_Object Qread_from_minibuffer;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4926 extern Lisp_Object Vcommand_history;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4927 extern Lisp_Object Vcurrent_prefix_arg;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4928 extern Lisp_Object Vmark_even_if_inactive;
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4929
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4930 /* Defined in casefiddle.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4931 EXFUN (Fdowncase, 2);
4910
6bc1f3f6cf0d Make canoncase visible to Lisp; use it with chars in internal_equalp.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4906
diff changeset
4932 EXFUN (Fcanoncase, 2);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4933 EXFUN (Fupcase, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4934 EXFUN (Fupcase_initials, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4935 EXFUN (Fupcase_initials_region, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4936 EXFUN (Fupcase_region, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4937
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4938 /* Defined in casetab.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4939 EXFUN (Fset_standard_case_table, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4940
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4941 /* Defined in chartab.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4942 EXFUN (Freset_char_table, 1);
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4943 extern Lisp_Object Qcategory_designator_p;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4944 extern Lisp_Object Qcategory_table_value_p;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4945
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4946 /* Defined in cmdloop.c */
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4947 extern Lisp_Object Qdisabled_command_hook;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4948 extern Lisp_Object Qreally_early_error_handler;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4949 extern Lisp_Object Qtop_level;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4950 extern Lisp_Object Vdisabled_command_hook;
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4951
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4952 /* Defined in cmds.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4953 EXFUN (Fbeginning_of_line, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4954 EXFUN (Fend_of_line, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4955 EXFUN (Fforward_char, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4956 EXFUN (Fforward_line, 2);
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4957 extern Lisp_Object Qself_insert_command;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4958
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4959 /* Defined in console.c */
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4960 extern Lisp_Object Qconsole_live_p;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4961 extern Lisp_Object Vconsole_list;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4962
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4963 /* Defined in console-stream.c */
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
4964 extern Lisp_Object Vstdio_str;
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4965
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4966 /* Defined in data.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4967 EXFUN (Fadd1, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4968 EXFUN (Faref, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4969 EXFUN (Faset, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4970 EXFUN (Fcar, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4971 EXFUN (Fcar_safe, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4972 EXFUN (Fcdr, 1);
919
111c4f2ed9c9 [xemacs-hg @ 2002-07-14 09:43:52 by adrian]
adrian
parents: 888
diff changeset
4973 EXFUN (Fcdr_safe, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4974 EXFUN (Fgeq, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4975 EXFUN (Fgtr, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4976 EXFUN (Findirect_function, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4977 EXFUN (Fleq, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4978 EXFUN (Flistp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4979 EXFUN (Flss, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4980 EXFUN (Fmax, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4981 EXFUN (Fmin, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4982 EXFUN (Fminus, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4983 EXFUN (Fnumber_to_string, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4984 EXFUN (Fplus, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4985 EXFUN (Fquo, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4986 EXFUN (Frem, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4987 EXFUN (Fsetcar, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4988 EXFUN (Fsetcdr, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4989 EXFUN (Fsub1, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4990 EXFUN (Fsubr_max_args, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4991 EXFUN (Fsubr_min_args, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4992 EXFUN (Ftimes, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4993
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4994 DECLARE_DOESNT_RETURN (c_write_error (Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4995 DECLARE_DOESNT_RETURN (lisp_write_error (Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4996 DECLARE_DOESNT_RETURN (args_out_of_range (Lisp_Object, Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4997 DECLARE_DOESNT_RETURN (args_out_of_range_3 (Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4998 Lisp_Object));
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4999 MODULE_API Lisp_Object wrong_type_argument (Lisp_Object, Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5000 MODULE_API
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5001 DECLARE_DOESNT_RETURN (dead_wrong_type_argument (Lisp_Object, Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5002 void check_int_range (EMACS_INT, EMACS_INT, EMACS_INT);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5003
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5004 EXFUN (Fint_to_char, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5005 EXFUN (Fchar_to_int, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5006
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5007 enum arith_comparison {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5008 arith_equal,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5009 arith_notequal,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5010 arith_less,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5011 arith_grtr,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5012 arith_less_or_equal,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5013 arith_grtr_or_equal };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5014 Lisp_Object arithcompare (Lisp_Object, Lisp_Object, enum arith_comparison);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5015
707
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 665
diff changeset
5016 /* Do NOT use word_to_lisp or wasteful_word_to_lisp to decode time_t's
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 665
diff changeset
5017 unless you KNOW arg is non-negative. They cannot return negative
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 665
diff changeset
5018 values! Use make_time. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5019 Lisp_Object word_to_lisp (unsigned int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5020 unsigned int lisp_to_word (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5021
4932
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
5022 extern Lisp_Object Qarrayp, Qbitp, Qchar_or_string_p, Qcharacterp,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
5023 Qerror_conditions, Qerror_message, Qinteger_char_or_marker_p,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
5024 Qinteger_or_char_p, Qinteger_or_marker_p, Qlambda, Qlistp, Qnatnump,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
5025 Qnonnegativep, Qnumber_char_or_marker_p, Qnumberp, Qquote, Qtrue_list_p;
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
5026 extern MODULE_API Lisp_Object Qintegerp;
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
5027
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
5028 extern Lisp_Object Qarith_error, Qbeginning_of_buffer, Qbuffer_read_only,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
5029 Qcircular_list, Qcircular_property_list, Qconversion_error,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
5030 Qcyclic_variable_indirection, Qdomain_error, Qediting_error,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
5031 Qend_of_buffer, Qend_of_file, Qerror, Qfile_error, Qinternal_error,
5084
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
5032 Qinvalid_change, Qinvalid_constant, Qinvalid_function,
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
5033 Qinvalid_keyword_argument, Qinvalid_operation,
4932
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
5034 Qinvalid_read_syntax, Qinvalid_state, Qio_error, Qlist_formation_error,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
5035 Qmalformed_list, Qmalformed_property_list, Qno_catch, Qout_of_memory,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
5036 Qoverflow_error, Qprinting_unreadable_object, Qquit, Qrange_error,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
5037 Qsetting_constant, Qsingularity_error, Qstack_overflow,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
5038 Qstructure_formation_error, Qtext_conversion_error, Qunderflow_error,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
5039 Qvoid_function, Qvoid_variable, Qwrong_number_of_arguments,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
5040 Qwrong_type_argument;
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5041 extern Lisp_Object Qcdr;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5042 extern Lisp_Object Qerror_lacks_explanatory_string;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5043 extern Lisp_Object Qfile_error;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5044 extern Lisp_Object Qsequencep;
4932
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
5045 extern MODULE_API Lisp_Object Qinvalid_argument, Qsyntax_error;
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
5046
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5047 /* Defined in device.c */
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5048 extern Lisp_Object Qdevice_live_p;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5049
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5050 /* Defined in device-x.c */
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5051 extern Lisp_Object Vx_initial_argv_list;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5052
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5053 /* Defined in dired.c */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5054 Lisp_Object make_directory_hash_table (const Ibyte *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5055 Lisp_Object wasteful_word_to_lisp (unsigned int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5056
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5057 /* Defined in doc.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5058 EXFUN (Fsubstitute_command_keys, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5059
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
5060 Lisp_Object unparesseuxify_doc_string (int fd, EMACS_INT position,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5061 Ibyte *name_nonreloc,
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
5062 Lisp_Object name_reloc,
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
5063 int standard_doc_file);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5064 Lisp_Object read_doc_string (Lisp_Object);
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5065 extern Lisp_Object Vinternal_doc_file_name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5066
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5067 /* Defined in doprnt.c */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5068 Bytecount emacs_doprnt_va (Lisp_Object stream, const Ibyte *format_nonreloc,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5069 Bytecount format_length, Lisp_Object format_reloc,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5070 va_list vargs);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5071 Bytecount emacs_doprnt (Lisp_Object stream, const Ibyte *format_nonreloc,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5072 Bytecount format_length, Lisp_Object format_reloc,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5073 int nargs, const Lisp_Object *largs, ...);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5074 Lisp_Object emacs_vsprintf_string_lisp (const CIbyte *format_nonreloc,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5075 Lisp_Object format_reloc, int nargs,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5076 const Lisp_Object *largs);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5077 Lisp_Object emacs_sprintf_string_lisp (const CIbyte *format_nonreloc,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5078 Lisp_Object format_reloc, int nargs, ...);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5079 Ibyte *emacs_vsprintf_malloc_lisp (const CIbyte *format_nonreloc,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5080 Lisp_Object format_reloc, int nargs,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5081 const Lisp_Object *largs,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5082 Bytecount *len_out);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5083 Ibyte *emacs_sprintf_malloc_lisp (Bytecount *len_out,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5084 const CIbyte *format_nonreloc,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5085 Lisp_Object format_reloc, int nargs, ...);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5086 Lisp_Object emacs_vsprintf_string (const CIbyte *format, va_list vargs);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5087 Lisp_Object emacs_sprintf_string (const CIbyte *format, ...)
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5088 PRINTF_ARGS (1, 2);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5089 Ibyte *emacs_vsprintf_malloc (const CIbyte *format, va_list vargs,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5090 Bytecount *len_out);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5091 Ibyte *emacs_sprintf_malloc (Bytecount *len_out, const CIbyte *format, ...)
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5092 PRINTF_ARGS (2, 3);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5093 Bytecount emacs_vsprintf (Ibyte *output, const CIbyte *format,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5094 va_list vargs);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5095 Bytecount emacs_sprintf (Ibyte *output, const CIbyte *format, ...)
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5096 PRINTF_ARGS (2, 3);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5097
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5098
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5099 /* Defined in editfns.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5100 EXFUN (Fbobp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5101 EXFUN (Fbolp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5102 EXFUN (Fbuffer_substring, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5103 EXFUN (Fchar_after, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5104 EXFUN (Fchar_to_string, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5105 EXFUN (Fdelete_region, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5106 EXFUN (Feobp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5107 EXFUN (Feolp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5108 EXFUN (Ffollowing_char, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5109 EXFUN (Fformat, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5110 EXFUN (Fgoto_char, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5111 EXFUN (Finsert, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5112 EXFUN (Finsert_buffer_substring, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5113 EXFUN (Finsert_char, 4);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5114 EXFUN (Fnarrow_to_region, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5115 EXFUN (Fpoint, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5116 EXFUN (Fpoint_marker, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5117 EXFUN (Fpoint_max, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5118 EXFUN (Fpoint_min, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5119 EXFUN (Fpreceding_char, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5120 EXFUN (Fsystem_name, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5121 EXFUN (Fuser_home_directory, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5122 EXFUN (Fuser_login_name, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5123 EXFUN (Fwiden, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5124
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5125 void uncache_home_directory (void);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5126 Ibyte *get_home_directory (void);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5127 Ibyte *user_login_name (uid_t *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5128 void buffer_insert1 (struct buffer *, Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
5129 Lisp_Object make_string_from_buffer (struct buffer *, Charbpos, Charcount);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
5130 Lisp_Object make_string_from_buffer_no_extents (struct buffer *, Charbpos, Charcount);
707
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 665
diff changeset
5131 Lisp_Object make_time (time_t);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5132 Lisp_Object save_excursion_save (void);
844
047d37eb70d7 [xemacs-hg @ 2002-05-16 13:30:23 by ben]
ben
parents: 826
diff changeset
5133 Lisp_Object save_restriction_save (struct buffer *buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5134 Lisp_Object save_excursion_restore (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5135 Lisp_Object save_restriction_restore (Lisp_Object);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5136 void widen_buffer (struct buffer *b, int no_clip);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5137 int beginning_of_line_p (struct buffer *b, Charbpos pt);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5138 Lisp_Object save_current_buffer_restore (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5139
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5140 extern Lisp_Object Qformat;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5141 extern Lisp_Object Qmark;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5142 extern Lisp_Object Qpoint;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5143 extern Lisp_Object Qregion_beginning;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5144 extern Lisp_Object Qregion_end;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5145 extern Lisp_Object Quser_files_and_directories;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5146 extern Lisp_Object Vsystem_name;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5147
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5148 /* Defined in emacs.c */
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
5149 EXFUN_NORETURN (Fkill_emacs, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5150 EXFUN (Frunning_temacs_p, 0);
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
5151 EXFUN (Fforce_debugging_signal, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5152
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5153 SIGTYPE fatal_error_signal (int);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5154 Lisp_Object make_arg_list (int, Wexttext **);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5155 void make_argc_argv (Lisp_Object, int *, Wexttext ***);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5156 void free_argc_argv (Wexttext **);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5157 Lisp_Object split_external_path (const Extbyte *path);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5158 Lisp_Object split_env_path (const CIbyte *evarname, const Ibyte *default_);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5159
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5160 /* Nonzero means don't do interactive redisplay and don't change tty modes */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5161 extern int noninteractive, noninteractive1;
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5162 extern int inhibit_non_essential_conversion_operations;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5163 extern int preparing_for_armageddon;
458
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
5164 extern Fixnum emacs_priority;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5165 extern int suppress_early_error_handler_backtrace;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5166 void debug_break (void);
4854
95c4ced5c07c fix compile problems
Ben Wing <ben@xemacs.org>
parents: 4846
diff changeset
5167 int debug_can_access_memory (const void *ptr, Bytecount len);
2210
9361a78f86a0 [xemacs-hg @ 2004-08-11 02:04:03 by james]
james
parents: 1986
diff changeset
5168 DECLARE_DOESNT_RETURN (really_abort (void));
776
79940b592197 [xemacs-hg @ 2002-03-15 07:43:14 by ben]
ben
parents: 771
diff changeset
5169 void zero_out_command_line_status_vars (void);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5170
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5171 extern Lisp_Object Qsave_buffers_kill_emacs;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5172 extern Lisp_Object Vcommand_line_args;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5173 extern Lisp_Object Vconfigure_info_directory;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5174 extern Lisp_Object Vconfigure_site_directory;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5175 extern Lisp_Object Vconfigure_site_module_directory;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5176 extern Lisp_Object Vdata_directory;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5177 extern Lisp_Object Vdoc_directory;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5178 extern Lisp_Object Vemacs_major_version;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5179 extern Lisp_Object Vemacs_minor_version;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5180 extern Lisp_Object Vexec_directory;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5181 extern Lisp_Object Vexec_path;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5182 extern Lisp_Object Vinvocation_directory;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5183 extern Lisp_Object Vinvocation_name;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5184 extern Lisp_Object Vmodule_directory;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5185 extern Lisp_Object Vsite_directory;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5186 extern Lisp_Object Vsite_module_directory;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5187
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5188 /* Defined in emodules.c */
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
5189 #ifdef HAVE_SHLIB
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5190 EXFUN (Flist_modules, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5191 EXFUN (Fload_module, 3);
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
5192 extern int unloading_module;
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
5193 #endif
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5194 extern Lisp_Object Qdll_error;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5195 extern Lisp_Object Qmodule;
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5196
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5197 /* Defined in eval.c */
1706
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5198 MODULE_API EXFUN (Fapply, MANY);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5199 EXFUN (Fbacktrace, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5200 EXFUN (Fcommand_execute, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5201 EXFUN (Fcommandp, 1);
4744
17f7e9191c0b Rationalise duplicated functionality, #'custom-quote, #'quote-maybe.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4690
diff changeset
5202 EXFUN (Fquote_maybe, 1);
1706
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5203 MODULE_API EXFUN (Feval, 1);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5204 MODULE_API EXFUN (Ffuncall, MANY);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5205 EXFUN (Ffunctionp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5206 EXFUN (Finteractive_p, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5207 EXFUN (Fprogn, UNEVALLED);
1706
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5208 MODULE_API EXFUN (Fsignal, 2);
4677
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4512
diff changeset
5209 MODULE_API EXFUN_NORETURN (Fthrow, UNEVALLED);
1706
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5210 MODULE_API EXFUN (Fcall_with_condition_handler, MANY);
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5211 EXFUN (Ffunction_max_args, 1);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5212 EXFUN (Ffunction_min_args, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5213
4677
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4512
diff changeset
5214 MODULE_API DECLARE_DOESNT_RETURN (throw_or_bomb_out (Lisp_Object,
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4512
diff changeset
5215 Lisp_Object, int,
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4512
diff changeset
5216 Lisp_Object, Lisp_Object));
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4512
diff changeset
5217
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5218 MODULE_API DECLARE_DOESNT_RETURN (signal_error_1 (Lisp_Object, Lisp_Object));
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5219 void maybe_signal_error_1 (Lisp_Object, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5220 Error_Behavior);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5221 Lisp_Object maybe_signal_continuable_error_1 (Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5222 Lisp_Object, Error_Behavior);
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
5223 MODULE_API DECLARE_DOESNT_RETURN (signal_ferror (Lisp_Object, const CIbyte *,
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
5224 ...)) PRINTF_ARGS(2, 3);
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5225 void maybe_signal_ferror (Lisp_Object, Lisp_Object, Error_Behavior,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5226 const CIbyte *, ...) PRINTF_ARGS (4, 5);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5227 Lisp_Object signal_continuable_ferror (Lisp_Object, const CIbyte *, ...)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5228 PRINTF_ARGS (2, 3);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5229 Lisp_Object maybe_signal_continuable_ferror (Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5230 Error_Behavior,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5231 const CIbyte *, ...)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5232 PRINTF_ARGS (4, 5);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5233
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5234 Lisp_Object build_error_data (const Ascbyte *reason, Lisp_Object frob);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5235 DECLARE_DOESNT_RETURN (signal_error (Lisp_Object, const Ascbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5236 Lisp_Object));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5237 void maybe_signal_error (Lisp_Object, const Ascbyte *, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5238 Lisp_Object, Error_Behavior);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5239 Lisp_Object signal_continuable_error (Lisp_Object, const Ascbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5240 Lisp_Object);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5241 Lisp_Object maybe_signal_continuable_error (Lisp_Object, const Ascbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5242 Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5243 Lisp_Object, Error_Behavior);
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
5244 DECLARE_DOESNT_RETURN (signal_ferror_with_frob (Lisp_Object, Lisp_Object,
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5245 const Ascbyte *, ...))
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
5246 PRINTF_ARGS(3, 4);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5247 void maybe_signal_ferror_with_frob (Lisp_Object, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5248 Error_Behavior,
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5249 const Ascbyte *, ...) PRINTF_ARGS (5, 6);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5250 Lisp_Object signal_continuable_ferror_with_frob (Lisp_Object, Lisp_Object,
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5251 const Ascbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5252 ...) PRINTF_ARGS (3, 4);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5253 Lisp_Object maybe_signal_continuable_ferror_with_frob (Lisp_Object,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5254 Lisp_Object,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5255 Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5256 Error_Behavior,
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5257 const Ascbyte *, ...)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5258 PRINTF_ARGS (5, 6);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5259 DECLARE_DOESNT_RETURN (signal_error_2 (Lisp_Object, const Ascbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5260 Lisp_Object, Lisp_Object));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5261 void maybe_signal_error_2 (Lisp_Object, const Ascbyte *, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5262 Lisp_Object, Lisp_Object, Error_Behavior);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5263 Lisp_Object signal_continuable_error_2 (Lisp_Object, const Ascbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5264 Lisp_Object, Lisp_Object);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5265 Lisp_Object maybe_signal_continuable_error_2 (Lisp_Object, const Ascbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5266 Lisp_Object, Lisp_Object,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5267 Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5268 Error_Behavior);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5269
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5270
1927
44905d8fae13 [xemacs-hg @ 2004-02-25 17:42:34 by james]
james
parents: 1743
diff changeset
5271 MODULE_API DECLARE_DOESNT_RETURN (signal_malformed_list_error (Lisp_Object));
44905d8fae13 [xemacs-hg @ 2004-02-25 17:42:34 by james]
james
parents: 1743
diff changeset
5272 MODULE_API DECLARE_DOESNT_RETURN (signal_malformed_property_list_error
44905d8fae13 [xemacs-hg @ 2004-02-25 17:42:34 by james]
james
parents: 1743
diff changeset
5273 (Lisp_Object));
44905d8fae13 [xemacs-hg @ 2004-02-25 17:42:34 by james]
james
parents: 1743
diff changeset
5274 MODULE_API DECLARE_DOESNT_RETURN (signal_circular_list_error (Lisp_Object));
44905d8fae13 [xemacs-hg @ 2004-02-25 17:42:34 by james]
james
parents: 1743
diff changeset
5275 MODULE_API DECLARE_DOESNT_RETURN (signal_circular_property_list_error
44905d8fae13 [xemacs-hg @ 2004-02-25 17:42:34 by james]
james
parents: 1743
diff changeset
5276 (Lisp_Object));
436
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
5277
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5278 DECLARE_DOESNT_RETURN (syntax_error (const Ascbyte *reason,
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
5279 Lisp_Object frob));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5280 DECLARE_DOESNT_RETURN (syntax_error_2 (const Ascbyte *reason,
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
5281 Lisp_Object frob1,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5282 Lisp_Object frob2));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5283 void maybe_syntax_error (const Ascbyte *, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5284 Error_Behavior);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5285 DECLARE_DOESNT_RETURN (sferror (const Ascbyte *reason, Lisp_Object frob));
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5286 DECLARE_DOESNT_RETURN (sferror_2 (const Ascbyte *reason, Lisp_Object frob1,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5287 Lisp_Object frob2));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5288 void maybe_sferror (const Ascbyte *, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5289 Error_Behavior);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5290 MODULE_API DECLARE_DOESNT_RETURN (invalid_argument (const Ascbyte *reason,
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5291 Lisp_Object frob));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5292 MODULE_API DECLARE_DOESNT_RETURN (invalid_argument_2 (const Ascbyte *reason,
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5293 Lisp_Object frob1,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5294 Lisp_Object frob2));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5295 void maybe_invalid_argument (const Ascbyte *, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5296 Error_Behavior);
5084
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
5297 MODULE_API DECLARE_DOESNT_RETURN (invalid_keyword_argument (Lisp_Object fun,
6afe991b8135 Add a PARSE_KEYWORDS macro, use it in #'make-hash-table.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5077
diff changeset
5298 Lisp_Object kw));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5299 MODULE_API DECLARE_DOESNT_RETURN (invalid_operation (const Ascbyte *reason,
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5300 Lisp_Object frob));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5301 MODULE_API DECLARE_DOESNT_RETURN (invalid_operation_2 (const Ascbyte *reason,
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5302 Lisp_Object frob1,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5303 Lisp_Object frob2));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5304 MODULE_API void maybe_invalid_operation (const Ascbyte *, Lisp_Object,
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5305 Lisp_Object, Error_Behavior);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5306 DECLARE_DOESNT_RETURN (invalid_state (const Ascbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5307 Lisp_Object frob));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5308 DECLARE_DOESNT_RETURN (invalid_state_2 (const Ascbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5309 Lisp_Object frob1,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5310 Lisp_Object frob2));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5311 void maybe_invalid_state (const Ascbyte *, Lisp_Object, Lisp_Object,
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
5312 Error_Behavior);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5313 DECLARE_DOESNT_RETURN (invalid_change (const Ascbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5314 Lisp_Object frob));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5315 DECLARE_DOESNT_RETURN (invalid_change_2 (const Ascbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5316 Lisp_Object frob1,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5317 Lisp_Object frob2));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5318 void maybe_invalid_change (const Ascbyte *, Lisp_Object, Lisp_Object,
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
5319 Error_Behavior);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5320 MODULE_API DECLARE_DOESNT_RETURN (invalid_constant (const Ascbyte *reason,
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5321 Lisp_Object frob));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5322 DECLARE_DOESNT_RETURN (invalid_constant_2 (const Ascbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5323 Lisp_Object frob1,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5324 Lisp_Object frob2));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5325 void maybe_invalid_constant (const Ascbyte *, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5326 Error_Behavior);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5327 DECLARE_DOESNT_RETURN (wtaerror (const Ascbyte *reason, Lisp_Object frob));
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5328 MODULE_API DECLARE_DOESNT_RETURN (out_of_memory (const Ascbyte *reason,
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5329 Lisp_Object frob));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5330 DECLARE_DOESNT_RETURN (stack_overflow (const Ascbyte *reason,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5331 Lisp_Object frob));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5332
436
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
5333 Lisp_Object signal_void_function_error (Lisp_Object);
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
5334 Lisp_Object signal_invalid_function_error (Lisp_Object);
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
5335 Lisp_Object signal_wrong_number_of_arguments_error (Lisp_Object, int);
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
5336
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5337 Lisp_Object run_hook_with_args_in_buffer (struct buffer *, int, Lisp_Object *,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5338 enum run_hooks_condition);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5339 Lisp_Object run_hook_with_args (int, Lisp_Object *, enum run_hooks_condition);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5340 void va_run_hook_with_args (Lisp_Object, int, ...);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5341 void va_run_hook_with_args_in_buffer (struct buffer *, Lisp_Object, int, ...);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5342 Lisp_Object run_hook (Lisp_Object);
1706
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5343 MODULE_API Lisp_Object apply1 (Lisp_Object, Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5344 MODULE_API Lisp_Object call0 (Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5345 MODULE_API Lisp_Object call1 (Lisp_Object, Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5346 MODULE_API Lisp_Object call2 (Lisp_Object, Lisp_Object, Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5347 MODULE_API Lisp_Object call3 (Lisp_Object, Lisp_Object, Lisp_Object,
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5348 Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5349 MODULE_API Lisp_Object call4 (Lisp_Object, Lisp_Object, Lisp_Object,
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5350 Lisp_Object, Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5351 MODULE_API Lisp_Object call5 (Lisp_Object, Lisp_Object, Lisp_Object,
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5352 Lisp_Object, Lisp_Object, Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5353 MODULE_API Lisp_Object call6 (Lisp_Object, Lisp_Object, Lisp_Object,
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5354 Lisp_Object, Lisp_Object, Lisp_Object,
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5355 Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5356 MODULE_API Lisp_Object call7 (Lisp_Object, Lisp_Object, Lisp_Object,
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5357 Lisp_Object, Lisp_Object, Lisp_Object,
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5358 Lisp_Object, Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5359 MODULE_API Lisp_Object call8 (Lisp_Object, Lisp_Object, Lisp_Object,
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5360 Lisp_Object, Lisp_Object, Lisp_Object,
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5361 Lisp_Object, Lisp_Object, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5362 Lisp_Object call0_in_buffer (struct buffer *, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5363 Lisp_Object call1_in_buffer (struct buffer *, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5364 Lisp_Object call2_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5365 Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5366 Lisp_Object call3_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5367 Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5368 Lisp_Object call4_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5369 Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5370 Lisp_Object call5_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5371 Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5372 Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5373 Lisp_Object call6_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5374 Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5375 Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5376 Lisp_Object eval_in_buffer (struct buffer *, Lisp_Object);
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5377
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5378 struct call_trapping_problems_result
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5379 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5380 int caught_error, caught_throw;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5381 Lisp_Object error_conditions, data;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5382 Lisp_Object backtrace;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5383 Lisp_Object thrown_tag;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5384 Lisp_Object thrown_value;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5385 };
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5386
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5387 #define NO_INHIBIT_ERRORS (1<<0)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5388 #define NO_INHIBIT_THROWS (1<<1)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5389 #define INTERNAL_INHIBIT_ERRORS (1<<0)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5390 #define INTERNAL_INHIBIT_THROWS (1<<1)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5391 #define INHIBIT_WARNING_ISSUE (1<<2)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5392 #define ISSUE_WARNINGS_AT_DEBUG_LEVEL (1<<3)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5393 #define INHIBIT_QUIT (1<<4)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5394 #define UNINHIBIT_QUIT (1<<5)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5395 #define INHIBIT_GC (1<<6)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5396 #define INHIBIT_EXISTING_PERMANENT_DISPLAY_OBJECT_DELETION (1<<7)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5397 #define INHIBIT_EXISTING_CODING_SYSTEM_DELETION (1<<8)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5398 #define INHIBIT_EXISTING_CHARSET_DELETION (1<<9)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5399 #define INHIBIT_PERMANENT_DISPLAY_OBJECT_CREATION (1<<10)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5400 #define INHIBIT_CODING_SYSTEM_CREATION (1<<11)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5401 #define INHIBIT_CHARSET_CREATION (1<<12)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5402 #define INHIBIT_EXISTING_BUFFER_TEXT_MODIFICATION (1<<13)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5403 #define INHIBIT_ANY_CHANGE_AFFECTING_REDISPLAY (1<<14)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5404 #define INHIBIT_ENTERING_DEBUGGER (1<<15)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5405 #define CALL_WITH_SUSPENDED_ERRORS (1<<16)
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
5406 #define POSTPONE_WARNING_ISSUE (1<<17)
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5407
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5408 enum check_allowed_operation
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5409 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5410 OPERATION_DELETE_OBJECT,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5411 OPERATION_CREATE_OBJECT,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5412 OPERATION_MODIFY_BUFFER_TEXT,
1429
969b7290edca [xemacs-hg @ 2003-04-24 05:33:43 by youngs]
youngs
parents: 1346
diff changeset
5413 OPERATION_MODIFY_OBJECT_PROPERTY
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5414 };
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5415
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5416 int get_inhibit_flags (void);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5417 void check_allowed_operation (int what, Lisp_Object obj, Lisp_Object prop);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5418 void note_object_created (Lisp_Object obj);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5419 void note_object_deleted (Lisp_Object obj);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5420 Lisp_Object call_with_condition_handler (Lisp_Object (*handler) (Lisp_Object,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5421 Lisp_Object,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5422 Lisp_Object),
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5423 Lisp_Object handler_arg,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5424 Lisp_Object (*fun) (Lisp_Object),
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5425 Lisp_Object arg);
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
5426 int set_trapping_problems_flags (int flags);
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5427 Lisp_Object call_trapping_problems (Lisp_Object warning_class,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5428 const Ascbyte *warning_string,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5429 int flags,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5430 struct call_trapping_problems_result
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5431 *problem,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5432 Lisp_Object (*fun) (void *),
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5433 void *arg);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5434 Lisp_Object va_call_trapping_problems (Lisp_Object warning_class,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5435 const Ascbyte *warning_string,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5436 int flags,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5437 struct call_trapping_problems_result
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5438 *problem,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5439 lisp_fn_t fun, int nargs, ...);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5440 Lisp_Object call0_trapping_problems (const Ascbyte *, Lisp_Object, int);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5441 Lisp_Object call1_trapping_problems (const Ascbyte *, Lisp_Object, Lisp_Object,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5442 int);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5443 Lisp_Object call2_trapping_problems (const Ascbyte *, Lisp_Object, Lisp_Object,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5444 Lisp_Object, int);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5445 Lisp_Object call3_trapping_problems (const Ascbyte *, Lisp_Object, Lisp_Object,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5446 Lisp_Object, Lisp_Object, int);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5447 Lisp_Object call4_trapping_problems (const Ascbyte *, Lisp_Object, Lisp_Object,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5448 Lisp_Object, Lisp_Object, Lisp_Object,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5449 int);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5450 Lisp_Object call5_trapping_problems (const Ascbyte *, Lisp_Object, Lisp_Object,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5451 Lisp_Object, Lisp_Object, Lisp_Object,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5452 Lisp_Object, int);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5453 Lisp_Object eval_in_buffer_trapping_problems (const Ascbyte *, struct buffer *,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5454 Lisp_Object, int);
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
5455 Lisp_Object run_hook_trapping_problems (Lisp_Object, Lisp_Object, int);
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
5456 Lisp_Object safe_run_hook_trapping_problems (Lisp_Object, Lisp_Object, int);
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
5457 Lisp_Object run_hook_with_args_in_buffer_trapping_problems (Lisp_Object,
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
5458 struct buffer *,
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
5459 int nargs,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5460 Lisp_Object *args,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5461 enum
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5462 run_hooks_condition
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5463 cond, int flags);
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
5464 Lisp_Object run_hook_with_args_trapping_problems (Lisp_Object,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5465 int nargs,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5466 Lisp_Object *args,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5467 enum run_hooks_condition
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5468 cond,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5469 int flags);
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
5470 Lisp_Object va_run_hook_with_args_trapping_problems (Lisp_Object,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5471 Lisp_Object hook_var,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5472 int nargs, ...);
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
5473 Lisp_Object va_run_hook_with_args_in_buffer_trapping_problems (Lisp_Object,
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
5474 struct buffer *,
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
5475 Lisp_Object,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5476 int nargs, ...);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5477 Lisp_Object call_with_suspended_errors (lisp_fn_t, Lisp_Object,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5478 Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5479 Error_Behavior, int, ...);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5480 /* C Code should be using internal_catch, record_unwind_p, condition_case_1 */
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
5481 int proper_redisplay_wrapping_in_place (void);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5482 Lisp_Object internal_catch (Lisp_Object, Lisp_Object (*) (Lisp_Object),
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5483 Lisp_Object, int * volatile,
2532
989a7680c221 [xemacs-hg @ 2005-01-29 09:15:55 by ben]
ben
parents: 2526
diff changeset
5484 Lisp_Object * volatile,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5485 Lisp_Object * volatile);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5486 Lisp_Object condition_case_1 (Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5487 Lisp_Object (*) (Lisp_Object),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5488 Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5489 Lisp_Object (*) (Lisp_Object, Lisp_Object),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5490 Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5491 Lisp_Object condition_case_3 (Lisp_Object, Lisp_Object, Lisp_Object);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5492 MODULE_API Lisp_Object unbind_to_1 (int, Lisp_Object);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5493 #define unbind_to(obj) unbind_to_1 (obj, Qnil)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5494 void specbind (Lisp_Object, Lisp_Object);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5495 MODULE_API int record_unwind_protect (Lisp_Object (*) (Lisp_Object),
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5496 Lisp_Object);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5497 int record_unwind_protect_freeing_dynarr (void *ptr);
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
5498 int record_unwind_protect_restoring_int (int *addr, int val);
802
19dfb459d51a [xemacs-hg @ 2002-04-03 10:47:37 by ben]
ben
parents: 801
diff changeset
5499 int internal_bind_int (int *addr, int newval);
19dfb459d51a [xemacs-hg @ 2002-04-03 10:47:37 by ben]
ben
parents: 801
diff changeset
5500 int internal_bind_lisp_object (Lisp_Object *addr, Lisp_Object newval);
970
0dc7756a58c4 [xemacs-hg @ 2002-08-22 11:31:39 by stephent]
stephent
parents: 934
diff changeset
5501 void do_autoload (Lisp_Object, Lisp_Object); /* GCPROs both arguments */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5502 Lisp_Object un_autoload (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5503 void warn_when_safe_lispobj (Lisp_Object, Lisp_Object, Lisp_Object);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5504 MODULE_API void warn_when_safe (Lisp_Object, Lisp_Object, const Ascbyte *,
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5505 ...) PRINTF_ARGS (3, 4);
1292
f3437b56874d [xemacs-hg @ 2003-02-13 09:57:04 by ben]
ben
parents: 1268
diff changeset
5506 extern int backtrace_with_internal_sections;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5507
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5508 extern Lisp_Object Qand_optional;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5509 extern Lisp_Object Qand_rest;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5510 extern Lisp_Object Qautoload;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5511 extern Lisp_Object Qcommandp;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5512 extern Lisp_Object Qdefun;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5513 extern Lisp_Object Qexit;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5514 extern Lisp_Object Qinhibit_quit;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5515 extern Lisp_Object Qinteractive;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5516 extern Lisp_Object Qmacro;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5517 extern Lisp_Object Qprogn;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5518 extern Lisp_Object Qrun_hooks;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5519 extern Lisp_Object Qvalues;
4841
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 4805
diff changeset
5520 extern Lisp_Object Vdebug_on_error;
1315
70921960b980 [xemacs-hg @ 2003-02-20 08:19:28 by ben]
ben
parents: 1292
diff changeset
5521 extern Lisp_Object Vstack_trace_on_error;
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5522 extern Lisp_Object Vautoload_queue;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5523
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5524 extern MODULE_API Lisp_Object Vinhibit_quit, Vquit_flag;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5525
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5526 /* Defined in event-stream.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5527 EXFUN (Faccept_process_output, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5528 EXFUN (Fadd_timeout, 4);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5529 EXFUN (Fdisable_timeout, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5530 EXFUN (Fdiscard_input, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5531 EXFUN (Fdispatch_event, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5532 EXFUN (Fenqueue_eval_event, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5533 EXFUN (Fnext_event, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5534 EXFUN (Fread_key_sequence, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5535 EXFUN (Fsit_for, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5536 EXFUN (Fsleep_for, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5537
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5538 void wait_delaying_user_input (int (*) (void *), void *);
1268
fffe735e63ee [xemacs-hg @ 2003-02-07 11:50:50 by ben]
ben
parents: 1261
diff changeset
5539 int detect_input_pending (int how_many);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5540 void reset_this_command_keys (Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5541 Lisp_Object enqueue_misc_user_event (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5542 Lisp_Object enqueue_misc_user_event_pos (Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5543 Lisp_Object, int, int, int, int);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5544 extern int modifier_keys_are_sticky;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5545
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5546 extern Lisp_Object Qdisabled;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5547 extern Lisp_Object Qsans_modifiers;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5548 extern Lisp_Object Qself_insert_defer_undo;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5549 extern Lisp_Object Vcontrolling_terminal;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5550 extern Lisp_Object Vcurrent_mouse_event;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5551 extern Lisp_Object Vlast_command;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5552 extern Lisp_Object Vlast_command_char;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5553 extern Lisp_Object Vlast_command_event;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5554 extern Lisp_Object Vlast_input_event;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5555 extern Lisp_Object Vrecent_keys_ring;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5556 extern Lisp_Object Vthis_command_keys;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5557 extern Lisp_Object Vunread_command_event;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5558
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5559 /* Defined in event-Xt.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5560 void signal_special_Xt_user_event (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5561
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5562
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5563 /* Defined in events.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5564 EXFUN (Fcopy_event, 2);
2862
b95fe16005fd [xemacs-hg @ 2005-07-17 20:08:40 by aidan]
aidan
parents: 2834
diff changeset
5565 EXFUN (Fevent_to_character, 4);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5566
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5567 void clear_event_resource (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5568 Lisp_Object allocate_event (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5569
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5570 EXFUN (Fevent_x_pixel, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5571 EXFUN (Fevent_y_pixel, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5572
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5573 extern Lisp_Object Qevent_live_p;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5574
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5575
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5576 /* Defined in extents.c */
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5577 extern Lisp_Object Qend_open;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5578 extern Lisp_Object Qextent_live_p;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5579 extern Lisp_Object Qstart_open;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5580
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5581 /* Defined in faces.c */
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5582 extern Lisp_Object Qbackground;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5583 extern Lisp_Object Qbackground_pixmap;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5584 extern Lisp_Object Qblinking;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5585 extern Lisp_Object Qdim;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5586 extern Lisp_Object Qdisplay_table;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5587 extern Lisp_Object Qforeground;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5588 extern Lisp_Object Qunderline;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5589
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5590 /* Defined in file-coding.c */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5591 EXFUN (Fcoding_category_list, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5592 EXFUN (Fcoding_category_system, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5593 EXFUN (Fcoding_priority_list, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5594 EXFUN (Fcoding_system_description, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5595 EXFUN (Fcoding_system_documentation, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5596 EXFUN (Fcoding_system_list, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5597 EXFUN (Fcoding_system_name, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5598 EXFUN (Fcoding_system_p, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5599 EXFUN (Fcoding_system_property, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5600 EXFUN (Fcoding_system_type, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5601 EXFUN (Fcopy_coding_system, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5602 EXFUN (Fdecode_big5_char, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5603 EXFUN (Fdecode_coding_region, 4);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5604 EXFUN (Fdecode_shift_jis_char, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5605 EXFUN (Fdefine_coding_system_alias, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5606 EXFUN (Fdetect_coding_region, 3);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5607 EXFUN (Fdefault_encoding_detection_enabled_p, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5608 EXFUN (Fencode_big5_char, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5609 EXFUN (Fencode_coding_region, 4);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5610 EXFUN (Fencode_shift_jis_char, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5611 EXFUN (Ffind_coding_system, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5612 EXFUN (Fget_coding_system, 1);
4690
257b468bf2ca Move the #'query-coding-region implementation to C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4682
diff changeset
5613 EXFUN (Fmake_coding_system_internal, 4);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5614 EXFUN (Fset_coding_category_system, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5615 EXFUN (Fset_coding_priority_list, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5616 EXFUN (Fsubsidiary_coding_system, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5617
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5618 extern Lisp_Object Qshift_jis, Qiso2022, Qbig5, Qccl;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5619 extern Lisp_Object Qcharset_g0;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5620 extern Lisp_Object Qcharset_g1, Qcharset_g2, Qcharset_g3, Qcoding_system_error;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5621 extern Lisp_Object Qcoding_systemp, Qcr, Qcrlf, Qdecode, Qencode;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5622 extern Lisp_Object Qeol_cr, Qeol_crlf, Qeol_lf, Qeol_type, Qescape_quoted;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5623 extern Lisp_Object Qforce_g0_on_output, Qforce_g1_on_output;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5624 extern Lisp_Object Qforce_g2_on_output, Qforce_g3_on_output;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5625 extern Lisp_Object Qinput_charset_conversion, Qlf, Qlock_shift;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5626 extern Lisp_Object Qmnemonic, Qno_ascii_cntl, Qno_ascii_eol;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5627 extern Lisp_Object Qno_conversion, Qraw_text;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5628 extern Lisp_Object Qno_iso6429, Qoutput_charset_conversion;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5629 extern Lisp_Object Qpost_read_conversion, Qpre_write_conversion, Qseven;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5630 extern Lisp_Object Qshort, Vcoding_system_for_read;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5631 extern Lisp_Object Vcoding_system_for_write;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5632 extern Lisp_Object Vfile_name_coding_system, Vkeyboard_coding_system;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5633 extern Lisp_Object Vterminal_coding_system;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5634 extern Lisp_Object Qcanonicalize_after_coding;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5635 int coding_system_is_for_text_file (Lisp_Object coding_system);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5636 Lisp_Object find_coding_system_for_text_file (Lisp_Object name, int eol_wrap);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5637 MODULE_API Lisp_Object get_coding_system_for_text_file (Lisp_Object name,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5638 int eol_wrap);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5639 int coding_system_is_binary (Lisp_Object coding_system);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5640
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5641
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5642 /* Defined in fileio.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5643 EXFUN (Fdirectory_file_name, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5644 EXFUN (Fdo_auto_save, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5645 EXFUN (Fexpand_file_name, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5646 EXFUN (Ffile_accessible_directory_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5647 EXFUN (Ffile_directory_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5648 EXFUN (Ffile_executable_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5649 EXFUN (Ffile_exists_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5650 EXFUN (Ffile_name_absolute_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5651 EXFUN (Ffile_name_as_directory, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5652 EXFUN (Ffile_name_directory, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5653 EXFUN (Ffile_name_nondirectory, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5654 EXFUN (Ffile_readable_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5655 EXFUN (Ffile_symlink_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5656 EXFUN (Ffile_truename, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5657 EXFUN (Ffind_file_name_handler, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5658 EXFUN (Finsert_file_contents_internal, 7);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5659 EXFUN (Fmake_temp_name, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5660 EXFUN (Fsubstitute_in_file_name, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5661 EXFUN (Funhandled_file_name_directory, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5662 EXFUN (Fverify_visited_file_modtime, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5663
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5664 void record_auto_save (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5665 void force_auto_save_soon (void);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5666 DECLARE_DOESNT_RETURN (report_error_with_errno (Lisp_Object errtype,
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5667 const Ascbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5668 Lisp_Object data));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5669 DECLARE_DOESNT_RETURN (report_file_error (const Ascbyte *, Lisp_Object));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5670 Lisp_Object lisp_strerror (int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5671 Lisp_Object expand_and_dir_to_file (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5672 int internal_delete_file (Lisp_Object);
2526
902d5bd9b75c [xemacs-hg @ 2005-01-28 02:36:11 by ben]
ben
parents: 2516
diff changeset
5673 Ibyte *find_end_of_directory_component (const Ibyte *path,
902d5bd9b75c [xemacs-hg @ 2005-01-28 02:36:11 by ben]
ben
parents: 2516
diff changeset
5674 Bytecount len);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5675
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5676 extern Lisp_Object Qfile_name_sans_extension;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5677 extern Lisp_Object Vdirectory_sep_char;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5678
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5679 /* Defined in filelock.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5680 EXFUN (Funlock_buffer, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5681
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5682 void lock_file (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5683 void unlock_file (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5684 void unlock_all_files (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5685 void unlock_buffer (struct buffer *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5686
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5687 /* Defined in floatfns.c */
4678
b5e1d4f6b66f Make #'floor, #'ceiling, #'round, #'truncate conform to Common Lisp.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4677
diff changeset
5688 EXFUN (Ftruncate, 2);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5689
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5690 double extract_float (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5691
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5692 /* Defined in fns.c */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5693 MODULE_API EXFUN (Fappend, MANY);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5694 EXFUN (Fassoc, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5695 EXFUN (Fassq, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5696 EXFUN (Fcanonicalize_lax_plist, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5697 EXFUN (Fcanonicalize_plist, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5698 EXFUN (Fcheck_valid_plist, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5699 EXFUN (Fconcat, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5700 EXFUN (Fcopy_alist, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5701 EXFUN (Fcopy_list, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5702 EXFUN (Fcopy_sequence, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5703 EXFUN (Fcopy_tree, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5704 EXFUN (Fdelete, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5705 EXFUN (Fdelq, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5706 EXFUN (Fdestructive_alist_to_plist, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5707 EXFUN (Felt, 2);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5708 MODULE_API EXFUN (Fequal, 2);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5709 MODULE_API EXFUN (Fget, 3);
4906
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4888
diff changeset
5710 MODULE_API EXFUN (Feqlsign, MANY);
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4888
diff changeset
5711 MODULE_API EXFUN (Fequalp, 2);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5712 EXFUN (Flast, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5713 EXFUN (Flax_plist_get, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5714 EXFUN (Flax_plist_remprop, 2);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5715 MODULE_API EXFUN (Flength, 1);
4995
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
5716 EXFUN (FmapcarX, MANY);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5717 EXFUN (Fmember, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5718 EXFUN (Fmemq, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5719 EXFUN (Fnconc, MANY);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5720 MODULE_API EXFUN (Fnreverse, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5721 EXFUN (Fnthcdr, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5722 EXFUN (Fold_assq, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5723 EXFUN (Fold_equal, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5724 EXFUN (Fold_member, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5725 EXFUN (Fold_memq, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5726 EXFUN (Fplist_get, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5727 EXFUN (Fplist_member, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5728 EXFUN (Fplist_put, 3);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5729 MODULE_API EXFUN (Fprovide, 1);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5730 MODULE_API EXFUN (Fput, 3);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5731 EXFUN (Frassq, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5732 EXFUN (Fremassq, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5733 EXFUN (Freplace_list, 2);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5734 MODULE_API EXFUN (Freverse, 1);
1268
fffe735e63ee [xemacs-hg @ 2003-02-07 11:50:50 by ben]
ben
parents: 1261
diff changeset
5735 EXFUN (Fsafe_length, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5736 EXFUN (Fsort, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5737 EXFUN (Fstring_equal, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5738 EXFUN (Fstring_lessp, 2);
5089
99f8ebc082d9 Make #'substring an alias of #'subseq; give the latter the byte code.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5084
diff changeset
5739 EXFUN (Fsubseq, 3);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5740 EXFUN (Fvalid_plist_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5741
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5742 Lisp_Object list_sort (Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5743 int (*) (Lisp_Object, Lisp_Object, Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5744 Lisp_Object merge (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5745
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5746 void bump_string_modiff (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5747 Lisp_Object memq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5748 Lisp_Object assoc_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5749 Lisp_Object assq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5750 Lisp_Object rassq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5751 Lisp_Object delq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5752 Lisp_Object delq_no_quit_and_free_cons (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5753 Lisp_Object remassoc_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5754 Lisp_Object remassq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5755 Lisp_Object remrassq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5756
4906
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4888
diff changeset
5757 int plists_differ (Lisp_Object, Lisp_Object, int, int, int, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5758 Lisp_Object internal_plist_get (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5759 void internal_plist_put (Lisp_Object *, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5760 int internal_remprop (Lisp_Object *, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5761 Lisp_Object external_plist_get (Lisp_Object *, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5762 int, Error_Behavior);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5763 void external_plist_put (Lisp_Object *, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5764 Lisp_Object, int, Error_Behavior);
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5765 int external_remprop (Lisp_Object *, Lisp_Object, int, Error_Behavior);
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5766 int internal_equal_trapping_problems (Lisp_Object warning_class,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5767 const Ascbyte *warning_string,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5768 int flags,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5769 struct call_trapping_problems_result *p,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5770 int retval,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5771 Lisp_Object obj1, Lisp_Object obj2,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5772 int depth);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5773 int internal_equal (Lisp_Object, Lisp_Object, int);
801
2b676dc88c66 [xemacs-hg @ 2002-04-01 03:58:02 by ben]
ben
parents: 800
diff changeset
5774 int internal_equalp (Lisp_Object obj1, Lisp_Object obj2, int depth);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5775 Lisp_Object MODULE_API concat2 (Lisp_Object, Lisp_Object);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5776 Lisp_Object MODULE_API concat3 (Lisp_Object, Lisp_Object, Lisp_Object);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5777 Lisp_Object MODULE_API vconcat2 (Lisp_Object, Lisp_Object);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5778 Lisp_Object MODULE_API vconcat3 (Lisp_Object, Lisp_Object, Lisp_Object);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5779 Lisp_Object MODULE_API nconc2 (Lisp_Object, Lisp_Object);
4906
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4888
diff changeset
5780 int internal_equal_0 (Lisp_Object, Lisp_Object, int, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5781 Lisp_Object bytecode_nconc2 (Lisp_Object *);
4910
6bc1f3f6cf0d Make canoncase visible to Lisp; use it with chars in internal_equalp.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4906
diff changeset
5782 int bytecode_arithcompare (Lisp_Object obj1, Lisp_Object obj2);
5000
44d7bde26046 fix compile errors, fix revert-buffer bug on binary/Latin 1 files, Mule-ize some files
Ben Wing <ben@xemacs.org>
parents: 4982
diff changeset
5783 void check_losing_bytecode (const Ascbyte *, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5784
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5785 Lisp_Object add_suffix_to_symbol (Lisp_Object symbol,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5786 const Ascbyte *ascii_string);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5787 Lisp_Object add_prefix_to_symbol (const Ascbyte *ascii_string,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5788 Lisp_Object symbol);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5789
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5790 extern Lisp_Object Qidentity;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5791 extern Lisp_Object Qstring_lessp;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5792 extern Lisp_Object Qyes_or_no_p;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5793 extern Lisp_Object Vfeatures;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5794
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5795 /* Defined in frame.c */
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5796 extern Lisp_Object Qframe_live_p;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5797
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5798 /* Defined in free-hook.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5799 EXFUN (Freally_free, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5800
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5801 /* Defined in general.c */
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5802 #define SYMBOL(fou) extern Lisp_Object fou
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5803 #define SYMBOL_MODULE_API(fou) extern MODULE_API Lisp_Object fou
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5804 #define SYMBOL_KEYWORD(la_cle_est_fou) extern Lisp_Object la_cle_est_fou
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5805 #define SYMBOL_GENERAL(tout_le_monde, est_fou) \
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5806 extern Lisp_Object tout_le_monde
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5807
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5808 #include "general-slots.h"
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5809
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5810 #undef SYMBOL
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5811 #undef SYMBOL_MODULE_API
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5812 #undef SYMBOL_KEYWORD
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5813 #undef SYMBOL_GENERAL
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5814
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5815 /* Defined in glyphs.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5816 EXFUN (Fmake_glyph_internal, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5817
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5818 Error_Behavior decode_error_behavior_flag (Lisp_Object);
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5819 Lisp_Object encode_error_behavior_flag (Error_Behavior);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5820
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5821 extern Lisp_Object Qbuffer_glyph_p;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5822 extern Lisp_Object Qcolor_pixmap_image_instance_p;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5823 extern Lisp_Object Qicon_glyph_p;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5824 extern Lisp_Object Qmono_pixmap_image_instance_p;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5825 extern Lisp_Object Qnothing_image_instance_p;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5826 extern Lisp_Object Qpointer_glyph_p;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5827 extern Lisp_Object Qpointer_image_instance_p;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5828 extern Lisp_Object Qsubwindow;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5829 extern Lisp_Object Qsubwindow_image_instance_p;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5830 extern Lisp_Object Qtext_image_instance_p;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5831
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5832 /* Defined in glyphs-shared.c */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5833 void shared_resource_validate (Lisp_Object instantiator);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5834 Lisp_Object shared_resource_normalize (Lisp_Object inst,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5835 Lisp_Object console_type,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5836 Lisp_Object dest_mask,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5837 Lisp_Object tag);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5838 extern Lisp_Object Q_resource_type, Q_resource_id;
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5839
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5840 /* Defined in glyphs-widget.c */
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5841 extern Lisp_Object Qlayout;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5842 extern Lisp_Object Qnative_layout;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5843
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5844 /* Defined in gui.c */
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5845 DECLARE_DOESNT_RETURN (gui_error (const Ascbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5846 Lisp_Object frob));
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5847 DECLARE_DOESNT_RETURN (gui_error_2 (const Ascbyte *reason,
569
9cdcb214753f [xemacs-hg @ 2001-05-24 12:20:33 by yoshiki]
yoshiki
parents: 563
diff changeset
5848 Lisp_Object frob0, Lisp_Object frob1));
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5849 extern Lisp_Object Qgui_error;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5850
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5851 /* Defined in indent.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5852 EXFUN (Findent_to, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5853 EXFUN (Fvertical_motion, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5854
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5855 int byte_spaces_at_point (struct buffer *, Bytebpos);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
5856 int column_at_point (struct buffer *, Charbpos, int);
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
5857 int string_column_at_point (Lisp_Object, Charbpos, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5858 int current_column (struct buffer *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5859 void invalidate_current_column (void);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
5860 Charbpos vmotion (struct window *, Charbpos, int, int *);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
5861 Charbpos vmotion_pixels (Lisp_Object, Charbpos, int, int, int *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5862
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5863 /* Defined in insdel.c */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5864 void set_buffer_point (struct buffer *buf, Charbpos pos, Bytebpos bipos);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5865
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5866 /* Defined in intl.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5867 EXFUN (Fgettext, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5868
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5869 /* Defined in keymap.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5870 EXFUN (Fdefine_key, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5871 EXFUN (Fkey_description, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5872 EXFUN (Flookup_key, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5873 EXFUN (Fmake_sparse_keymap, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5874
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
5875 void where_is_to_char (Lisp_Object, Eistring *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5876
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5877 /* Defined in lread.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5878 EXFUN (Fread, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5879
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5880 void ebolify_bytecode_constants (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5881 void close_load_descs (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5882 int locate_file (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object *, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5883 EXFUN (Flocate_file_clear_hashing, 1);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5884 int isfloat_string (const char *);
1983
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
5885 #ifdef HAVE_RATIO
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
5886 int isratio_string (const char *);
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
5887 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5888
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5889 /* Well, I've decided to enable this. -- ben */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5890 /* And I've decided to make it work right. -- sb */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5891 #define LOADHIST
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5892 /* Define the following symbol to enable load history of dumped files */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5893 #define LOADHIST_DUMPED
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5894 /* Define the following symbol to enable load history of C source */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5895 #define LOADHIST_BUILTIN
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5896
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5897 #ifdef LOADHIST /* this is just a stupid idea */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5898 #define LOADHIST_ATTACH(x) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5899 do { if (initialized) Vcurrent_load_list = Fcons (x, Vcurrent_load_list); } \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5900 while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5901 #else /*! LOADHIST */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5902 # define LOADHIST_ATTACH(x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5903 #endif /*! LOADHIST */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5904
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5905 extern Lisp_Object Qfeaturep;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5906 extern Lisp_Object Qload;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5907 extern Lisp_Object Qread_char;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5908 extern Lisp_Object Qstandard_input;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5909 extern Lisp_Object Vcurrent_load_list;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5910 extern Lisp_Object Vfile_domain;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5911 extern Lisp_Object Vload_file_name_internal;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5912 extern Lisp_Object Vload_history;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5913 extern Lisp_Object Vload_path;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5914 extern Lisp_Object Vstandard_input;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5915
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5916 /* Defined in macros.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5917 EXFUN (Fexecute_kbd_macro, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5918
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5919 extern Lisp_Object Vexecuting_macro;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5920
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5921 /* Defined in marker.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5922 EXFUN (Fcopy_marker, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5923 EXFUN (Fmake_marker, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5924 EXFUN (Fmarker_buffer, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5925 EXFUN (Fmarker_position, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5926 EXFUN (Fset_marker, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5927 EXFUN (Fset_marker_insertion_type, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5928
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5929 Bytebpos byte_marker_position (Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
5930 Charbpos marker_position (Lisp_Object);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5931 void set_byte_marker_position (Lisp_Object, Bytebpos);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
5932 void set_marker_position (Lisp_Object, Charbpos);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5933 void unchain_marker (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5934 Lisp_Object noseeum_copy_marker (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5935 Lisp_Object set_marker_restricted (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5936 #ifdef MEMORY_USAGE_STATS
5157
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5146
diff changeset
5937 int compute_buffer_marker_usage (struct buffer *, struct usage_stats *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5938 #endif
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5939 void init_buffer_markers (struct buffer *b);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5940 void uninit_buffer_markers (struct buffer *b);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5941
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5942 /* Defined in menubar.c */
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5943 extern Lisp_Object Qactivate_menubar_hook;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5944 extern Lisp_Object Qcurrent_menubar;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5945 extern Lisp_Object Vactivate_menubar_hook;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5946 extern Lisp_Object Vblank_menubar;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5947 extern Lisp_Object Vmenubar_configuration;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5948
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5949 /* Defined in minibuf.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5950 extern int minibuf_level;
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5951 Charcount scmp_1 (const Ibyte *, const Ibyte *, Charcount, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5952 #define scmp(s1, s2, len) scmp_1 (s1, s2, len, completion_ignore_case)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5953 extern int completion_ignore_case;
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5954 int regexp_ignore_completion_p (const Ibyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5955 Bytecount, Bytecount);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5956 Lisp_Object clear_echo_area (struct frame *, Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5957 Lisp_Object clear_echo_area_from_print (struct frame *, Lisp_Object, int);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5958 void echo_area_append (struct frame *, const Ibyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5959 Bytecount, Bytecount, Lisp_Object);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5960 void echo_area_message (struct frame *, const Ibyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5961 Bytecount, Bytecount, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5962 Lisp_Object echo_area_status (struct frame *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5963 int echo_area_active (struct frame *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5964 Lisp_Object echo_area_contents (struct frame *);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5965 void message_internal (const Ibyte *, Lisp_Object, Bytecount, Bytecount);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5966 void message_append_internal (const Ibyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5967 Bytecount, Bytecount);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5968 MODULE_API void message (const char *, ...) PRINTF_ARGS (1, 2);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5969 void message_append (const char *, ...) PRINTF_ARGS (1, 2);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5970 void message_no_translate (const char *, ...) PRINTF_ARGS (1, 2);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5971 void clear_message (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5972
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5973 extern Lisp_Object Qcompletion_ignore_case;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5974 extern Lisp_Object Vecho_area_buffer;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5975 extern Lisp_Object Vminibuf_preprompt;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5976 extern Lisp_Object Vminibuf_prompt;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5977 extern Lisp_Object Vminibuffer_zero;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5978
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5979 /* Defined in mule-charset.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5980 EXFUN (Fmake_charset, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5981
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5982 extern Lisp_Object Ql2r, Qr2l;
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5983 extern Lisp_Object Qdirection;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5984 extern Lisp_Object Qfinal;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5985 extern Lisp_Object Qgraphic;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5986 extern Lisp_Object Qlong_name;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5987 extern Lisp_Object Qregistries;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5988 extern Lisp_Object Qreverse_direction_charset;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5989 extern Lisp_Object Qshort_name;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5990
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5991 /* Defined in nt.c */
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
5992 extern Lisp_Object Vmswindows_get_true_file_attributes;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5993
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5994 /* Defined in print.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5995 EXFUN (Fdisplay_error, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5996 EXFUN (Ferror_message_string, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5997 EXFUN (Fprin1, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5998 EXFUN (Fprin1_to_string, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5999 EXFUN (Fprinc, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6000 EXFUN (Fprint, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6001
4394
cacc942c0d0f Avoid clearing print-gensym-alist inappropriately when printing hash tables.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4355
diff changeset
6002 Lisp_Object prin1_to_string (Lisp_Object, int);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6003
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6004 /* Lower-level ways to output data: */
3085
d9ca850d40de [xemacs-hg @ 2005-11-22 09:02:37 by crestani]
crestani
parents: 3063
diff changeset
6005 void default_object_printer (Lisp_Object, Lisp_Object, int);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6006 void print_internal (Lisp_Object, Lisp_Object, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6007 void debug_print (Lisp_Object);
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6008 void debug_p4 (Lisp_Object obj);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6009 void debug_p3 (Lisp_Object obj);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6010 void debug_short_backtrace (int);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6011 void debug_backtrace (void);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6012 /* NOTE: Do not call this with the data of a Lisp_String. Use princ.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6013 * Note: stream should be defaulted before calling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6014 * (eg Qnil means stdout, not Vstandard_output, etc) */
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
6015 MODULE_API void write_istring (Lisp_Object stream, const Ibyte *str);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6016 /* Same goes for this function. */
4953
304aebb79cd3 function renamings to track names of char typedefs
Ben Wing <ben@xemacs.org>
parents: 4952
diff changeset
6017 MODULE_API void write_cistring (Lisp_Object stream, const CIbyte *str);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6018 /* Same goes for this function. */
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
6019 MODULE_API void write_ascstring (Lisp_Object stream, const Ascbyte *str);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6020 /* Same goes for this function. */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6021 void write_string_1 (Lisp_Object stream, const Ibyte *str, Bytecount size);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6022 void write_eistring (Lisp_Object stream, const Eistring *ei);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6023
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6024 /* Higher-level (printf-style) ways to output data: */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
6025 MODULE_API void write_fmt_string (Lisp_Object stream, const CIbyte *fmt, ...);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
6026 MODULE_API void write_fmt_string_lisp (Lisp_Object stream, const CIbyte *fmt,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
6027 int nargs, ...);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6028 void stderr_out (const CIbyte *, ...) PRINTF_ARGS (1, 2);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6029 void stderr_out_lisp (const CIbyte *, int nargs, ...);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6030 void stdout_out (const CIbyte *, ...) PRINTF_ARGS (1, 2);
1346
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1333
diff changeset
6031 void external_out (int dest, const CIbyte *fmt, ...) PRINTF_ARGS (2, 3);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6032 void debug_out (const CIbyte *, ...) PRINTF_ARGS (1, 2);
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
6033 DECLARE_DOESNT_RETURN (fatal (const CIbyte *, ...)) PRINTF_ARGS(1, 2);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6034
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6035 /* Internal functions: */
1261
465bd3c7d932 [xemacs-hg @ 2003-02-06 06:35:47 by ben]
ben
parents: 1204
diff changeset
6036 Lisp_Object canonicalize_printcharfun (Lisp_Object printcharfun);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6037 void temp_output_buffer_setup (Lisp_Object);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6038 void temp_output_buffer_show (Lisp_Object, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6039 void print_cons (Lisp_Object, Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6040 void print_vector (Lisp_Object, Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6041 void print_string (Lisp_Object, Lisp_Object, int);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6042 void print_symbol (Lisp_Object, Lisp_Object, int);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6043 void print_float (Lisp_Object, Lisp_Object, int);
603
1c880911c386 [xemacs-hg @ 2001-06-01 08:23:09 by martinb]
martinb
parents: 593
diff changeset
6044 /* The number of bytes required to store the decimal printed
1c880911c386 [xemacs-hg @ 2001-06-01 08:23:09 by martinb]
martinb
parents: 593
diff changeset
6045 representation of an integral type. Add a few bytes for truncation,
1c880911c386 [xemacs-hg @ 2001-06-01 08:23:09 by martinb]
martinb
parents: 593
diff changeset
6046 optional sign prefix, and null byte terminator.
614
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
6047 2.40824 == log (256) / log (10).
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
6048
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
6049 We don't use floating point since Sun cc (buggily?) cannot use
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
6050 floating point computations to define a compile-time integral
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
6051 constant. */
603
1c880911c386 [xemacs-hg @ 2001-06-01 08:23:09 by martinb]
martinb
parents: 593
diff changeset
6052 #define DECIMAL_PRINT_SIZE(integral_type) \
614
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
6053 (((2410824 * sizeof (integral_type)) / 1000000) + 3)
577
910449c92002 [xemacs-hg @ 2001-05-25 10:04:26 by hrvojen]
hrvojen
parents: 569
diff changeset
6054 void long_to_string (char *, long);
4329
d9eb5ea14f65 Provide %b in #'format; use it for converting between ints and bit vectors.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4134
diff changeset
6055 void ulong_to_bit_string (char *, unsigned long);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6056 extern int print_escape_newlines;
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
6057 extern MODULE_API int print_readably;
4880
ae81a2c00f4f try harder to avoid crashing when debug-printing
Ben Wing <ben@xemacs.org>
parents: 4854
diff changeset
6058 extern int in_debug_print;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6059 Lisp_Object internal_with_output_to_temp_buffer (Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6060 Lisp_Object (*) (Lisp_Object),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6061 Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6062 void float_to_string (char *, double);
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 5117 4744
diff changeset
6063 void internal_object_printer (Lisp_Object obj, Lisp_Object printcharfun,
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 5117 4744
diff changeset
6064 int UNUSED (escapeflag));
5117
3742ea8250b5 Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents: 3063
diff changeset
6065 void external_object_printer (Lisp_Object obj, Lisp_Object printcharfun,
3742ea8250b5 Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents: 3063
diff changeset
6066 int UNUSED (escapeflag));
5142
f965e31a35f0 reduce lcrecord headers to 2 words, rename printing_unreadable_object
Ben Wing <ben@xemacs.org>
parents: 5128
diff changeset
6067 MODULE_API DECLARE_DOESNT_RETURN (printing_unreadable_object_fmt (const CIbyte *,
4846
a98ca4640147 clean up object print methods
Ben Wing <ben@xemacs.org>
parents: 4844
diff changeset
6068 ...))
a98ca4640147 clean up object print methods
Ben Wing <ben@xemacs.org>
parents: 4844
diff changeset
6069 PRINTF_ARGS (1, 2);
5142
f965e31a35f0 reduce lcrecord headers to 2 words, rename printing_unreadable_object
Ben Wing <ben@xemacs.org>
parents: 5128
diff changeset
6070 DECLARE_DOESNT_RETURN (printing_unreadable_lisp_object (Lisp_Object obj,
4846
a98ca4640147 clean up object print methods
Ben Wing <ben@xemacs.org>
parents: 4844
diff changeset
6071 const Ibyte *name));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6072
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6073 extern Lisp_Object Qexternal_debugging_output;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6074 extern Lisp_Object Qprint_length;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6075 extern Lisp_Object Qprint_string_length;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6076 extern Lisp_Object Qstandard_output;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6077 extern Lisp_Object Vprint_length;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6078 extern Lisp_Object Vprint_level;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6079 extern Lisp_Object Vstandard_output;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6080
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6081 /* Defined in process.c */
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6082 extern Lisp_Object Qnetwork_error;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6083 extern MODULE_API Lisp_Object Qprocess_error;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6084 extern Lisp_Object Vprocess_environment;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6085 extern Lisp_Object Vshell_file_name;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6086
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6087 /* Defined in rangetab.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6088 EXFUN (Fclear_range_table, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6089 EXFUN (Fget_range_table, 3);
2421
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
6090 EXFUN (Fmake_range_table, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6091 EXFUN (Fput_range_table, 4);
4690
257b468bf2ca Move the #'query-coding-region implementation to C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4682
diff changeset
6092 EXFUN (Fcopy_range_table, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6093
2421
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
6094 extern Lisp_Object Qstart_closed_end_open;
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
6095 extern Lisp_Object Qstart_open_end_open;
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
6096 extern Lisp_Object Qstart_closed_end_closed;
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
6097 extern Lisp_Object Qstart_open_end_closed;
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
6098
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6099 void put_range_table (Lisp_Object, EMACS_INT, EMACS_INT, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6100 int unified_range_table_bytes_needed (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6101 int unified_range_table_bytes_used (void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6102 void unified_range_table_copy_data (Lisp_Object, void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6103 Lisp_Object unified_range_table_lookup (void *, EMACS_INT, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6104 int unified_range_table_nentries (void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6105 void unified_range_table_get_range (void *, int, EMACS_INT *, EMACS_INT *,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6106 Lisp_Object *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6107
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6108 /* Defined in search.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6109 EXFUN (Fmatch_beginning, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6110 EXFUN (Fmatch_end, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6111 EXFUN (Fskip_chars_backward, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6112 EXFUN (Fskip_chars_forward, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6113 EXFUN (Fstring_match, 4);
4960
45b6288416e3 slight cleanup, move EXFUN of regexp-quote to lisp.h
Ben Wing <ben@xemacs.org>
parents: 4957
diff changeset
6114 EXFUN (Fregexp_quote, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6115
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6116 struct re_pattern_buffer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6117 struct re_registers;
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6118 Charbpos scan_buffer (struct buffer *, Ichar, Charbpos, Charbpos, EMACS_INT,
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6119 EMACS_INT *, int);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
6120 Charbpos find_next_newline (struct buffer *, Charbpos, int);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
6121 Charbpos find_next_newline_no_quit (struct buffer *, Charbpos, int);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6122 Bytebpos byte_find_next_newline_no_quit (struct buffer *, Bytebpos, int);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6123 Bytecount byte_find_next_ichar_in_string (Lisp_Object, Ichar, Bytecount,
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6124 EMACS_INT);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
6125 Charbpos find_before_next_newline (struct buffer *, Charbpos, Charbpos, int);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6126 struct re_pattern_buffer *compile_pattern (Lisp_Object pattern,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6127 struct re_registers *regp,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6128 Lisp_Object translate,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6129 Lisp_Object searchobj,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6130 struct buffer *searchbuf,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6131 int posix, Error_Behavior errb);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6132 Bytecount fast_string_match (Lisp_Object, const Ibyte *,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6133 Lisp_Object, Bytecount,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
6134 Bytecount, int, Error_Behavior, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6135 Bytecount fast_lisp_string_match (Lisp_Object, Lisp_Object);
507
167135c7a7ae [xemacs-hg @ 2001-05-05 10:10:36 by martinb]
martinb
parents: 502
diff changeset
6136 extern Fixnum warn_about_possibly_incompatible_back_references;
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 490
diff changeset
6137
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6138
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6139 /* Defined in signal.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6140 void init_interrupts_late (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6141
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6142 /* Defined in sound.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6143 EXFUN (Fding, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6144
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6145 void init_device_sound (struct device *);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6146 DECLARE_DOESNT_RETURN (report_sound_error (const Ascbyte *, Lisp_Object));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6147
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6148 extern Lisp_Object Qsound_error;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6149 extern Lisp_Object Vsynchronous_sounds;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6150
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6151 /* Defined in specifier.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6152 EXFUN (Fadd_spec_to_specifier, 5);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6153 EXFUN (Fspecifier_spec_list, 4);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6154
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6155 Lisp_Object specifier_instance (Lisp_Object, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
6156 Error_Behavior, int, int, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6157 Lisp_Object specifier_instance_no_quit (Lisp_Object, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
6158 Error_Behavior, int, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6159
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6160 /* Defined in symbols.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6161 EXFUN (Fboundp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6162 EXFUN (Fbuilt_in_variable_type, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6163 EXFUN (Fdefault_boundp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6164 EXFUN (Fdefault_value, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6165 EXFUN (Ffboundp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6166 EXFUN (Ffset, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6167 EXFUN (Fintern, 2);
4355
a2af1ff1761f Provide a DEFAULT argument in #'intern-soft.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4329
diff changeset
6168 EXFUN (Fintern_soft, 3);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6169 EXFUN (Fkill_local_variable, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6170 EXFUN (Fset, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6171 EXFUN (Fset_default, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6172 EXFUN (Fsymbol_function, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6173 EXFUN (Fsymbol_name, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6174 EXFUN (Fsymbol_plist, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6175 EXFUN (Fsymbol_value, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6176
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6177 unsigned int hash_string (const Ibyte *, Bytecount);
4953
304aebb79cd3 function renamings to track names of char typedefs
Ben Wing <ben@xemacs.org>
parents: 4952
diff changeset
6178 Lisp_Object intern_istring (const Ibyte *str);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
6179 MODULE_API Lisp_Object intern (const CIbyte *str);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6180 Lisp_Object intern_converting_underscores_to_dashes (const CIbyte *str);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6181 Lisp_Object oblookup (Lisp_Object, const Ibyte *, Bytecount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6182 void map_obarray (Lisp_Object, int (*) (Lisp_Object, void *), void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6183 Lisp_Object indirect_function (Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6184 Lisp_Object symbol_value_in_buffer (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6185 void kill_buffer_local_variables (struct buffer *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6186 int symbol_value_buffer_local_info (Lisp_Object, struct buffer *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6187 Lisp_Object find_symbol_value (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6188 Lisp_Object find_symbol_value_quickly (Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6189 Lisp_Object top_level_value (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6190 void reject_constant_symbols (Lisp_Object sym, Lisp_Object newval,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6191 int function_p,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6192 Lisp_Object follow_past_lisp_magic);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6193
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6194 extern Lisp_Object Qconst_specifier;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6195 extern Lisp_Object Qmakunbound;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6196 extern Lisp_Object Qset;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6197 extern Lisp_Object Qvariable_documentation;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6198 extern Lisp_Object Qvariable_domain;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6199 extern MODULE_API Lisp_Object Qt, Qunbound;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6200 extern Lisp_Object Vobarray;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6201
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6202 /* Defined in syntax.c */
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
6203 Charbpos scan_words (struct buffer *, Charbpos, int);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6204 EXFUN (Fchar_syntax, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6205 EXFUN (Fforward_word, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6206 extern Lisp_Object Vstandard_syntax_table;
3250
2b8bb4938bb4 [xemacs-hg @ 2006-02-21 11:33:41 by stephent]
stephent
parents: 3094
diff changeset
6207 void signal_syntax_cache_extent_changed (EXTENT extent);
2b8bb4938bb4 [xemacs-hg @ 2006-02-21 11:33:41 by stephent]
stephent
parents: 3094
diff changeset
6208 void signal_syntax_cache_extent_adjust (struct buffer *buf);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6209 void init_buffer_syntax_cache (struct buffer *buf);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6210 void mark_buffer_syntax_cache (struct buffer *buf);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6211 void uninit_buffer_syntax_cache (struct buffer *buf);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6212 extern Lisp_Object Qsyntax_table;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6213
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6214 /* Defined in sysdep.c */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6215 long get_random (void);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6216 void seed_random (long arg);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6217
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6218 /* Defined in text.c */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6219 void find_charsets_in_ibyte_string (unsigned char *charsets,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6220 const Ibyte *str,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6221 Bytecount len);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6222 void find_charsets_in_ichar_string (unsigned char *charsets,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6223 const Ichar *str,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6224 Charcount len);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6225 int ibyte_string_displayed_columns (const Ibyte *str, Bytecount len);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6226 int ichar_string_displayed_columns (const Ichar *str, Charcount len);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6227 Charcount ibyte_string_nonascii_chars (const Ibyte *str, Bytecount len);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6228 void convert_ibyte_string_into_ichar_dynarr (const Ibyte *str,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6229 Bytecount len,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6230 Ichar_dynarr *dyn);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6231 Charcount convert_ibyte_string_into_ichar_string (const Ibyte *str,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6232 Bytecount len,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6233 Ichar *arr);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6234 void convert_ichar_string_into_ibyte_dynarr (Ichar *arr, int nels,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6235 Ibyte_dynarr *dyn);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6236 Ibyte *convert_ichar_string_into_malloced_string (Ichar *arr, int nels,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6237 Bytecount *len_out);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6238 Bytecount copy_text_between_formats (const Ibyte *src, Bytecount srclen,
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6239 Internal_Format srcfmt,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6240 Lisp_Object srcobj,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6241 Ibyte *dst, Bytecount dstlen,
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6242 Internal_Format dstfmt,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6243 Lisp_Object dstobj,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6244 Bytecount *src_used);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6245 Bytecount copy_buffer_text_out (struct buffer *buf, Bytebpos pos,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6246 Bytecount len, Ibyte *dst, Bytecount dstlen,
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6247 Internal_Format dstfmt, Lisp_Object dstobj,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6248 Bytecount *src_used);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6249
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6250 /* flags for get_buffer_pos_char(), get_buffer_range_char(), etc. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6251 /* At most one of GB_COERCE_RANGE and GB_NO_ERROR_IF_BAD should be
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6252 specified. At most one of GB_NEGATIVE_FROM_END and GB_NO_ERROR_IF_BAD
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6253 should be specified. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6254
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6255 #define GB_ALLOW_PAST_ACCESSIBLE (1 << 0)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6256 #define GB_ALLOW_NIL (1 << 1)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6257 #define GB_CHECK_ORDER (1 << 2)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6258 #define GB_COERCE_RANGE (1 << 3)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6259 #define GB_NO_ERROR_IF_BAD (1 << 4)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6260 #define GB_NEGATIVE_FROM_END (1 << 5)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6261 #define GB_HISTORICAL_STRING_BEHAVIOR (GB_NEGATIVE_FROM_END | GB_ALLOW_NIL)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6262
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6263 Charbpos get_buffer_pos_char (struct buffer *b, Lisp_Object pos,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6264 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6265 Bytebpos get_buffer_pos_byte (struct buffer *b, Lisp_Object pos,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6266 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6267 void get_buffer_range_char (struct buffer *b, Lisp_Object from, Lisp_Object to,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6268 Charbpos *from_out, Charbpos *to_out,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6269 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6270 void get_buffer_range_byte (struct buffer *b, Lisp_Object from, Lisp_Object to,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6271 Bytebpos *from_out, Bytebpos *to_out,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6272 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6273 Charcount get_string_pos_char (Lisp_Object string, Lisp_Object pos,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6274 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6275 Bytecount get_string_pos_byte (Lisp_Object string, Lisp_Object pos,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6276 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6277 void get_string_range_char (Lisp_Object string, Lisp_Object from,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6278 Lisp_Object to, Charcount *from_out,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6279 Charcount *to_out, unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6280 void get_string_range_byte (Lisp_Object string, Lisp_Object from,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6281 Lisp_Object to, Bytecount *from_out,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6282 Bytecount *to_out, unsigned int flags);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6283 Charxpos get_buffer_or_string_pos_char (Lisp_Object object, Lisp_Object pos,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6284 unsigned int flags);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6285 Bytexpos get_buffer_or_string_pos_byte (Lisp_Object object, Lisp_Object pos,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6286 unsigned int flags);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6287 void get_buffer_or_string_range_char (Lisp_Object object, Lisp_Object from,
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6288 Lisp_Object to, Charxpos *from_out,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6289 Charxpos *to_out, unsigned int flags);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6290 void get_buffer_or_string_range_byte (Lisp_Object object, Lisp_Object from,
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6291 Lisp_Object to, Bytexpos *from_out,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6292 Bytexpos *to_out, unsigned int flags);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6293 Charxpos buffer_or_string_accessible_begin_char (Lisp_Object object);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6294 Charxpos buffer_or_string_accessible_end_char (Lisp_Object object);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6295 Bytexpos buffer_or_string_accessible_begin_byte (Lisp_Object object);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6296 Bytexpos buffer_or_string_accessible_end_byte (Lisp_Object object);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6297 Charxpos buffer_or_string_absolute_begin_char (Lisp_Object object);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6298 Charxpos buffer_or_string_absolute_end_char (Lisp_Object object);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6299 Bytexpos buffer_or_string_absolute_begin_byte (Lisp_Object object);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6300 Bytexpos buffer_or_string_absolute_end_byte (Lisp_Object object);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6301 Charbpos charbpos_clip_to_bounds (Charbpos lower, Charbpos num,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6302 Charbpos upper);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6303 Bytebpos bytebpos_clip_to_bounds (Bytebpos lower, Bytebpos num,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6304 Bytebpos upper);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6305 Charxpos charxpos_clip_to_bounds (Charxpos lower, Charxpos num,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6306 Charxpos upper);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6307 Bytexpos bytexpos_clip_to_bounds (Bytexpos lower, Bytexpos num,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6308 Bytexpos upper);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6309 Charxpos buffer_or_string_clip_to_accessible_char (Lisp_Object object,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6310 Charxpos pos);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6311 Bytexpos buffer_or_string_clip_to_accessible_byte (Lisp_Object object,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6312 Bytexpos pos);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6313 Charxpos buffer_or_string_clip_to_absolute_char (Lisp_Object object,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6314 Charxpos pos);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6315 Bytexpos buffer_or_string_clip_to_absolute_byte (Lisp_Object object,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6316 Bytexpos pos);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6317
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6318
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6319 #ifdef ENABLE_COMPOSITE_CHARS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6320
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6321 Ichar lookup_composite_char (Ibyte *str, int len);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6322 Lisp_Object composite_char_string (Ichar ch);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6323 #endif /* ENABLE_COMPOSITE_CHARS */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6324
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6325 EXFUN (Ffind_charset, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6326 EXFUN (Fget_charset, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6327 EXFUN (Fcharset_list, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6328
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6329 extern Lisp_Object Vcharset_ascii;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6330 extern Lisp_Object Vcharset_control_1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6331 extern Lisp_Object Vcharset_latin_iso8859_1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6332 extern Lisp_Object Vcharset_latin_iso8859_2;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6333 extern Lisp_Object Vcharset_latin_iso8859_3;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6334 extern Lisp_Object Vcharset_latin_iso8859_4;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6335 extern Lisp_Object Vcharset_thai_tis620;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6336 extern Lisp_Object Vcharset_greek_iso8859_7;
4805
980575c76541 Move the arabic-iso8859-6 character set back to C, otherwise X11 lookup fails.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4744
diff changeset
6337 extern Lisp_Object Vcharset_arabic_iso8859_6;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6338 extern Lisp_Object Vcharset_hebrew_iso8859_8;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6339 extern Lisp_Object Vcharset_katakana_jisx0201;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6340 extern Lisp_Object Vcharset_latin_jisx0201;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6341 extern Lisp_Object Vcharset_cyrillic_iso8859_5;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6342 extern Lisp_Object Vcharset_latin_iso8859_9;
3094
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3092
diff changeset
6343 extern Lisp_Object Vcharset_latin_iso8859_15;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6344 extern Lisp_Object Vcharset_japanese_jisx0208_1978;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6345 extern Lisp_Object Vcharset_chinese_gb2312;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6346 extern Lisp_Object Vcharset_japanese_jisx0208;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6347 extern Lisp_Object Vcharset_korean_ksc5601;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6348 extern Lisp_Object Vcharset_japanese_jisx0212;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6349 extern Lisp_Object Vcharset_chinese_cns11643_1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6350 extern Lisp_Object Vcharset_chinese_cns11643_2;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6351 extern Lisp_Object Vcharset_chinese_big5_1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6352 extern Lisp_Object Vcharset_chinese_big5_2;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6353 extern Lisp_Object Vcharset_composite;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6354
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6355 Ichar Lstream_get_ichar_1 (Lstream *stream, int first_char);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6356 int Lstream_fput_ichar (Lstream *stream, Ichar ch);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6357 void Lstream_funget_ichar (Lstream *stream, Ichar ch);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6358
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6359 DECLARE_INLINE_HEADER (Ibyte *qxestrdup (const Ibyte *s))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6360 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6361 return (Ibyte *) xstrdup ((const Chbyte *) s);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6362 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6363
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6364 DECLARE_INLINE_HEADER (Bytecount qxestrlen (const Ibyte *s))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6365 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6366 return strlen ((const Chbyte *) s);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6367 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6368
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6369 DECLARE_INLINE_HEADER (Charcount qxestrcharlen (const Ibyte *s))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6370 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6371 return bytecount_to_charcount (s, qxestrlen (s));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6372 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6373
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6374 DECLARE_INLINE_HEADER (int qxestrcmp (const Ibyte *s1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6375 const Ibyte *s2))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6376 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6377 return strcmp ((const Chbyte *) s1, (const Chbyte *) s2);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6378 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6379
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6380 DECLARE_INLINE_HEADER (int qxestrcmp_ascii (const Ibyte *s1,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6381 const Ascbyte *s2))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6382 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6383 return strcmp ((const Chbyte *) s1, s2);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6384 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6385
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6386 DECLARE_INLINE_HEADER (int qxestrncmp (const Ibyte *string1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6387 const Ibyte *string2,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6388 Bytecount count))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6389 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6390 return strncmp ((const Chbyte *) string1, (const Chbyte *) string2,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6391 (size_t) count);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6392 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6393
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6394 DECLARE_INLINE_HEADER (int qxestrncmp_ascii (const Ibyte *string1,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6395 const Ascbyte *string2,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6396 Bytecount count))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6397 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6398 return strncmp ((const Chbyte *) string1, string2, (size_t) count);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6399 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6400
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6401 DECLARE_INLINE_HEADER (Ibyte *qxestrcpy (Ibyte *strDest,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6402 const Ibyte *strSource))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6403 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6404 return (Ibyte *) strcpy ((Chbyte *) strDest, (const Chbyte *) strSource);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6405 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6406
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6407 DECLARE_INLINE_HEADER (Ibyte *qxestrcpy_ascii (Ibyte *strDest,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6408 const Ascbyte *strSource))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6409 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6410 return (Ibyte *) strcpy ((Chbyte *) strDest, strSource);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6411 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6412
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6413 DECLARE_INLINE_HEADER (Ibyte *qxestrncpy (Ibyte *strDest,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6414 const Ibyte *strSource,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6415 Bytecount count))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6416 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6417 return (Ibyte *) strncpy ((Chbyte *) strDest, (const Chbyte *) strSource,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6418 (size_t) count);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6419 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6420
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6421 DECLARE_INLINE_HEADER (Ibyte *qxestrncpy_ascii (Ibyte *strDest,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6422 const Ascbyte *strSource,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6423 Bytecount count))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6424 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6425 return (Ibyte *) strncpy ((Chbyte *) strDest, strSource, (size_t) count);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6426 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6427
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6428 DECLARE_INLINE_HEADER (Ibyte *qxestrcat (Ibyte *strDest,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6429 const Ibyte *strSource))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6430 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6431 return (Ibyte *) strcat ((Chbyte *) strDest, (const Chbyte *) strSource);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6432 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6433
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6434 DECLARE_INLINE_HEADER (Ibyte *qxestrcat_ascii (Ibyte *strDest,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6435 const Ascbyte *strSource))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6436 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6437 return (Ibyte *) strcat ((Chbyte *) strDest, strSource);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6438 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6439
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6440 DECLARE_INLINE_HEADER (Ibyte *qxestrncat (Ibyte *strDest,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6441 const Ibyte *strSource,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6442 Bytecount count))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6443 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6444 return (Ibyte *) strncat ((Chbyte *) strDest, (const Chbyte *) strSource,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6445 (size_t) count);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6446 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6447
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6448 DECLARE_INLINE_HEADER (Ibyte *qxestrncat_ascii (Ibyte *strDest,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6449 const Ascbyte *strSource,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6450 Bytecount count))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6451 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6452 return (Ibyte *) strncat ((Chbyte *) strDest, strSource, (size_t) count);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6453 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6454
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6455 DECLARE_INLINE_HEADER (Ibyte *qxestrchr (const Ibyte *s, Ichar c))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6456 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6457 assert (c >= 0 && c <= 255);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6458 return (Ibyte *) strchr ((const Chbyte *) s, c);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6459 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6460
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6461 DECLARE_INLINE_HEADER (Ibyte *qxestrrchr (const Ibyte *s, Ichar c))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6462 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6463 assert (c >= 0 && c <= 255);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6464 return (Ibyte *) strrchr ((const Chbyte *) s, c);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6465 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6466
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6467 DECLARE_INLINE_HEADER (Ibyte *qxestrstr (const Ibyte *string1,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6468 const Ibyte *string2))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6469 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6470 return (Ibyte *) strstr ((const Chbyte *) string1, (const Chbyte *) string2);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6471 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6472
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6473 DECLARE_INLINE_HEADER (Bytecount qxestrcspn (const Ibyte *string,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6474 const CIbyte *strCharSet))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6475 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6476 return (Bytecount) strcspn ((const Chbyte *) string, strCharSet);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6477 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6478
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6479 DECLARE_INLINE_HEADER (Bytecount qxestrspn (const Ibyte *string,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6480 const CIbyte *strCharSet))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6481 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6482 return (Bytecount) strspn ((const Chbyte *) string, strCharSet);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6483 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6484
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6485 DECLARE_INLINE_HEADER (Ibyte *qxestrpbrk (const Ibyte *string,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6486 const CIbyte *strCharSet))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6487 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6488 return (Ibyte *) strpbrk ((const Chbyte *) string, strCharSet);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6489 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6490
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6491 DECLARE_INLINE_HEADER (Ibyte *qxestrtok (Ibyte *strToken,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6492 const CIbyte *strDelimit))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6493 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6494 return (Ibyte *) strtok ((Chbyte *) strToken, strDelimit);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6495 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6496
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6497 DECLARE_INLINE_HEADER (double qxestrtod (const Ibyte *nptr,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6498 Ibyte **endptr))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6499 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6500 return strtod ((const Chbyte *) nptr, (Chbyte **) endptr);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6501 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6502
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6503 DECLARE_INLINE_HEADER (long qxestrtol (const Ibyte *nptr, Ibyte **endptr,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6504 int base))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6505 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6506 return strtol ((const Chbyte *) nptr, (Chbyte **) endptr, base);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6507 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6508
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6509 DECLARE_INLINE_HEADER (unsigned long qxestrtoul (const Ibyte *nptr,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6510 Ibyte **endptr,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6511 int base))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6512 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6513 return strtoul ((const Chbyte *) nptr, (Chbyte **) endptr, base);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6514 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6515
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6516 DECLARE_INLINE_HEADER (int qxeatoi (const Ibyte *string))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6517 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6518 return atoi ((const Chbyte *) string);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6519 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6520
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6521 DECLARE_INLINE_HEADER (Ibyte *qxestrupr (Ibyte *s))
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6522 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6523 return (Ibyte *) strupr ((Chbyte *) s);
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6524 }
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6525
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6526 DECLARE_INLINE_HEADER (Ibyte *qxestrlwr (Ibyte *s))
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6527 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6528 return (Ibyte *) strlwr ((Chbyte *) s);
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6529 }
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6530
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6531 int qxesprintf (Ibyte *buffer, const CIbyte *format, ...)
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6532 PRINTF_ARGS (2, 3);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6533
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6534 DECLARE_INLINE_HEADER (int qxesscanf_ascii_1 (Ibyte *buffer,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6535 const Ascbyte *format,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6536 void *ptr))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6537 {
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6538 /* #### DAMNIT! No vsscanf! */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6539 return sscanf ((Chbyte *) buffer, format, ptr);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6540 }
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6541
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6542 /* Do not use POSIX locale routines. Not Mule-correct. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6543 #define qxestrcoll DO NOT USE.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6544 #define qxestrxfrm DO NOT USE.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6545
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6546 int qxestrcasecmp (const Ibyte *s1, const Ibyte *s2);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6547 int qxestrcasecmp_ascii (const Ibyte *s1, const Ascbyte *s2);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6548 int qxestrcasecmp_i18n (const Ibyte *s1, const Ibyte *s2);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6549 int ascii_strcasecmp (const Ascbyte *s1, const Ascbyte *s2);
4906
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4888
diff changeset
6550 int lisp_strcasecmp_ascii (Lisp_Object s1, Lisp_Object s2);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6551 int lisp_strcasecmp_i18n (Lisp_Object s1, Lisp_Object s2);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6552 int qxestrncasecmp (const Ibyte *s1, const Ibyte *s2, Bytecount len);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6553 int qxestrncasecmp_ascii (const Ibyte *s1, const Ascbyte *s2,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6554 Bytecount len);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6555 int qxestrncasecmp_i18n (const Ibyte *s1, const Ibyte *s2, Bytecount len);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6556 int ascii_strncasecmp (const Ascbyte *s1, const Ascbyte *s2,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6557 Bytecount len);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6558 int qxememcmp (const Ibyte *s1, const Ibyte *s2, Bytecount len);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6559 int qxememcmp4 (const Ibyte *s1, Bytecount len1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6560 const Ibyte *s2, Bytecount len2);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6561 int qxememcasecmp (const Ibyte *s1, const Ibyte *s2, Bytecount len);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6562 int qxememcasecmp4 (const Ibyte *s1, Bytecount len1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6563 const Ibyte *s2, Bytecount len2);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6564 int qxetextcmp (const Ibyte *s1, Bytecount len1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6565 const Ibyte *s2, Bytecount len2);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6566 int qxetextcmp_matching (const Ibyte *s1, Bytecount len1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6567 const Ibyte *s2, Bytecount len2,
801
2b676dc88c66 [xemacs-hg @ 2002-04-01 03:58:02 by ben]
ben
parents: 800
diff changeset
6568 Charcount *matching);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6569 int qxetextcasecmp (const Ibyte *s1, Bytecount len1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6570 const Ibyte *s2, Bytecount len2);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6571 int qxetextcasecmp_matching (const Ibyte *s1, Bytecount len1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6572 const Ibyte *s2, Bytecount len2,
801
2b676dc88c66 [xemacs-hg @ 2002-04-01 03:58:02 by ben]
ben
parents: 800
diff changeset
6573 Charcount *matching);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6574
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6575 void buffer_mule_signal_inserted_region (struct buffer *buf, Charbpos start,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6576 Bytecount bytelength,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6577 Charcount charlength);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6578 void buffer_mule_signal_deleted_region (struct buffer *buf, Charbpos start,
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6579 Charbpos end, Bytebpos byte_start,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6580 Bytebpos byte_end);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6581
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6582 typedef struct
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6583 {
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6584 const char *srctext;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6585 void *dst;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6586 Bytecount dst_size;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6587 } alloca_convert_vals;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6588
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6589 typedef struct
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6590 {
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6591 Dynarr_declare (alloca_convert_vals);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6592 } alloca_convert_vals_dynarr;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6593
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6594 extern alloca_convert_vals_dynarr *active_alloca_convert;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6595
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6596 MODULE_API int find_pos_of_existing_active_alloca_convert (const char *
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6597 srctext);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6598
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6599 /* Defined in undo.c */
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6600 extern Lisp_Object Qinhibit_read_only;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6601
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6602 /* Defined in unicode.c */
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6603 extern const struct sized_memory_description to_unicode_description;
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6604 extern const struct sized_memory_description from_unicode_description;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6605 void init_charset_unicode_tables (Lisp_Object charset);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6606 void free_charset_unicode_tables (Lisp_Object charset);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6607 void recalculate_unicode_precedence (void);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6608 extern Lisp_Object Qunicode;
4096
1abf84db2c7f [xemacs-hg @ 2007-08-04 20:00:10 by aidan]
aidan
parents: 3988
diff changeset
6609 extern Lisp_Object Qutf_16, Qutf_8, Qucs_4, Qutf_7, Qutf_32;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6610 #ifdef MEMORY_USAGE_STATS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6611 Bytecount compute_from_unicode_table_size (Lisp_Object charset,
5157
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5146
diff changeset
6612 struct usage_stats *stats);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6613 Bytecount compute_to_unicode_table_size (Lisp_Object charset,
5157
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5146
diff changeset
6614 struct usage_stats *stats);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6615 #endif /* MEMORY_USAGE_STATS */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6616
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6617 /* Defined in undo.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6618 EXFUN (Fundo_boundary, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6619
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6620 Lisp_Object truncate_undo_list (Lisp_Object, int, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6621 void record_extent (Lisp_Object, int);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
6622 void record_insert (struct buffer *, Charbpos, Charcount);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
6623 void record_delete (struct buffer *, Charbpos, Charcount);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
6624 void record_change (struct buffer *, Charbpos, Charcount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6625
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6626 /* Defined in unex*.c */
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
6627 #ifdef WIN32_NATIVE
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6628 int unexec (Ibyte *, Ibyte *, uintptr_t, uintptr_t, uintptr_t);
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
6629 #else
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
6630 int unexec (Extbyte *, Extbyte *, uintptr_t, uintptr_t, uintptr_t);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
6631 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6632 #ifdef RUN_TIME_REMAP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6633 int run_time_remap (char *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6634 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6635
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6636 /* Defined in vm-limit.c */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
6637 void memory_warnings (void *, void (*) (const char *));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6638
5139
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6639 /* Defined in win32.c */
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6640 extern Lisp_Object Vmswindows_downcase_file_names;
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6641
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6642 /* Defined in window.c */
a48ef26d87ee Clean up prototypes for Lisp variables/symbols. Put decls for them with
Ben Wing <ben@xemacs.org>
parents: 5097
diff changeset
6643 extern Lisp_Object Qwindow_live_p;
1927
44905d8fae13 [xemacs-hg @ 2004-02-25 17:42:34 by james]
james
parents: 1743
diff changeset
6644
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
6645 END_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
6646
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
6647 #endif /* INCLUDED_lisp_h_ */