annotate src/lisp.h @ 5127:a9c41067dd88 ben-lisp-object

more cleanups, terminology clarification, lots of doc work -------------------- ChangeLog entries follow: -------------------- man/ChangeLog addition: 2010-03-05 Ben Wing <ben@xemacs.org> * internals/internals.texi (Introduction to Allocation): * internals/internals.texi (Integers and Characters): * internals/internals.texi (Allocation from Frob Blocks): * internals/internals.texi (lrecords): * internals/internals.texi (Low-level allocation): Rewrite section on allocation of Lisp objects to reflect the new reality. Remove references to nonexistent XSETINT and XSETCHAR. modules/ChangeLog addition: 2010-03-05 Ben Wing <ben@xemacs.org> * postgresql/postgresql.c (allocate_pgconn): * postgresql/postgresql.c (allocate_pgresult): * postgresql/postgresql.h (struct Lisp_PGconn): * postgresql/postgresql.h (struct Lisp_PGresult): * ldap/eldap.c (allocate_ldap): * ldap/eldap.h (struct Lisp_LDAP): Same changes as in src/ dir. See large log there in ChangeLog, but basically: ALLOC_LISP_OBJECT -> ALLOC_NORMAL_LISP_OBJECT LISP_OBJECT_HEADER -> NORMAL_LISP_OBJECT_HEADER ../hlo/src/ChangeLog addition: 2010-03-05 Ben Wing <ben@xemacs.org> * alloc.c: * alloc.c (old_alloc_sized_lcrecord): * alloc.c (very_old_free_lcrecord): * alloc.c (copy_lisp_object): * alloc.c (zero_sized_lisp_object): * alloc.c (zero_nonsized_lisp_object): * alloc.c (lisp_object_storage_size): * alloc.c (free_normal_lisp_object): * alloc.c (FREE_FIXED_TYPE_WHEN_NOT_IN_GC): * alloc.c (ALLOC_FROB_BLOCK_LISP_OBJECT): * alloc.c (Fcons): * alloc.c (noseeum_cons): * alloc.c (make_float): * alloc.c (make_bignum): * alloc.c (make_bignum_bg): * alloc.c (make_ratio): * alloc.c (make_ratio_bg): * alloc.c (make_ratio_rt): * alloc.c (make_bigfloat): * alloc.c (make_bigfloat_bf): * alloc.c (size_vector): * alloc.c (make_compiled_function): * alloc.c (Fmake_symbol): * alloc.c (allocate_extent): * alloc.c (allocate_event): * alloc.c (make_key_data): * alloc.c (make_button_data): * alloc.c (make_motion_data): * alloc.c (make_process_data): * alloc.c (make_timeout_data): * alloc.c (make_magic_data): * alloc.c (make_magic_eval_data): * alloc.c (make_eval_data): * alloc.c (make_misc_user_data): * alloc.c (Fmake_marker): * alloc.c (noseeum_make_marker): * alloc.c (size_string_direct_data): * alloc.c (make_uninit_string): * alloc.c (make_string_nocopy): * alloc.c (mark_lcrecord_list): * alloc.c (alloc_managed_lcrecord): * alloc.c (free_managed_lcrecord): * alloc.c (sweep_lcrecords_1): * alloc.c (malloced_storage_size): * buffer.c (allocate_buffer): * buffer.c (compute_buffer_usage): * buffer.c (DEFVAR_BUFFER_LOCAL_1): * buffer.c (nuke_all_buffer_slots): * buffer.c (common_init_complex_vars_of_buffer): * buffer.h (struct buffer_text): * buffer.h (struct buffer): * bytecode.c: * bytecode.c (make_compiled_function_args): * bytecode.c (size_compiled_function_args): * bytecode.h (struct compiled_function_args): * casetab.c (allocate_case_table): * casetab.h (struct Lisp_Case_Table): * charset.h (struct Lisp_Charset): * chartab.c (fill_char_table): * chartab.c (Fmake_char_table): * chartab.c (make_char_table_entry): * chartab.c (copy_char_table_entry): * chartab.c (Fcopy_char_table): * chartab.c (put_char_table): * chartab.h (struct Lisp_Char_Table_Entry): * chartab.h (struct Lisp_Char_Table): * console-gtk-impl.h (struct gtk_device): * console-gtk-impl.h (struct gtk_frame): * console-impl.h (struct console): * console-msw-impl.h (struct Lisp_Devmode): * console-msw-impl.h (struct mswindows_device): * console-msw-impl.h (struct msprinter_device): * console-msw-impl.h (struct mswindows_frame): * console-msw-impl.h (struct mswindows_dialog_id): * console-stream-impl.h (struct stream_console): * console-stream.c (stream_init_console): * console-tty-impl.h (struct tty_console): * console-tty-impl.h (struct tty_device): * console-tty.c (allocate_tty_console_struct): * console-x-impl.h (struct x_device): * console-x-impl.h (struct x_frame): * console.c (allocate_console): * console.c (nuke_all_console_slots): * console.c (DEFVAR_CONSOLE_LOCAL_1): * console.c (common_init_complex_vars_of_console): * data.c (make_weak_list): * data.c (make_weak_box): * data.c (make_ephemeron): * database.c: * database.c (struct Lisp_Database): * database.c (allocate_database): * database.c (finalize_database): * device-gtk.c (allocate_gtk_device_struct): * device-impl.h (struct device): * device-msw.c: * device-msw.c (mswindows_init_device): * device-msw.c (msprinter_init_device): * device-msw.c (finalize_devmode): * device-msw.c (allocate_devmode): * device-tty.c (allocate_tty_device_struct): * device-x.c (allocate_x_device_struct): * device.c: * device.c (nuke_all_device_slots): * device.c (allocate_device): * dialog-msw.c (handle_question_dialog_box): * elhash.c: * elhash.c (struct Lisp_Hash_Table): * elhash.c (finalize_hash_table): * elhash.c (make_general_lisp_hash_table): * elhash.c (Fcopy_hash_table): * elhash.h (htentry): * emacs.c (main_1): * eval.c: * eval.c (size_multiple_value): * event-stream.c (finalize_command_builder): * event-stream.c (allocate_command_builder): * event-stream.c (free_command_builder): * event-stream.c (event_stream_generate_wakeup): * event-stream.c (event_stream_resignal_wakeup): * event-stream.c (event_stream_disable_wakeup): * event-stream.c (event_stream_wakeup_pending_p): * events.h (struct Lisp_Timeout): * events.h (struct command_builder): * extents-impl.h: * extents-impl.h (struct extent_auxiliary): * extents-impl.h (struct extent_info): * extents-impl.h (set_extent_no_chase_aux_field): * extents-impl.h (set_extent_no_chase_normal_field): * extents.c: * extents.c (gap_array_marker): * extents.c (gap_array): * extents.c (extent_list_marker): * extents.c (extent_list): * extents.c (stack_of_extents): * extents.c (gap_array_make_marker): * extents.c (extent_list_make_marker): * extents.c (allocate_extent_list): * extents.c (SLOT): * extents.c (mark_extent_auxiliary): * extents.c (allocate_extent_auxiliary): * extents.c (attach_extent_auxiliary): * extents.c (size_gap_array): * extents.c (finalize_extent_info): * extents.c (allocate_extent_info): * extents.c (uninit_buffer_extents): * extents.c (allocate_soe): * extents.c (copy_extent): * extents.c (vars_of_extents): * extents.h: * faces.c (allocate_face): * faces.h (struct Lisp_Face): * faces.h (struct face_cachel): * file-coding.c: * file-coding.c (finalize_coding_system): * file-coding.c (sizeof_coding_system): * file-coding.c (Fcopy_coding_system): * file-coding.h (struct Lisp_Coding_System): * file-coding.h (MARKED_SLOT): * fns.c (size_bit_vector): * font-mgr.c: * font-mgr.c (finalize_fc_pattern): * font-mgr.c (print_fc_pattern): * font-mgr.c (Ffc_pattern_p): * font-mgr.c (Ffc_pattern_create): * font-mgr.c (Ffc_name_parse): * font-mgr.c (Ffc_name_unparse): * font-mgr.c (Ffc_pattern_duplicate): * font-mgr.c (Ffc_pattern_add): * font-mgr.c (Ffc_pattern_del): * font-mgr.c (Ffc_pattern_get): * font-mgr.c (fc_config_create_using): * font-mgr.c (fc_strlist_to_lisp_using): * font-mgr.c (fontset_to_list): * font-mgr.c (Ffc_config_p): * font-mgr.c (Ffc_config_up_to_date): * font-mgr.c (Ffc_config_build_fonts): * font-mgr.c (Ffc_config_get_cache): * font-mgr.c (Ffc_config_get_fonts): * font-mgr.c (Ffc_config_set_current): * font-mgr.c (Ffc_config_get_blanks): * font-mgr.c (Ffc_config_get_rescan_interval): * font-mgr.c (Ffc_config_set_rescan_interval): * font-mgr.c (Ffc_config_app_font_add_file): * font-mgr.c (Ffc_config_app_font_add_dir): * font-mgr.c (Ffc_config_app_font_clear): * font-mgr.c (size): * font-mgr.c (Ffc_config_substitute): * font-mgr.c (Ffc_font_render_prepare): * font-mgr.c (Ffc_font_match): * font-mgr.c (Ffc_font_sort): * font-mgr.c (finalize_fc_config): * font-mgr.c (print_fc_config): * font-mgr.h: * font-mgr.h (struct fc_pattern): * font-mgr.h (XFC_PATTERN): * font-mgr.h (struct fc_config): * font-mgr.h (XFC_CONFIG): * frame-gtk.c (allocate_gtk_frame_struct): * frame-impl.h (struct frame): * frame-msw.c (mswindows_init_frame_1): * frame-x.c (allocate_x_frame_struct): * frame.c (nuke_all_frame_slots): * frame.c (allocate_frame_core): * gc.c: * gc.c (GC_CHECK_NOT_FREE): * glyphs.c (finalize_image_instance): * glyphs.c (allocate_image_instance): * glyphs.c (Fcolorize_image_instance): * glyphs.c (allocate_glyph): * glyphs.c (unmap_subwindow_instance_cache_mapper): * glyphs.c (register_ignored_expose): * glyphs.h (struct Lisp_Image_Instance): * glyphs.h (struct Lisp_Glyph): * glyphs.h (struct glyph_cachel): * glyphs.h (struct expose_ignore): * gui.c (allocate_gui_item): * gui.h (struct Lisp_Gui_Item): * keymap.c (struct Lisp_Keymap): * keymap.c (make_keymap): * lisp.h: * lisp.h (struct Lisp_String_Direct_Data): * lisp.h (struct Lisp_String_Indirect_Data): * lisp.h (struct Lisp_Vector): * lisp.h (struct Lisp_Bit_Vector): * lisp.h (DECLARE_INLINE_LISP_BIT_VECTOR): * lisp.h (struct weak_box): * lisp.h (struct ephemeron): * lisp.h (struct weak_list): * lrecord.h: * lrecord.h (struct lrecord_implementation): * lrecord.h (MC_ALLOC_CALL_FINALIZER): * lrecord.h (struct lcrecord_list): * lstream.c (finalize_lstream): * lstream.c (sizeof_lstream): * lstream.c (Lstream_new): * lstream.c (Lstream_delete): * lstream.h (struct lstream): * marker.c: * marker.c (finalize_marker): * marker.c (compute_buffer_marker_usage): * mule-charset.c: * mule-charset.c (make_charset): * mule-charset.c (compute_charset_usage): * objects-impl.h (struct Lisp_Color_Instance): * objects-impl.h (struct Lisp_Font_Instance): * objects-tty-impl.h (struct tty_color_instance_data): * objects-tty-impl.h (struct tty_font_instance_data): * objects-tty.c (tty_initialize_color_instance): * objects-tty.c (tty_initialize_font_instance): * objects.c (finalize_color_instance): * objects.c (Fmake_color_instance): * objects.c (finalize_font_instance): * objects.c (Fmake_font_instance): * objects.c (reinit_vars_of_objects): * opaque.c: * opaque.c (sizeof_opaque): * opaque.c (make_opaque_ptr): * opaque.c (free_opaque_ptr): * opaque.h: * opaque.h (Lisp_Opaque): * opaque.h (Lisp_Opaque_Ptr): * print.c (printing_unreadable_lcrecord): * print.c (external_object_printer): * print.c (debug_p4): * process.c (finalize_process): * process.c (make_process_internal): * procimpl.h (struct Lisp_Process): * rangetab.c (Fmake_range_table): * rangetab.c (Fcopy_range_table): * rangetab.h (struct Lisp_Range_Table): * scrollbar.c: * scrollbar.c (create_scrollbar_instance): * scrollbar.c (compute_scrollbar_instance_usage): * scrollbar.h (struct scrollbar_instance): * specifier.c (finalize_specifier): * specifier.c (sizeof_specifier): * specifier.c (set_specifier_caching): * specifier.h (struct Lisp_Specifier): * specifier.h (struct specifier_caching): * symeval.h: * symeval.h (SYMBOL_VALUE_MAGIC_P): * symeval.h (DEFVAR_SYMVAL_FWD): * symsinit.h: * syntax.c (init_buffer_syntax_cache): * syntax.h (struct syntax_cache): * toolbar.c: * toolbar.c (allocate_toolbar_button): * toolbar.c (update_toolbar_button): * toolbar.h (struct toolbar_button): * tooltalk.c (struct Lisp_Tooltalk_Message): * tooltalk.c (make_tooltalk_message): * tooltalk.c (struct Lisp_Tooltalk_Pattern): * tooltalk.c (make_tooltalk_pattern): * ui-gtk.c: * ui-gtk.c (allocate_ffi_data): * ui-gtk.c (emacs_gtk_object_finalizer): * ui-gtk.c (allocate_emacs_gtk_object_data): * ui-gtk.c (allocate_emacs_gtk_boxed_data): * ui-gtk.h: * window-impl.h (struct window): * window-impl.h (struct window_mirror): * window.c (finalize_window): * window.c (allocate_window): * window.c (new_window_mirror): * window.c (mark_window_as_deleted): * window.c (make_dummy_parent): * window.c (compute_window_mirror_usage): * window.c (compute_window_usage): Overall point of this change and previous ones in this repository: (1) Introduce new, clearer terminology: everything other than int or char is a "record" object, which comes in two types: "normal objects" and "frob-block objects". Fix up all places that referred to frob-block objects as "simple", "basic", etc. (2) Provide an advertised interface for doing operations on Lisp objects, including creating new types, that is clean and consistent in its naming, uses the above-referenced terms and avoids referencing "lrecords", "old lcrecords", etc., which should hide under the surface. (3) Make the size_in_bytes and finalizer methods take a Lisp_Object rather than a void * for consistency with other methods. (4) Separate finalizer method into finalizer and disksaver, so that normal finalize methods don't have to worry about disksaving. Other specifics: (1) Renaming: LISP_OBJECT_HEADER -> NORMAL_LISP_OBJECT_HEADER ALLOC_LISP_OBJECT -> ALLOC_NORMAL_LISP_OBJECT implementation->basic_p -> implementation->frob_block_p ALLOCATE_FIXED_TYPE_AND_SET_IMPL -> ALLOC_FROB_BLOCK_LISP_OBJECT *FCCONFIG*, wrap_fcconfig -> *FC_CONFIG*, wrap_fc_config *FCPATTERN*, wrap_fcpattern -> *FC_PATTERN*, wrap_fc_pattern (the last two changes make the naming of these macros consistent with the naming of all other macros, since the objects are named fc-config and fc-pattern with a hyphen) (2) Lots of documentation fixes in lrecord.h. (3) Eliminate macros for copying, freeing, zeroing objects, getting their storage size. Instead, new functions: zero_sized_lisp_object() zero_nonsized_lisp_object() lisp_object_storage_size() free_normal_lisp_object() (copy_lisp_object() already exists) LISP_OBJECT_FROB_BLOCK_P() (actually a macro) Eliminated: free_lrecord() zero_lrecord() copy_lrecord() copy_sized_lrecord() old_copy_lcrecord() old_copy_sized_lcrecord() old_zero_lcrecord() old_zero_sized_lcrecord() LISP_OBJECT_STORAGE_SIZE() COPY_SIZED_LISP_OBJECT() COPY_SIZED_LCRECORD() COPY_LISP_OBJECT() ZERO_LISP_OBJECT() FREE_LISP_OBJECT() (4) Catch the remaining places where lrecord stuff was used directly and use the advertised interface, e.g. alloc_sized_lrecord() -> ALLOC_SIZED_LISP_OBJECT(). (5) Make certain statically-declared pseudo-objects (buffer_local_flags, console_local_flags) have their lheader initialized correctly, so things like copy_lisp_object() can work on them. Make extent_auxiliary_defaults a proper heap object Vextent_auxiliary_defaults, and make extent auxiliaries dumpable so that this object can be dumped. allocate_extent_auxiliary() now just creates the object, and attach_extent_auxiliary() creates an extent auxiliary and attaches to an extent, like the old allocate_extent_auxiliary(). (6) Create EXTENT_AUXILIARY_SLOTS macro, similar to the foo-slots.h files but in a macro instead of a file. The purpose is to avoid duplication when iterating over all the slots in an extent auxiliary. Use it. (7) In lstream.c, don't zero out object after allocation because allocation routines take care of this. (8) In marker.c, fix a mistake in computing marker overhead. (9) In print.c, clean up printing_unreadable_lcrecord(), external_object_printer() to avoid lots of ifdef NEW_GC's. (10) Separate toolbar-button allocation into a separate allocate_toolbar_button() function for use in the example code in lrecord.h.
author Ben Wing <ben@xemacs.org>
date Fri, 05 Mar 2010 04:08:17 -0600
parents 2a462149bd6a
children 7be849cb8828
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
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
88 */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
89
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
90 /************************************************************************/
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
91 /* include files */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
92 /************************************************************************/
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
93
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 /* We include the following generally useful header files so that you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 don't have to worry about prototypes when using the standard C
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 library functions and macros. These files shouldn't be excessively
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 large so they shouldn't cause that much of a slowdown. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 #include <stdlib.h>
5016
2ade80e8c640 enable more warnings and fix them
Ben Wing <ben@xemacs.org>
parents: 5015
diff changeset
100 /* 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
101 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
102 hacking around it. */
2ade80e8c640 enable more warnings and fix them
Ben Wing <ben@xemacs.org>
parents: 5015
diff changeset
103 #define index old_index
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 #include <string.h> /* primarily for memcpy, etc. */
5016
2ade80e8c640 enable more warnings and fix them
Ben Wing <ben@xemacs.org>
parents: 5015
diff changeset
105 #undef index
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 #include <stdio.h> /* NULL, etc. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 #include <ctype.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 #include <stdarg.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 #include <stddef.h> /* offsetof */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 #include <sys/types.h>
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
111 #include <limits.h>
4932
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
112 #ifdef __cplusplus
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
113 #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
114 #endif
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
115
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
116
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
117 /************************************************************************/
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
118 /* error checking */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
119 /************************************************************************/
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
120
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
121 /* ------------------------- large categories ------------------------- */
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
122
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
123 /* How these work:
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
124
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
125 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
126 `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
127 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
128 `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
129 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
130 Consider `text':
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
131
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
132 `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
133 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
134 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
135 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
136 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
137 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
138 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
139 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
140 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
141 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
142 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
143 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
144 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
145 is not defined.
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
146
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
147 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
148 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
149 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
150 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
151 needed, they can always be defined. */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
152
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
153 /* #### 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
154 category/subcategory system. Here is one proposal:
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
155
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
156 Major category Minor categories
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
157 --------------------------------
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
158 Allocation
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
159 Malloc
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
160 Dynarr
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
161
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
162 Display
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
163 Extents
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
164 Glyphs
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
165 Redisplay
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
166
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
167 Execution
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
168 Byte-Code
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
169 Catch
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
170 Garbage Collection
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
171 Trapping-Problems
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
172
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
173 Lisp Objects
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
174 Buffers
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
175 Char Tables
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
176 Events
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
177 Lstreams
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
178 Hash Tables
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
179 Range Tables
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
180
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
181 Types
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
182 Lrecord Types
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
183 Subtypes
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
184
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
185 Text
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
186 Byte Positions
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
187 Conversion
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
188 Eistrings
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
189 Itext
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
190 Lisp Strings
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
191
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
192 --ben
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
193 */
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
194
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
195
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
196 #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
197 #define INLINE_ERROR_CHECK_CALL , __FILE__, __LINE__
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
198 #define DISABLED_INLINE_ERROR_CHECK_ARGS
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
199 #define DISABLED_INLINE_ERROR_CHECK_CALL
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
200
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
201 /* 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
202 line of the calling function */
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
203 #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
204 /* 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
205 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
206 #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
207
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
208 /* ------- the specific categories -------- */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
209
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
210 #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
211 #define ERROR_CHECK_ANY
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
212 #endif
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
213
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
214 /* KEEP THESE SORTED! */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
215
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
216 #ifdef ERROR_CHECK_BYTE_CODE
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
217 #define byte_code_checking_assert(assertion) assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
218 #else /* not ERROR_CHECK_BYTE_CODE */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
219 #define byte_code_checking_assert(assertion) disabled_assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
220 #endif /* ERROR_CHECK_BYTE_CODE */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
221
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
222 #ifdef ERROR_CHECK_DISPLAY
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
223 #define display_checking_assert(assertion) assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
224 #else /* not ERROR_CHECK_DISPLAY */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
225 #define display_checking_assert(assertion) disabled_assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
226 #endif /* ERROR_CHECK_DISPLAY */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
227
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
228 #ifdef ERROR_CHECK_EXTENTS
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
229 #define extent_checking_assert(assertion) assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
230 #else /* not ERROR_CHECK_EXTENTS */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
231 #define extent_checking_assert(assertion) disabled_assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
232 #endif /* ERROR_CHECK_EXTENTS */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
233
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
234 #ifdef ERROR_CHECK_GC
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
235 #define gc_checking_assert(assertion) assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
236 #else /* not ERROR_CHECK_GC */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
237 #define gc_checking_assert(assertion) disabled_assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
238 #endif /* ERROR_CHECK_GC */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
239
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
240 #ifdef ERROR_CHECK_GLYPHS
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
241 #define glyph_checking_assert(assertion) assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
242 #else /* not ERROR_CHECK_GLYPHS */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
243 #define glyph_checking_assert(assertion) disabled_assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
244 #endif /* ERROR_CHECK_GLYPHS */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
245
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
246 #ifdef ERROR_CHECK_MALLOC
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
247 #define malloc_checking_assert(assertion) assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
248 #else /* not ERROR_CHECK_MALLOC */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
249 #define malloc_checking_assert(assertion) disabled_assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
250 #endif /* ERROR_CHECK_MALLOC */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
251
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
252 #ifdef ERROR_CHECK_STRUCTURES
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
253 #define structure_checking_assert(assertion) assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
254 #else /* not ERROR_CHECK_STRUCTURES */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
255 #define structure_checking_assert(assertion) disabled_assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
256 #endif /* ERROR_CHECK_STRUCTURES */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
257
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
258 #ifdef ERROR_CHECK_TEXT
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
259 #define text_checking_assert(assertion) assert (assertion)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
260 #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
261 assert_at_line (assertion, file, line)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
262 #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
263 #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
264 #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
265 #define text_checking_assert_with_message(assertion, msg) \
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
266 assert_with_message (assertion, msg)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
267 #else /* not ERROR_CHECK_TEXT */
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
268 #define text_checking_assert(assertion) disabled_assert (assertion)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
269 #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
270 disabled_assert_at_line (assertion, file, line)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
271 #define inline_text_checking_assert(assertion) \
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
272 disabled_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 DISABLED_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 DISABLED_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 disabled_assert_with_message (assertion, msg)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
277 #endif /* ERROR_CHECK_TEXT */
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
278
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
279 #ifdef ERROR_CHECK_TYPES
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
280 #define type_checking_assert(assertion) assert (assertion)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
281 #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
282 assert_at_line (assertion, file, line)
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
283 #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
284 #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
285 #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
286 #define type_checking_assert_with_message(assertion, msg) \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
287 assert_with_message (assertion, msg)
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
288 #else /* not ERROR_CHECK_TYPES */
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
289 #define type_checking_assert(assertion) disabled_assert (assertion)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
290 #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
291 disabled_assert_at_line (assertion, file, line)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
292 #define inline_type_checking_assert(assertion) \
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
293 disabled_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 DISABLED_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 DISABLED_INLINE_ERROR_CHECK_CALL
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
296 #define type_checking_assert_with_message(assertion, msg) \
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
297 disabled_assert_with_message (assertion, msg)
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
298 #endif /* ERROR_CHECK_TYPES */
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
299
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
300 /* ------------------------- small categories ------------------------- */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
301
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
302 /* 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
303 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
304 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
305 necessary.
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
306
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
307 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
308 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
309 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
310 of ERROR_CHECK_STRUCTURES.
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 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
313 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
314 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
315 these become needed, they can always be defined. */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
316
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
317 #ifdef ERROR_CHECK_STRUCTURES
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
318 /* 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
319 #define ERROR_CHECK_CATCH
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
320 /* Check for incoherent dynarr structures, attempts to access Dynarr
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
321 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
322 etc. */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
323 #define ERROR_CHECK_DYNARR
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
324 /* Check for insufficient use of call_trapping_problems(), particularly
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
325 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
326 #define ERROR_CHECK_TRAPPING_PROBLEMS
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
327 #endif /* ERROR_CHECK_STRUCTURES */
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
328
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
329 #ifdef ERROR_CHECK_CATCH
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
330 #define catch_checking_assert(assertion) assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
331 #else /* not ERROR_CHECK_CATCH */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
332 #define catch_checking_assert(assertion) disabled_assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
333 #endif /* ERROR_CHECK_CATCH */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
334
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
335 #ifdef ERROR_CHECK_DYNARR
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
336 #define dynarr_checking_assert(assertion) assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
337 #else /* not ERROR_CHECK_DYNARR */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
338 #define dynarr_checking_assert(assertion) disabled_assert (assertion)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
339 #endif /* ERROR_CHECK_DYNARR */
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
340
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
341 #ifdef ERROR_CHECK_TRAPPING_PROBLEMS
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
342 #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
343 #else /* not ERROR_CHECK_TRAPPING_PROBLEMS */
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
344 #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
345 #endif /* ERROR_CHECK_TRAPPING_PROBLEMS */
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
346
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
347 /************************************************************************/
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
348 /** Definitions of basic types **/
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
349 /************************************************************************/
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
350
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
351 /* ------------- 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
352
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
353 #if SIZEOF_SHORT == 2
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
354 #define INT_16_BIT short
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
355 #define UINT_16_BIT unsigned short
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
356 #elif SIZEOF_INT == 2
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
357 /* 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
358 #define INT_16_BIT int
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
359 #define UINT_16_BIT unsigned int
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
360 #else
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
361 #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
362 #endif
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
363
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
364 #if SIZEOF_INT == 4
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
365 #define INT_32_BIT int
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
366 #define UINT_32_BIT unsigned int
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
367 #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
368 #elif SIZEOF_LONG == 4
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
369 /* Bwa ha ha again. */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
370 #define INT_32_BIT long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
371 #define UINT_32_BIT unsigned long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
372 #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
373 #elif SIZEOF_SHORT == 4
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
374 /* And again. */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
375 #define INT_32_BIT short
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
376 #define UINT_32_BIT unsigned short
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
1429
969b7290edca [xemacs-hg @ 2003-04-24 05:33:43 by youngs]
youngs
parents: 1346
diff changeset
378 #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
379 #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
380 #endif
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
381
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
382 #if SIZEOF_LONG == 8
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
383 #define INT_64_BIT long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
384 #define UINT_64_BIT unsigned long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
385 #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
386 #elif SIZEOF_LONG_LONG == 8
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
387 #define INT_64_BIT long long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
388 #define UINT_64_BIT unsigned long long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
389 #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
390 #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
391 #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
392 #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
393 #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
394 /* No error otherwise; just leave undefined */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
395 #endif
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
396
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
397 #if SIZEOF_LONG_LONG == 16
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
398 #define INT_128_BIT long long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
399 #define UINT_128_BIT unsigned long long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
400 #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
401 /* No error otherwise; just leave undefined */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
402 #endif
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
403
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
404 /* #### Fill this in for other systems */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
405 #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
406 #define EFFICIENT_INT_64_BIT INT_64_BIT
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
407 #define EFFICIENT_UINT_64_BIT UINT_64_BIT
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
408 #endif
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
409
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
410 #if defined (INT_128_BIT)
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
411 #define EFFICIENT_INT_128_BIT INT_128_BIT
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
412 #define EFFICIENT_UINT_128_BIT UINT_128_BIT
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
413 #endif
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
414
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
415 #ifdef HAVE_INTTYPES_H
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
416 #include <inttypes.h>
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
417 #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
418 /* included elsewhere */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
419 #elif SIZEOF_VOID_P == SIZEOF_INT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
420 typedef int intptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
421 typedef unsigned int uintptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
422 #elif SIZEOF_VOID_P == SIZEOF_LONG
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
423 typedef long intptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
424 typedef unsigned long uintptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
425 #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
426 typedef long long intptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
427 typedef unsigned long long uintptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
428 #else
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
429 /* Just pray. May break, may not. */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
430 typedef long intptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
431 typedef unsigned long uintptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
432 #endif
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
433
3988
1227374e7199 [xemacs-hg @ 2007-05-26 18:28:19 by aidan]
aidan
parents: 3659
diff changeset
434 #if SIZEOF_VOID_P == 8
1227374e7199 [xemacs-hg @ 2007-05-26 18:28:19 by aidan]
aidan
parents: 3659
diff changeset
435 #define DEADBEEF_CONSTANT 0xCAFEBABEDEADBEEF
1227374e7199 [xemacs-hg @ 2007-05-26 18:28:19 by aidan]
aidan
parents: 3659
diff changeset
436 #elif SIZEOF_VOID_P == 4
1227374e7199 [xemacs-hg @ 2007-05-26 18:28:19 by aidan]
aidan
parents: 3659
diff changeset
437 #define DEADBEEF_CONSTANT 0xDEADBEEF
1227374e7199 [xemacs-hg @ 2007-05-26 18:28:19 by aidan]
aidan
parents: 3659
diff changeset
438 #else
1227374e7199 [xemacs-hg @ 2007-05-26 18:28:19 by aidan]
aidan
parents: 3659
diff changeset
439 #error "What size are your pointers, really?"
1227374e7199 [xemacs-hg @ 2007-05-26 18:28:19 by aidan]
aidan
parents: 3659
diff changeset
440 #endif /* SIZEOF_VOID_P == 8 */
1227374e7199 [xemacs-hg @ 2007-05-26 18:28:19 by aidan]
aidan
parents: 3659
diff changeset
441
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
442 /* ---------------------- definition of EMACS_INT --------------------- */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
443
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
444 /* 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
445 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
446 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
447
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
448 #### 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
449 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
450 is the size of a pointer. */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
451
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
452 #ifndef SIZEOF_EMACS_INT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
453 # define SIZEOF_EMACS_INT SIZEOF_VOID_P
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
454 #endif
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
455
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
456 #ifndef EMACS_INT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
457 # if SIZEOF_EMACS_INT == SIZEOF_LONG
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
458 # define EMACS_INT long
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
459 # elif SIZEOF_EMACS_INT == SIZEOF_INT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
460 # define EMACS_INT int
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
461 # elif SIZEOF_EMACS_INT == SIZEOF_LONG_LONG
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
462 # define EMACS_INT long long
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
463 # else
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
464 # 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
465 # endif
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
466 #endif
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
467
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
468 #ifndef EMACS_UINT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
469 # define EMACS_UINT unsigned EMACS_INT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
470 #endif
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
471
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
472 #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
473
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
474 /* -------------------------- basic byte typedefs --------------------- */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
475
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
476 /* 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
477 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
478 general.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
479
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
480 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
481 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
482 `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
483 functions declared as such.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
484
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
485 (See also "Byte/Character Types" in text.c)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
486
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
487 The basic semantics for `char':
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
488
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
489 a) [Ibyte] pointer to internally-formatted text
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
490 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
491 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
492 c) [Ascbyte] pure ASCII text
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
493 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
494 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
495 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
496 based/byte-based offsets of pointers
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
497 f) [Boolbyte] a zero or a one
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
498 g) [Bitbyte] a byte used for bit fields
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
499 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
500 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
501 appropriate
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
502
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
503
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
504 Prefixing codes:
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
505
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
506 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
507 U = unsigned
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
508 S = signed
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
509
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
510 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
511 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
512 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
513 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
514
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
515 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
516 */
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
517
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
518 /* 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
519 of Ibytes, declared as follows. */
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
520
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
521 typedef unsigned char Ibyte;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
522
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
523 /* 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
524 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
525 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
526 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
527
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
528 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
529 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
530 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
531 versions of the stdlib string functions. */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
532
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
533 typedef char CIbyte;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
534
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
535 /* 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
536 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
537 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
538 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
539 for referring to external text. */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
540
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
541 typedef char Extbyte;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
542 typedef unsigned char UExtbyte;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
543
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
544 #define EXTTEXT_ZTERM_SIZE (sizeof (Extbyte))
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
545
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
546 /* 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
547 the range 00 - 7F) */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
548
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
549 typedef char Ascbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
550 typedef unsigned char UAscbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
551
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
552 /* 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
553 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
554 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
555
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
556 typedef unsigned char Rawbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
557 typedef char CRawbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
558
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
559 /* 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
560
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
561 typedef unsigned char Binbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
562 typedef char CBinbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
563 typedef signed char SBinbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
564
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
565 /* 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
566 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
567
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
568 typedef char Boolbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
569
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
570 /* A byte composed of bitfields. Hardly ever used. */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
571
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
572 typedef unsigned char Bitbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
573
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
574 /* 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
575 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
576 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
577 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
578
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
579 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
580 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
581 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
582 wrong. Go find another one of the types. */
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 typedef char Chbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
585 typedef unsigned char UChbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
586 typedef signed char SChbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
587
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
588 /* ------------------------ other text-related typedefs ------------------- */
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
589
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
590 /* 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
591 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
592 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
593 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
594 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
595 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
596 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
597
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
598 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
599 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
600 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
601 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
602 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
603 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
604 speed.
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
605
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
606 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
607
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
608 /* A character, as represented on its own. */
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
609
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
610 typedef int Ichar;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
611
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
612 /* 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
613 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
614 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
615 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
616 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
617 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
618 buffer into a character. */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
619
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
620 typedef int Raw_Ichar;
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
621
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
622 /* 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
623 "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
624 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
625
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
626 #ifdef UTF16_IBYTE_FORMAT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
627 #define NON_ASCII_INTERNAL_FORMAT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
628 typedef unsigned short Itext;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
629 #else
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
630 typedef Ibyte Itext;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
631 #endif
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
632 typedef EMACS_INT Textcount;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
633
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
634 #define ITEXT_SIZE (sizeof (Itext))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
635 /* 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
636 #define ITEXT_ZTERM_SIZE ITEXT_SIZE
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
637
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
638 /* 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
639 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
640 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
641 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
642 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
643 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
644 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
645 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
646 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
647 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
648 just a nightmare. */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
649 #ifdef WIN32_NATIVE
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
650 #define WEXTTEXT_IS_WIDE
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
651 typedef wchar_t Wexttext;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
652 #else
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
653 typedef Extbyte Wexttext;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
654 #endif
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
655
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
656 #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
657
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
658 /* Counts of bytes or chars */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
659
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
660 typedef EMACS_INT Bytecount;
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
661 typedef EMACS_INT Charcount;
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
662
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
663 /* 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
664 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
665 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
666 of the different positions.
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 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
669 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
670 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
671
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
672 typedef EMACS_INT Charbpos;
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
673 typedef EMACS_INT Bytebpos;
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
674 typedef EMACS_INT Membpos;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
675
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
676 /* 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
677 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
678 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
679 resolve as follows:
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
680
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
681 Typedef Buffer String
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
682 ------------------------------------------------------
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
683 Charxpos Charbpos Charcount
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
684 Bytexpos Bytebpos Bytecount
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
685 Memxpos Membpos Bytecount
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
686
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
687 */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
688
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
689 typedef EMACS_INT Charxpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
690 typedef EMACS_INT Bytexpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
691 typedef EMACS_INT Memxpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
692
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
693 #else /* __cplusplus */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
694
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
695 /* 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
696 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
697 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
698 "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
699 -- 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
700 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
701 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
702 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
703 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
704 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
705 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
706 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
707 private. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
708
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
709 class Bytecount;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
710 class Bytebpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
711 class Bytexpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
712 class Charcount;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
713 class Charbpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
714 class Charxpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
715 class Membpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
716 class Memxpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
717
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
718 /* 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
719 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
720 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
721 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
722 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
723 substitute the same class for POSCL and COUNTCL. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
724
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
725 #define DECLARE_INTCLASS_ARITH_COMPARE(poscl, countcl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
726 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
727 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
728 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
729 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
730 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
731 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
732 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
733 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
734 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
735 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
736 poscl operator + (const unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
737 { return poscl (data + l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
738 poscl operator - (const unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
739 { return poscl (data - l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
740 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
741 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
742 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
743 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
744 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
745 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
746 poscl operator + (const unsigned long& 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 long& 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 short& 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 short& 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 short& 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 short& 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 short& 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 short& 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 short& 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 short& 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 \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
761 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
762 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
763 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
764 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
765 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
766 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
767 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
768 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
769 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
770 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
771 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
772 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
773 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
774 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
775 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
776 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
777 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
778 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
779 poscl operator * (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
780 { return poscl (data * l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
781 poscl operator / (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
782 { return poscl (data / l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
783 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
784 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
785 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
786 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
787 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
788 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
789 poscl operator * (const unsigned short& 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 short& 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 \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
794 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
795 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
796 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
797 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
798 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
799 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
800 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
801 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
802 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
803 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
804 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
805 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
806 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
807 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
808 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
809 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
810 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
811 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
812 poscl operator & (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
813 { return poscl (data & l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
814 poscl operator | (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
815 { return poscl (data | l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
816 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
817 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
818 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
819 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
820 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
821 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
822 poscl operator & (const unsigned short& 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 short& 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 \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
827 poscl operator - () { return poscl (-data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
828 poscl operator-- () { data--; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
829 poscl operator-- (int) { data--; return poscl (data + 1); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
830 poscl operator++ () { data++; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
831 poscl operator++ (int) { data++; return poscl (data - 1); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
832 \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
833 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
834 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
835 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
836 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
837 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
838 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
839 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
840 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
841 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
842 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
843 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
844 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
845 bool operator < (const unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
846 { return data < (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
847 bool operator <= (const unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
848 { return data <= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
849 bool operator > (const unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
850 { 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 unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
852 { 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 unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
854 { 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 long& l) const { return data < (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
858 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
859 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
860 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
861 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
862 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
863 bool operator < (const unsigned long& 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 long& 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 unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
868 { 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 unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
870 { 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 unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
872 { 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 short& l) const { return data < (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
876 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
877 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
878 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
879 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
880 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
881 bool operator < (const unsigned short& 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 short& 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 unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
886 { 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 unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
888 { 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 unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
890 { 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 { return !data; }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
894
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
895 /* 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
896 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
897 section of class GOOD. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
898
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
899 #define DECLARE_BAD_INTCLASS_ARITH_COMPARE(good, bad) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
900 good operator += (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
901 good operator -= (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
902 good operator *= (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
903 good operator /= (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
904 good operator + (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
905 good operator - (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
906 good operator * (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
907 good operator / (const bad& l) { return badret; } \
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 bool operator < (const bad& l) { return 0; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
910 bool operator <= (const bad& l) { return 0; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
911 bool operator > (const bad& l) { return 0; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
912 bool operator >= (const bad& l) { return 0; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
913 bool operator == (const bad& l) { return 0; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
914 bool operator != (const bad& l) { return 0; }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
915
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
916 /* 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
917 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
918 the private section of class GOOD. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
919
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
920 #define DECLARE_BAD_POS_CLASS_ARITH(good) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
921 good operator += (const good& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
922 good operator -= (const good& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
923 good operator *= (const good& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
924 good operator /= (const good& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
925 good operator + (const good& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
926 good operator * (const good& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
927 good operator / (const good& l) { return badret; }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
928
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
929 /* 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
930 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
931
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
932 #define DECLARE_INTCLASS(cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
933 public: \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
934 EMACS_INT data; \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
935 cl () { data = 0xCDCDCDCD; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
936 cl (int i) { data = i; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
937 cl (unsigned int i) { data = i; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
938 cl (long i) { data = i; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
939 cl (unsigned long i) { data = i; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
940 cl (short i) { data = i; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
941 cl (unsigned short i) { data = i; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
942 operator EMACS_INT () const { return data; }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
943
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
944 /* 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
945
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
946 #define DECLARE_COUNT_CLASS(cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
947 DECLARE_INTCLASS (cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
948 DECLARE_INTCLASS_ARITH_COMPARE (cl, cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
949 private: \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
950 static cl badret;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
951
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
952 /* 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
953 Don't call directly. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
954
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
955 #define DECLARE_POS_CLASS_SECOND_HALF(cl, countcl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
956 DECLARE_INTCLASS_ARITH_COMPARE (cl, countcl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
957 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
958 private: \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
959 static cl badret; \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
960 DECLARE_BAD_POS_INTCLASS_ARITH (cl)
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 top of all buffer position classes. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
963
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
964 #define DECLARE_BPOS_CLASS(cl, countcl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
965 DECLARE_INTCLASS (cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
966 DECLARE_POS_CLASS_SECOND_HALF (cl, countcl)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
967
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
968 /* 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
969 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
970 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
971
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
972 #define DECLARE_XPOS_CLASS(cl, countcl, cl1, cl2) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
973 DECLARE_INTCLASS (cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
974 cl (const cl1& x) { data = x.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
975 cl (const cl2& x) { data = x.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
976 operator cl1 () const { return cl1 (data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
977 operator cl2 () const { return cl2 (data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
978 DECLARE_POS_CLASS_SECOND_HALF (cl, countcl)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
979
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
980 /* 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
981 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
982 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
983
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
984 #define DECLARE_BAD_CHAR_INTCLASS_ARITH_COMPARE(charcl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
985 DECLARE_BAD_INTCLASS_ARITH_COMPARE (charcl, Bytecount) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
986 DECLARE_BAD_INTCLASS_ARITH_COMPARE (charcl, Bytebpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
987 DECLARE_BAD_INTCLASS_ARITH_COMPARE (charcl, Bytexpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
988 DECLARE_BAD_INTCLASS_ARITH_COMPARE (charcl, Membpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
989 DECLARE_BAD_INTCLASS_ARITH_COMPARE (charcl, Memxpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
990
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
991 /* 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
992 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
993 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
994
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
995 #define DECLARE_BAD_BYTE_INTCLASS_ARITH_COMPARE(bytecl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
996 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Charcount) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
997 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Charbpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
998 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Charxpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
999 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Membpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1000 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Memxpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1001
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1002 /* 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
1003 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
1004 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
1005
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1006 #define DECLARE_BAD_MEM_INTCLASS_ARITH_COMPARE(bytecl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1007 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Charcount) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1008 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Charbpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1009 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Charxpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1010 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Bytebpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1011 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Bytexpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1012
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1013 class Charcount
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1014 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1015 DECLARE_COUNT_CLASS (Charcount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1016 DECLARE_BAD_CHAR_INTCLASS_ARITH_COMPARE (Charcount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1017 };
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1018
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1019 class Charbpos
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1020 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1021 DECLARE_BPOS_CLASS (Charbpos, Charcount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1022 DECLARE_BAD_CHAR_INTCLASS_ARITH_COMPARE (Charbpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1023 };
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 class Charxpos
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1026 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1027 DECLARE_XPOS_CLASS (Charxpos, Charcount, Charbpos, Charcount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1028 DECLARE_BAD_CHAR_INTCLASS_ARITH_COMPARE (Charxpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1029 };
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 class Bytecount
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1032 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1033 DECLARE_COUNT_CLASS (Bytecount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1034 DECLARE_BAD_BYTE_INTCLASS_ARITH_COMPARE (Bytecount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1035 };
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 class Bytebpos
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1038 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1039 DECLARE_BPOS_CLASS (Bytebpos, Bytecount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1040 DECLARE_BAD_BYTE_INTCLASS_ARITH_COMPARE (Bytebpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1041 };
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 class Bytexpos
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1044 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1045 DECLARE_XPOS_CLASS (Bytexpos, Bytecount, Bytebpos, Bytecount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1046 DECLARE_BAD_BYTE_INTCLASS_ARITH_COMPARE (Bytexpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1047 };
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 class Membpos
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1050 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1051 DECLARE_BPOS_CLASS (Membpos, Bytecount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1052 DECLARE_BAD_MEM_INTCLASS_ARITH_COMPARE (Membpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1053 };
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 class Memxpos
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1056 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1057 DECLARE_XPOS_CLASS (Memxpos, Bytecount, Membpos, Bytecount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1058 DECLARE_BAD_MEM_INTCLASS_ARITH_COMPARE (Memxpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1059 };
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1060
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1061 #define DECLARE_POINTER_TYPE_ARITH_COUNT(pointer, countcl) \
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1062 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
1063 { x += y.data; return x; } \
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1064 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
1065 { x -= y.data; return x; } \
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1066 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
1067 { return x + y.data; } \
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1068 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
1069 { return x - y.data; }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1070
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1071 #define DECLARE_INTEGRAL_TYPE_ARITH_COUNT(integral, countcl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1072 inline integral operator += (integral & x, const countcl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1073 { x += y.data; return x; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1074 inline integral operator -= (integral & x, const countcl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1075 { x -= y.data; return x; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1076 inline countcl operator + (integral x, const countcl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1077 { return countcl (x + y.data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1078 inline countcl operator - (integral x, const countcl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1079 { return countcl (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_COMPARE(integral, cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1082 inline bool operator < (integral x, const cl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1083 { return (EMACS_INT) x < y.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1084 inline bool operator <= (integral x, const cl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1085 { return (EMACS_INT) x <= y.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1086 inline bool operator > (integral x, const cl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1087 { return (EMACS_INT) x > y.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1088 inline bool operator >= (integral x, const cl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1089 { return (EMACS_INT) x >= y.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1090 inline bool operator == (integral x, const cl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1091 { return (EMACS_INT) x == y.data; } \
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
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1095 #if 0
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1096 /* 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
1097 to manually deal with ambiguities using casting */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1098 #define DECLARE_INTEGRAL_TYPE_TRISTATE(integral, cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1099 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
1100 { return b ? cl (x) : y; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1101 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
1102 { return b ? x : cl (y); }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1103 #endif /* 0 */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1104
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
1105 /* 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
1106 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
1107 DECLARE_POINTER_TYPE_ARITH_COUNT (Ibyte *, Bytecount);
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1108 DECLARE_POINTER_TYPE_ARITH_COUNT (Extbyte *, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1109
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1110 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (int, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1111 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (int, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1112 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (unsigned int, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1113 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (unsigned int, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1114 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (long, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1115 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (long, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1116 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (unsigned long, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1117 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (unsigned long, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1118
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1119 DECLARE_INTEGRAL_TYPE_COMPARE (int, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1120 DECLARE_INTEGRAL_TYPE_COMPARE (int, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1121 DECLARE_INTEGRAL_TYPE_COMPARE (unsigned int, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1122 DECLARE_INTEGRAL_TYPE_COMPARE (unsigned int, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1123 DECLARE_INTEGRAL_TYPE_COMPARE (long, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1124 DECLARE_INTEGRAL_TYPE_COMPARE (long, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1125 DECLARE_INTEGRAL_TYPE_COMPARE (unsigned long, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1126 DECLARE_INTEGRAL_TYPE_COMPARE (unsigned long, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1127
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1128 #if 0 /* doesn't work */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
1129 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
1130 { return Bytecount (x - y); }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1131 #endif
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1132
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1133 #endif /* __cplusplus */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
1134
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1135 /* Counts of elements */
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1136 typedef EMACS_INT Elemcount;
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1137 /* Hash codes */
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1138 typedef unsigned long Hashcode;
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1139 /* Booleans */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1140 typedef int Boolint;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1141
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1142 /* ------------------------ basic compiler defines ------------------- */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1143
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
1144 #include "compiler.h"
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
1145
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1146 /* ------------------------ alignment definitions ------------------- */
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1147
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1148 /* No type has a greater alignment requirement than max_align_t.
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1149 (except perhaps for types we don't use, like long double) */
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1150 typedef union
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1151 {
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1152 struct { long l; } l;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1153 struct { void *p; } p;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1154 struct { void (*f)(void); } f;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1155 struct { double d; } d;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1156 } max_align_t;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1157
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1158 /* 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
1159 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
1160 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
1161 as the type itself. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1162
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1163 #ifndef ALIGNOF
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1164 # if defined (__GNUC__) && (__GNUC__ >= 2)
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1165 /* gcc has an extension that gives us exactly what we want. */
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1166 # define ALIGNOF(type) __alignof__ (type)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1167 # elif ! defined (__cplusplus)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1168 /* The following is mostly portable, except that:
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1169 - it doesn't work for inside out declarations like void (*) (void).
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1170 (so just call ALIGNOF with a typedef'ed name)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1171 - it doesn't work with C++. The C++ committee has decided,
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1172 in its infinite wisdom, that:
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1173 "Types must be declared in declarations, not in expressions." */
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1174 # define ALIGNOF(type) offsetof (struct { char c; type member; }, member)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1175 # else
456
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1176 /* C++ is annoying, but it has a big bag of tricks.
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1177 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
1178 template<typename T> struct alignment_trick { char c; T member; };
456
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1179 # define ALIGNOF(type) offsetof (alignment_trick<type>, member)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1180 # endif
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
1181 #endif /* ALIGNOF */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1182
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1183 /* 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
1184 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
1185 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
1186 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
1187 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
1188 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
1189
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1190 #define ALIGN_SIZE(len, unit) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1191 ((((len) + (unit) - 1) / (unit)) * (unit))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1192
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1193 /* 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
1194 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
1195 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
1196 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
1197 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
1198 aligned for all types). */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1199
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1200 #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
1201
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1202 /* 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
1203 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
1204 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
1205 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
1206
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1207 #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
1208
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1209 /* 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
1210 data of TYPE. */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1211 #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
1212
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
1213 BEGIN_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
1214
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1215 /* ------------------------ assertions ------------------- */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1216
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1217 /* We define assert iff USE_ASSERTIONS or DEBUG_XEMACS is defined.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1218 Otherwise we define it to be empty. Quantify has shown that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1219 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
1220 in production binaries.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1221
788
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
1222 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
1223 failures.
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
1224
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
1225 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
1226 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
1227 and line of the inline function, which is not very useful. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1228
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1229 /* Highly dubious kludge */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1230 /* (thanks, Jamie, I feel better now -- ben) */
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1231 MODULE_API void assert_failed (const Ascbyte *, int, const Ascbyte *);
4914
1628e3b9601a When aborting due to unknown opcode, output more descriptive msg
Ben Wing <ben@xemacs.org>
parents: 4910
diff changeset
1232 #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
1233 #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
1234
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
1235 /* 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
1236 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
1237 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
1238 `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
1239 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
1240 change it in the future. */
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
1241 #define disabled_assert(x) ((void) (x))
4932
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
1242 #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
1243 #define disabled_assert_at_line(x, file, line) \
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
1244 ((void) file, (void) line, disabled_assert (x))
4843
715b15990d0a add more foo_checking_assert macros
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
1245
2535
4c1f2310451d [xemacs-hg @ 2005-01-31 19:29:47 by ben]
ben
parents: 2532
diff changeset
1246 #ifdef USE_ASSERTIONS
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1247 # 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
1248 # define assert_with_message(x, msg) \
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1249 ((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
1250 # define assert_at_line(x, file, line) \
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
1251 ((x) ? (void) 0 : assert_failed (file, line, #x))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1252 #else
2956
ee35a8fdcfcd [xemacs-hg @ 2005-09-27 05:29:41 by ben]
ben
parents: 2862
diff changeset
1253 /* 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
1254 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
1255 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
1256 no effects. */
4932
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
1257 # define assert(x) disabled_assert (x)
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
1258 # 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
1259 # define assert_at_line(x, file, line) disabled_assert_at_line (x, file, line)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1260 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1261
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1262 /************************************************************************/
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1263 /** Memory allocation **/
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1264 /************************************************************************/
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1265
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1266 /* ------------------------ simple memory allocation ------------------- */
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1267
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1268 /* Basic memory allocation and freeing functions */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1269 void malloc_warning (const Ascbyte *);
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
1270 MODULE_API void *xmalloc (Bytecount size) ATTRIBUTE_MALLOC;
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
1271 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
1272 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
1273 MODULE_API Chbyte *xstrdup (const Chbyte *) ATTRIBUTE_MALLOC;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1274
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1275 /* Basic free function */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1276
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1277 MODULE_API void xfree_1 (void *);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1278 #ifdef ERROR_CHECK_MALLOC
4976
16112448d484 Rename xfree(FOO, TYPE) -> xfree(FOO)
Ben Wing <ben@xemacs.org>
parents: 4969
diff changeset
1279 /* 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
1280 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
1281 #define xfree(lvalue) do \
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1282 { \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1283 xfree_1 (lvalue); \
3988
1227374e7199 [xemacs-hg @ 2007-05-26 18:28:19 by aidan]
aidan
parents: 3659
diff changeset
1284 VOIDP_CAST (lvalue) = (void *) DEADBEEF_CONSTANT; \
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1285 } while (0)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1286 #else
4976
16112448d484 Rename xfree(FOO, TYPE) -> xfree(FOO)
Ben Wing <ben@xemacs.org>
parents: 4969
diff changeset
1287 #define xfree(lvalue) xfree_1 (lvalue)
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1288 #endif /* ERROR_CHECK_MALLOC */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1289
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1290 /* ------------------------ stack allocation -------------------------- */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1291
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1292 /* 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
1293 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
1294 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
1295 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
1296 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
1297 way.
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1298
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1299 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
1300 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
1301 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
1302 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
1303 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
1304 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
1305 that keeps tripping the alloca() limit.
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1306
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1307 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
1308 do cleanup:
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1309
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1310 -- 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
1311 -- 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
1312 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
1313 or every 10th funcall
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1314
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1315 This should not be a big penalty because
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 (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
1318 (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
1319 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
1320 */
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1321
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1322 /* 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
1323 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
1324 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
1325 not be freed for awhile. */
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1326
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1327 #define MAX_ALLOCA_VS_C_ALLOCA 262144
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1328 #define MAX_ALLOCA_VS_MALLOC 65536
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1329
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1330 #define MAX_FUNCALLS_BETWEEN_ALLOCA_CLEANUP 10
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1331
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
1332 extern MODULE_API Bytecount __temp_alloca_size__;
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1333 extern Bytecount funcall_alloca_count;
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1334
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1335 #ifdef ERROR_CHECK_MALLOC
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
1336 extern MODULE_API int regex_malloc_disallowed;
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1337 #define REGEX_MALLOC_CHECK() assert (!regex_malloc_disallowed)
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1338 #else
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1339 #define REGEX_MALLOC_CHECK() ((void) 0)
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1340 #endif
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1341
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1342 /* Do stack or heap alloca() depending on size.
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1343
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1344 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
1345 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
1346 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
1347 expression has side effects -- something easy to forget. */
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1348
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1349 #define ALLOCA(size) \
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1350 (REGEX_MALLOC_CHECK (), \
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1351 __temp_alloca_size__ = (size), \
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1352 __temp_alloca_size__ > MAX_ALLOCA_VS_C_ALLOCA ? \
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1353 xemacs_c_alloca (__temp_alloca_size__) : \
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1354 (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
1355 alloca (__temp_alloca_size__)))
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1356
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1357 /* 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
1358 (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
1359 function calls). */
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1360 #ifdef BROKEN_ALLOCA_IN_FUNCTION_CALLS
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1361 #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
1362 #else
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1363 #define ALLOCA_FUNCALL_OK(size) ALLOCA (size)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1364 #endif
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1365
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1366 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
1367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1368 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
1369
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1370 DECLARE_INLINE_HEADER (
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1371 void *
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1372 xmalloc_and_record_unwind (Bytecount size)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1373 )
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1374 {
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1375 void *ptr = xmalloc (size);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1376 record_unwind_protect_freeing (ptr);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1377 return ptr;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1378 }
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1379
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1380 /* 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
1381 function! */
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1382
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1383 #define MALLOC_OR_ALLOCA(size) \
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1384 (REGEX_MALLOC_CHECK (), \
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1385 __temp_alloca_size__ = (size), \
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1386 __temp_alloca_size__ > MAX_ALLOCA_VS_MALLOC ? \
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1387 xmalloc_and_record_unwind (__temp_alloca_size__) : \
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1388 (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
1389 alloca (__temp_alloca_size__)))
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1390
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1391 /* -------------- convenience functions for memory allocation ------------- */
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 #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
1394 #define xnew(type) ((type *) xmalloc (sizeof (type)))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1395 #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
1396 #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
1397 #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
1398 #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
1399
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1400 #define alloca_new(type) ((type *) ALLOCA (sizeof (type)))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1401 #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
1402
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1403 #define alloca_itexts(num) alloca_array (Itext, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1404 #define alloca_ibytes(num) alloca_array (Ibyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1405 #define alloca_extbytes(num) alloca_array (Extbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1406 #define alloca_rawbytes(num) alloca_array (Rawbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1407 #define alloca_binbytes(num) alloca_array (Binbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1408 #define alloca_ascbytes(num) alloca_array (Ascbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1409 #define xmalloc_itexts(num) xnew_array (Itext, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1410 #define xnew_ibytes(num) xnew_array (Ibyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1411 #define xnew_extbytes(num) xnew_array (Extbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1412 #define xnew_rawbytes(num) xnew_array (Rawbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1413 #define xnew_binbytes(num) xnew_array (Binbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1414 #define xnew_ascbytes(num) xnew_array (Ascbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1415
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1416 /* Make an alloca'd copy of a Ibyte * */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1417 #define IBYTE_STRING_TO_ALLOCA(p, lval) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1418 do { \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1419 Ibyte **_bsta_ = (Ibyte **) &(lval); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1420 const Ibyte *_bsta_2 = (p); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1421 Bytecount _bsta_3 = qxestrlen (_bsta_2); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1422 *_bsta_ = alloca_ibytes (1 + _bsta_3); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1423 memcpy (*_bsta_, _bsta_2, 1 + _bsta_3); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1424 } while (0)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1425
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1426 /* ----------------- convenience functions for reallocation --------------- */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1427
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1428 #define XREALLOC_ARRAY(ptr, type, len) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1429 ((void) (ptr = (type *) xrealloc (ptr, (len) * sizeof (type))))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1430
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1431 /* 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
1432 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
1433 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
1434 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
1435 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
1436 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
1437 which ensures constant amortized time per element. */
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1438 #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
1439 Bytecount do_realloc_needed_size = (needed_size); \
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1440 REGEX_MALLOC_CHECK (); \
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1441 if ((sizevar) < do_realloc_needed_size) \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1442 { \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1443 if ((sizevar) < 32) \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1444 (sizevar) = 32; \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1445 while ((sizevar) < do_realloc_needed_size) \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1446 (sizevar) *= 2; \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1447 XREALLOC_ARRAY (basevar, type, (sizevar)); \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1448 } \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1449 } while (0)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1450
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1451 /************************************************************************/
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1452 /** Definitions of more complex types **/
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1453 /************************************************************************/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1454
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
1455 /* 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
1456
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1457 /* We put typedefs here so that prototype declarations don't choke.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1458 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
1459 maybe for simple structures like dynarrs); that keeps them private
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1460 to the routines that actually use them. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1461
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1462 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1463 /* Error_Behavior typedefs */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1464 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1465
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
1466 #ifndef ERROR_CHECK_TYPES
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1467
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1468 typedef enum error_behavior
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1469 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1470 ERROR_ME,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1471 ERROR_ME_NOT,
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1472 ERROR_ME_WARN,
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1473 ERROR_ME_DEBUG_WARN
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1474 } Error_Behavior;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1475
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1476 #define ERRB_EQ(a, b) ((a) == (b))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1477
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1478 #else
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1479
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1480 /* 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
1481 for code that lazily uses ints. */
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 typedef struct _error_behavior_struct_
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1484 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1485 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
1486 } Error_Behavior;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1487
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1488 extern Error_Behavior ERROR_ME;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1489 extern Error_Behavior ERROR_ME_NOT;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1490 extern Error_Behavior ERROR_ME_WARN;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1491 extern Error_Behavior ERROR_ME_DEBUG_WARN;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1492
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1493 #define ERRB_EQ(a, b) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1494 ((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
1495 (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
1496
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1497 #endif
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1498
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1499 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1500 /* Empty structures and typedefs */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1501 /* ------------------------------- */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1502
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1503 struct buffer; /* "buffer.h" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1504 struct console; /* "console.h" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1505 struct device; /* "device.h" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1506 struct extent_fragment;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1507 struct extent;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1508 struct frame; /* "frame.h" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1509 struct window; /* "window.h" */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1510 struct utimbuf; /* "systime.h" or <utime.h> */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1511 struct display_line;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1512 struct display_glyph_area;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1513 struct display_box;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1514 struct redisplay_info;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1515 struct window_mirror;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1516 struct scrollbar_instance;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1517 struct font_metric_info;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1518 struct face_cachel;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1519 struct console_type_entry;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1520
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1521 /* 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
1522 See events.h for description */
4123
5333f383efbd [xemacs-hg @ 2007-08-17 08:04:25 by crestani]
crestani
parents: 4096
diff changeset
1523 typedef unsigned EMACS_INT USID;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1524 typedef int face_index;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1525 typedef int glyph_index;
1726
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 1706
diff changeset
1526 typedef struct lstream Lstream; /* lstream.h */
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
1527 typedef struct extent *EXTENT; /* extents-impl.h */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1528 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
1529 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
1530 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
1531 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
1532 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
1533 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
1534 typedef struct Lisp_Gui_Item Lisp_Gui_Item;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1535
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1536 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1537 /* enum typedefs */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1538 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1539
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1540 enum run_hooks_condition
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1541 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1542 RUN_HOOKS_TO_COMPLETION,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1543 RUN_HOOKS_UNTIL_SUCCESS,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1544 RUN_HOOKS_UNTIL_FAILURE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1545 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1546
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1547 #ifdef HAVE_TOOLBARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1548 enum toolbar_pos
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1549 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1550 TOP_TOOLBAR,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1551 BOTTOM_TOOLBAR,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1552 LEFT_TOOLBAR,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1553 RIGHT_TOOLBAR
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1554 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1555 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1556
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1557 enum edge_style
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1558 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1559 EDGE_ETCHED_IN,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1560 EDGE_ETCHED_OUT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1561 EDGE_BEVEL_IN,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1562 EDGE_BEVEL_OUT
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 munge_me_out_the_door
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 MUNGE_ME_FUNCTION_KEY,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1568 MUNGE_ME_KEY_TRANSLATION
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1569 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1570
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
1571 /* 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
1572 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
1573 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
1574 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
1575 */
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1576 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
1577 {
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1578 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
1579 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
1580 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
1581 };
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
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1583 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1584 /* misc */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1585 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1586
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1587 #ifdef MEMORY_USAGE_STATS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1588
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1589 /* 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
1590 in use.
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 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
1593 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
1594 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
1595 facilitate allocation, reallocation, etc. MALLOC_OVERHEAD is for
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1596 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
1597 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
1598 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
1599 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
1600 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
1601 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
1602 to allocate.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1603
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1604 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
1605 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
1606 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
1607
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1608 struct overhead_stats
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1609 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1610 int was_requested;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1611 int malloc_overhead;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1612 int dynarr_overhead;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1613 int gap_overhead;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1614 };
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1615
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1616 #endif /* MEMORY_USAGE_STATS */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1617
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1618
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1619 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1620 /* Definition of Lisp_Object data type */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1621 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1622
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1623 /* Define the fundamental Lisp data structures */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1624
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1625 /* This is the set of Lisp data types */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1626
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1627 enum Lisp_Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1628 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1629 Lisp_Type_Record,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1630 Lisp_Type_Int_Even,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1631 Lisp_Type_Char,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1632 Lisp_Type_Int_Odd
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1635 #define POINTER_TYPE_P(type) ((type) == Lisp_Type_Record)
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 /* Overridden by m/next.h */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1638 #ifndef ASSERT_VALID_POINTER
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1639 # define ASSERT_VALID_POINTER(pnt) (assert ((((EMACS_UINT) pnt) & 3) == 0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1640 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1641
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1642 #define GCMARKBITS 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1643 #define GCTYPEBITS 2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1644 #define GCBITS 2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1645 #define INT_GCBITS 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1646
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1647 #define INT_VALBITS (BITS_PER_EMACS_INT - INT_GCBITS)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1648 #define VALBITS (BITS_PER_EMACS_INT - GCBITS)
542
2e265ae71eed [xemacs-hg @ 2001-05-17 09:52:16 by yoshiki]
yoshiki
parents: 528
diff changeset
1649 #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
1650 #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
1651 /* WARNING: evaluates its arg twice. */
19dfb459d51a [xemacs-hg @ 2002-04-03 10:47:37 by ben]
ben
parents: 801
diff changeset
1652 #define NUMBER_FITS_IN_AN_EMACS_INT(num) \
19dfb459d51a [xemacs-hg @ 2002-04-03 10:47:37 by ben]
ben
parents: 801
diff changeset
1653 ((num) <= EMACS_INT_MAX && (num) >= EMACS_INT_MIN)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1654
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1655 #ifdef USE_UNION_TYPE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1656 # include "lisp-union.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1657 #else /* !USE_UNION_TYPE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1658 # include "lisp-disunion.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1659 #endif /* !USE_UNION_TYPE */
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 XPNTR(x) ((void *) XPNTRVAL(x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1662
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1663 /* Close your eyes now lest you vomit or spontaneously combust ... */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1664
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1665 #define HACKEQ_UNSAFE(obj1, obj2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1666 (EQ (obj1, obj2) || (!POINTER_TYPE_P (XTYPE (obj1)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1667 && !POINTER_TYPE_P (XTYPE (obj2)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1668 && XCHAR_OR_INT (obj1) == XCHAR_OR_INT (obj2)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1669
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1670 #ifdef DEBUG_XEMACS
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
1671 extern MODULE_API int debug_issue_ebola_notices;
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
1672 MODULE_API int eq_with_ebola_notice (Lisp_Object, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1673 #define EQ_WITH_EBOLA_NOTICE(obj1, obj2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1674 (debug_issue_ebola_notices ? eq_with_ebola_notice (obj1, obj2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1675 : EQ (obj1, obj2))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1676 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1677 #define EQ_WITH_EBOLA_NOTICE(obj1, obj2) EQ (obj1, obj2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1678 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1679
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1680 /* OK, you can open them again */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1681
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
1682 END_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
1683
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1684 #include "lrecord.h"
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1685
5013
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1686 /* 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
1687 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
1688 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
1689 Instead, you GET_VOID_FROM_LISP:
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1690
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1691 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
1692 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
1693
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1694 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
1695 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
1696 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
1697 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
1698
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1699 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
1700 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
1701 Lisp allocation.
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1702 */
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1703
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1704 DECLARE_INLINE_HEADER (
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1705 Lisp_Object
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1706 STORE_VOID_IN_LISP (void *ptr)
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 {
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1709 EMACS_UINT p = (EMACS_UINT) ptr;
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1710
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1711 type_checking_assert ((p & 1) == 0);
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1712 return make_int (p >> 1);
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1713 }
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1714
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1715 DECLARE_INLINE_HEADER (
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1716 void *
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1717 GET_VOID_FROM_LISP (Lisp_Object obj)
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1718 )
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1719 {
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1720 EMACS_UINT p = XUINT (obj);
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
1721 return (void *) (p << 1);
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
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1724 /************************************************************************/
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1725 /** Definitions of dynamic arrays (dynarrs) and other allocators **/
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1726 /************************************************************************/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1727
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
1728 BEGIN_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
1729
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1730 /************* Dynarr declaration *************/
3293
168191f9515f [xemacs-hg @ 2006-03-20 21:20:19 by crestani]
crestani
parents: 3263
diff changeset
1731
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1732 #ifdef NEW_GC
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1733 #define DECLARE_DYNARR_LISP_IMP() \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1734 const struct lrecord_implementation *lisp_imp;
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1735 #else
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1736 #define DECLARE_DYNARR_LISP_IMP()
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1737 #endif
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1738
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
1739 #ifdef ERROR_CHECK_DYNARR
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1740 #define DECLARE_DYNARR_LOCKED() \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1741 int locked;
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1742 #else
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1743 #define DECLARE_DYNARR_LOCKED()
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1744 #endif
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1745
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1746 #define Dynarr_declare(type) \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1747 struct lrecord_header header; \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1748 type *base; \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1749 DECLARE_DYNARR_LISP_IMP () \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1750 DECLARE_DYNARR_LOCKED () \
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1751 int elsize_; \
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1752 int len_; \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1753 int largest_; \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1754 int max_
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1755
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1756 typedef struct dynarr
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1757 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1758 Dynarr_declare (void);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1759 } Dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1760
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1761 #define XD_DYNARR_DESC(base_type, sub_desc) \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1762 { XD_BLOCK_PTR, offsetof (base_type, base), \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1763 XD_INDIRECT(1, 0), {sub_desc} }, \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1764 { XD_INT, offsetof (base_type, len_) }, \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1765 { XD_INT_RESET, offsetof (base_type, largest_), XD_INDIRECT(1, 0) }, \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1766 { XD_INT_RESET, offsetof (base_type, max_), XD_INDIRECT(1, 0) }
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1767
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1768 #ifdef NEW_GC
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1769 #define XD_LISP_DYNARR_DESC(base_type, sub_desc) \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1770 { XD_LISP_OBJECT_BLOCK_PTR, offsetof (base_type, base), \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1771 XD_INDIRECT(1, 0), {sub_desc} }, \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1772 { XD_INT, offsetof (base_type, len_) }, \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1773 { XD_INT_RESET, offsetof (base_type, largest_), XD_INDIRECT(1, 0) }, \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1774 { XD_INT_RESET, offsetof (base_type, max_), XD_INDIRECT(1, 0) }
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1775 #endif /* NEW_GC */
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1776
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1777 /************* Dynarr verification *************/
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1778
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1779 /* Dynarr locking and verification.
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1780
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1781 [I] VERIFICATION
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1782
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1783 Verification routines simply return their basic argument, possibly
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1784 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
1785 the verification fails. The verification routines take FILE and LINE
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1786 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
1787 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
1788 function, which is less than useful.
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1789
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1790 There are three basic types of verification routines:
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1791
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1792 (1) Verify the dynarr itself. This verifies the basic invariant
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1793 involving the length/size values:
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 0 <= Dynarr_length(d) <= Dynarr_largest(d) <= Dynarr_max(d)
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 (2) Verify the dynarr itself prior to modifying it. This performs
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1798 the same verification as previously, but also checks that the
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1799 dynarr is not locked (see below).
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1800
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1801 (3) Verify a dynarr position. Unfortunately we have to have
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1802 different verification routines depending on which kind of operation
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1803 is being performed:
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1804
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1805 (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
1806 i.e. 0 <= POS < Dynarr_largest().
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1807 (b) For Dynarr_atp_allow_end(), we also have to allow
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1808 POS == Dynarr_largest().
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1809 (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
1810 special exception when POS == 0 and Dynarr_largest() == 0 -- see
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1811 comment below.
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1812 (d) Some other routines contain the POS verification within their code,
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1813 and make the check 0 <= POS < Dynarr_length() or
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1814 0 <= POS <= Dynarr_length().
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1815
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1816 #### 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
1817 allowed to use a position that is between Dynarr_length() and
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1818 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
1819 instead that code first change the length before accessing higher
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1820 positions. That would require looking through all the code that accesses
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1821 dynarrs and fixing it appropriately (especially redisplay code, and
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1822 especially redisplay code in the vicinity of a reference to
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1823 Dynarr_largest(), since such code usually checks explicitly to see whether
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1824 there is extra stuff between Dynarr_length() and Dynarr_largest().)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1825
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1826 [II] LOCKING
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1827
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1828 The idea behind dynarr locking is simple: Locking a dynarr prevents
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1829 any modification from occurring, or rather, leads to an abort upon
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1830 any attempt to modify a dynarr.
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1831
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1832 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
1833 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
1834 corrupted in an unexpected fashion. The solution was to lock the
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1835 dynarrs that were getting corrupted (in this case, the display-line
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1836 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
1837 these dynarrs but might somehow be calling code that modified them.
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1838 This eventually revealed that there was a reentrancy problem with
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1839 redisplay that involved the QUIT mechanism and the processing done in
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1840 order to determine whether C-g had been pressed -- this processing
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1841 involves retrieving, processing and queueing pending events to see
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1842 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
1843 MS Windows this can result in redisplay being called reentrantly.
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1844 For more info:--
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 (Info-goto-node "(internals)Critical Redisplay Sections")
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1847
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1848 */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1849
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
1850 #ifdef ERROR_CHECK_DYNARR
4844
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1851 DECLARE_INLINE_HEADER (
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1852 int
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1853 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
1854 )
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1855 {
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1856 Dynarr *dy = (Dynarr *) d;
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1857 /* 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
1858 accesses stuff between len and largest. */
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1859 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
1860 return pos;
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1861 }
4929
b5ad8cf9f6e4 fix dynarr-related crash apparently due to compiler bug
Ben Wing <ben@xemacs.org>
parents: 4880
diff changeset
1862
4844
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1863 DECLARE_INLINE_HEADER (
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1864 int
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1865 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
1866 )
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1867 {
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1868 Dynarr *dy = (Dynarr *) d;
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1869 /* 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
1870 accesses stuff between len and largest. */
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
1871 /* [[ 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
1872
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1873 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
1874 Dynarr_length (dyn));
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1875
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1876 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
1877 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
1878 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
1879 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
1880 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
1881 so we put in a special check. --ben ]]
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
1882
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
1883 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
1884 `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
1885 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
1886 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
1887 return pos;
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1888 /* #### 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
1889 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
1890 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
1891 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
1892 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
1893 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
1894 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
1895 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
1896 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
1897 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
1898 behavior, possibly overwriting other memory, which is bad). --ben */
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1899 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
1900 return pos;
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1901 }
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1902
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1903 DECLARE_INLINE_HEADER (
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1904 int
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1905 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
1906 int line)
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1907 )
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1908 {
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1909 Dynarr *dy = (Dynarr *) d;
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1910 /* 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
1911 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
1912 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
1913 legitimately space. See comments in Dynarr_verify_pos_atp.()*/
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1914 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
1915 return pos;
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
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1918 #else
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
1919 #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
1920 #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
1921 #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
1922 #endif /* ERROR_CHECK_DYNARR */
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
1923
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
1924 #ifdef ERROR_CHECK_DYNARR
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1925 DECLARE_INLINE_HEADER (
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1926 Dynarr *
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1927 Dynarr_verify_1 (void *d, const Ascbyte *file, int line)
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1928 )
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1929 {
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1930 Dynarr *dy = (Dynarr *) d;
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1931 assert_at_line (dy->len_ >= 0 && dy->len_ <= dy->largest_ &&
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1932 dy->largest_ <= dy->max_, file, line);
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1933 return dy;
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1934 }
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1935
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1936 DECLARE_INLINE_HEADER (
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1937 Dynarr *
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1938 Dynarr_verify_mod_1 (void *d, const Ascbyte *file, int line)
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1939 )
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1940 {
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1941 Dynarr *dy = (Dynarr *) d;
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1942 assert_at_line (!dy->locked, file, line);
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1943 return Dynarr_verify_1 (d, file, line);
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1944 }
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1945
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1946 #define Dynarr_verify(d) Dynarr_verify_1 (d, __FILE__, __LINE__)
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1947 #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
1948
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1949 DECLARE_INLINE_HEADER (
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1950 void
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1951 Dynarr_lock (void *d)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1952 )
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1953 {
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1954 Dynarr *dy = Dynarr_verify_mod (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1955 dy->locked = 1;
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1956 }
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1957
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1958 DECLARE_INLINE_HEADER (
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1959 void
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1960 Dynarr_unlock (void *d)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1961 )
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 Dynarr *dy = Dynarr_verify (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1964 assert (dy->locked);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1965 dy->locked = 0;
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 #else /* not ERROR_CHECK_DYNARR */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1969
5005
4170f3809a28 Cast correctly, Dynarr_verify, Dynarr_verify_mod, no ERROR_CHECK_STRUCTURES
Aidan Kehoe <kehoea@parhasard.net>
parents: 5001
diff changeset
1970 #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
1971 #define Dynarr_verify_mod(d) ((Dynarr *) d)
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1972 #define Dynarr_lock(d) DO_NOTHING
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1973 #define Dynarr_unlock(d) DO_NOTHING
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1974
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
1975 #endif /* ERROR_CHECK_DYNARR */
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1976
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1977 /************* Dynarr creation *************/
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1978
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1979 MODULE_API void *Dynarr_newf (Bytecount elsize);
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1980 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
1981
3293
168191f9515f [xemacs-hg @ 2006-03-20 21:20:19 by crestani]
crestani
parents: 3263
diff changeset
1982 #ifdef NEW_GC
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
1983 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
1984 const struct lrecord_implementation
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1985 *dynarr_imp,
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1986 const struct lrecord_implementation *imp);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1987
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1988 #define Dynarr_lisp_new(type, dynarr_imp, imp) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1989 ((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
1990 #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
1991 ((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
1992 #endif /* NEW_GC */
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1993 #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
1994 #define Dynarr_new2(dynarr_type, type) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
1995 ((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
1996
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1997 /************* Dynarr access *************/
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
1998
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
1999 #ifdef ERROR_CHECK_DYNARR
4844
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
2000 #define Dynarr_at(d, pos) \
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
2001 ((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
2002 #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
2003 (&((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
2004 #define Dynarr_atp(d, pos) \
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
2005 (&((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
2006 #else
b5ad8cf9f6e4 fix dynarr-related crash apparently due to compiler bug
Ben Wing <ben@xemacs.org>
parents: 4880
diff changeset
2007 #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
2008 #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
2009 #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
2010 #endif
4844
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
2011
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4843
diff changeset
2012 /* 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
2013 #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
2014 #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
2015 #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
2016
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2017
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2018 /************* Dynarr length/size retrieval and setting *************/
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2019
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2020 /* 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
2021 be used as an lvalue. */
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2022 #define Dynarr_length(d) (Dynarr_verify (d)->len_ + 0)
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2023 /* 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
2024 ensure that this cannot be used as an lvalue. */
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2025 #define Dynarr_largest(d) (Dynarr_verify (d)->largest_ + 0)
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2026 /* Retrieve the number of elements that fit in the currently allocated
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2027 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
2028 #define Dynarr_max(d) (Dynarr_verify (d)->max_ + 0)
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2029 /* Return the size in bytes of an element in a dynarr. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2030 #define Dynarr_elsize(d) (Dynarr_verify (d)->elsize_ + 0)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2031 /* 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
2032 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
2033 #define Dynarr_sizeof(d) (Dynarr_length (d) * Dynarr_elsize (d))
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2034
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2035 /* 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
2036 should not be directly used; use Dynarr_set_length() or
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2037 Dynarr_set_lengthr() instead. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2038 DECLARE_INLINE_HEADER (
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2039 void
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2040 Dynarr_set_length_1 (void *d, Elemcount len)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2041 )
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2042 {
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2043 Dynarr *dy = Dynarr_verify_mod (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2044 dynarr_checking_assert (len >= 0 && len <= Dynarr_max (dy));
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2045 /* 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
2046 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
2047 dy->len_ = len;
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2048 if (dy->len_ > dy->largest_)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2049 dy->largest_ = dy->len_;
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2050 (void) Dynarr_verify_mod (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2051 }
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2052
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2053 /* "Restricted set-length": Set the length of dynarr D to LEN,
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2054 which must be in the range [0, Dynarr_largest(d)]. */
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 DECLARE_INLINE_HEADER (
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2057 void
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2058 Dynarr_set_lengthr (void *d, Elemcount len)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2059 )
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2060 {
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2061 Dynarr *dy = Dynarr_verify_mod (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2062 dynarr_checking_assert (len >= 0 && len <= Dynarr_largest (dy));
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2063 Dynarr_set_length_1 (dy, len);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2064 }
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 /* "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
2067 length must be in the range [0, Dynarr_largest(d)]. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2068
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2069 #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
2070
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2071
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2072 MODULE_API void Dynarr_resize (void *d, Elemcount size);
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 DECLARE_INLINE_HEADER (
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2075 void
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2076 Dynarr_resize_to_fit (void *d, Elemcount size)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2077 )
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 Dynarr *dy = Dynarr_verify_mod (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2080 if (size > Dynarr_max (dy))
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2081 Dynarr_resize (dy, size);
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
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2084 #define Dynarr_resize_to_add(d, numels) \
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2085 Dynarr_resize_to_fit (d, Dynarr_length (d) + numels)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2086
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2087 /* 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
2088 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
2089
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2090 DECLARE_INLINE_HEADER (
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2091 void
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2092 Dynarr_increase_length (void *d, Elemcount len)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2093 )
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2094 {
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2095 Dynarr *dy = Dynarr_verify_mod (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2096 dynarr_checking_assert (len >= Dynarr_length (dy));
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2097 Dynarr_resize_to_fit (dy, len);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2098 Dynarr_set_length_1 (dy, len);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2099 }
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 /* 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
2102 necessary to fit. (NOTE: This will leave uninitialized memory. If you
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2103 aren't planning on immediately overwriting the memory, use
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2104 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
2105 otherwise be uninitialized.) */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2106
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2107 DECLARE_INLINE_HEADER (
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2108 void
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2109 Dynarr_set_length (void *d, Elemcount len)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2110 )
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2111 {
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2112 Dynarr *dy = Dynarr_verify_mod (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2113 Elemcount old_len = Dynarr_length (dy);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2114 if (old_len >= len)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2115 Dynarr_set_lengthr (dy, len);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2116 else
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2117 Dynarr_increase_length (d, len);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2118 }
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2119
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2120 #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
2121
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2122 /* Zero LEN contiguous elements starting at POS. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2123
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2124 DECLARE_INLINE_HEADER (
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2125 void
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2126 Dynarr_zero_many (void *d, Elemcount pos, Elemcount len)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2127 )
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2128 {
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2129 Dynarr *dy = Dynarr_verify_mod (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2130 memset ((Rawbyte *) dy->base + pos*Dynarr_elsize (dy), 0,
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2131 len*Dynarr_elsize (dy));
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 /* 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
2135 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
2136 length. */
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_increase_length_and_zero (void *d, 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 Elemcount old_len = Dynarr_length (dy);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2145 Dynarr_increase_length (dy, len);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2146 Dynarr_zero_many (dy, old_len, len - old_len);
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
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2149 /* 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
2150 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
2151 lengths. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2152
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2153 DECLARE_INLINE_HEADER (
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2154 void
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2155 Dynarr_set_length_and_zero (void *d, Elemcount len)
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 {
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2158 Dynarr *dy = Dynarr_verify_mod (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2159 Elemcount old_len = Dynarr_length (dy);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2160 if (old_len >= len)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2161 Dynarr_set_lengthr (dy, len);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2162 else
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2163 Dynarr_increase_length_and_zero (d, len);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2164 }
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2165
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2166 /* Reset the dynarr's length to 0. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2167 #define Dynarr_reset(d) Dynarr_set_lengthr (d, 0)
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2168
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2169 #ifdef MEMORY_USAGE_STATS
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2170 struct overhead_stats;
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2171 Bytecount Dynarr_memory_usage (void *d, struct overhead_stats *stats);
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2172 #endif
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2173
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2174 /************* Adding/deleting elements to/from a dynarr *************/
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2175
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2176 /* 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
2177 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
2178 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
2179
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2180 #ifdef NEW_GC
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2181 #define DYNARR_SET_LISP_IMP(d, pos) \
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2182 do { \
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2183 if ((d)->lisp_imp) \
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2184 set_lheader_implementation \
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2185 ((struct lrecord_header *)&(((d)->base)[pos]), (d)->lisp_imp); \
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2186 } while (0)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2187 #else
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2188 #define DYNARR_SET_LISP_IMP(d, pos) DO_NOTHING
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2189 #endif /* (not) NEW_GC */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2190
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2191 /* Add Element EL to the end of dynarr D. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2192
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2193 #define Dynarr_add(d, el) \
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2194 do { \
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2195 Elemcount _da_pos = Dynarr_length (d); \
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2196 (void) Dynarr_verify_mod (d); \
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2197 Dynarr_increment (d); \
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2198 ((d)->base)[_da_pos] = (el); \
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2199 DYNARR_SET_LISP_IMP (d, _da_pos); \
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2200 } while (0)
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2201
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2202 /* Set EL as the element at position POS in dynarr D.
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2203 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
2204 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
2205 result of expansion, other than the one at POS. */
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_set(d, pos, el) \
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2208 do { \
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2209 Elemcount _ds_pos = (pos); \
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2210 (void) Dynarr_verify_mod (d); \
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2211 if (Dynarr_length (d) < _ds_pos + 1) \
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2212 Dynarr_increase_length_and_zero (d, _ds_pos + 1); \
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2213 ((d)->base)[_ds_pos] = (el); \
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2214 DYNARR_SET_LISP_IMP (d, _ds_pos); \
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2215 } while (0)
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2216
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2217 /* 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
2218 NULL, reserve space but don't store anything. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2219
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2220 DECLARE_INLINE_HEADER (
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2221 void
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2222 Dynarr_add_many (void *d, const void *base, Elemcount len)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2223 )
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2224 {
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2225 /* 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
2226 called so often, it seemed useful to remove the unnecessary stuff
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2227 from that function and to make it inline */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2228 Dynarr *dy = Dynarr_verify_mod (d);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2229 Elemcount pos = Dynarr_length (dy);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2230 Dynarr_increase_length (dy, Dynarr_length (dy) + len);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2231 if (base)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2232 memcpy ((Rawbyte *) dy->base + pos*Dynarr_elsize (dy), base,
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2233 len*Dynarr_elsize (dy));
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2234 }
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2235
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2236 /* Insert LEN elements, currently pointed to by BASE, into dynarr D
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2237 starting at position POS. */
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 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
2240 Elemcount pos);
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2241
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2242 /* Prepend LEN elements, currently pointed to by BASE, to the beginning. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2243
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2244 #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
2245
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2246 /* 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
2247 chars. The final zero byte is not stored. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2248
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2249 #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
2250
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2251 /* 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
2252 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
2253 zero byte is appended. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2254
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2255 /* #### 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
2256 isn't declared yet. */
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_add_ext_lisp_string(d, s, codesys) \
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2259 do { \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2260 Lisp_Object dyna_ls_s = (s); \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2261 Lisp_Object dyna_ls_cs = (codesys); \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2262 Extbyte *dyna_ls_eb; \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2263 Bytecount dyna_ls_bc; \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2264 \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2265 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
2266 dyna_ls_bc, dyna_ls_cs); \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2267 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
2268 } while (0)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2269
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2270 /* Delete LEN elements starting at position POS. */
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 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
2273
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2274 /* 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
2275
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2276 #define Dynarr_pop(d) \
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 5021
diff changeset
2277 (dynarr_checking_assert (Dynarr_length (d) > 0), \
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2278 Dynarr_verify_mod (d)->len_--, \
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2279 Dynarr_at (d, Dynarr_length (d)))
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2280
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2281 /* Delete the item at POS */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2282
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2283 #define Dynarr_delete(d, pos) Dynarr_delete_many (d, pos, 1)
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2284
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2285 /* 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
2286 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
2287 #define Dynarr_delete_by_pointer(d, p) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2288 Dynarr_delete_many (d, (p) - ((d)->base), 1)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2289
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2290 /* Delete all elements that are numerically equal to EL. */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
2291
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2292 #define Dynarr_delete_object(d, el) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2293 do \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2294 { \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2295 REGISTER int i; \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2296 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
2297 { \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2298 if (el == Dynarr_at (d, i)) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2299 Dynarr_delete_many (d, i, 1); \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2300 } \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2301 } while (0)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2302
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2303 /************* Dynarr typedefs *************/
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2304
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2305 /* Dynarr typedefs -- basic types first */
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2306
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2307 typedef struct
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 Dynarr_declare (Ibyte);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2310 } Ibyte_dynarr;
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 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2313 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2314 Dynarr_declare (Extbyte);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2315 } Extbyte_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2316
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2317 typedef struct
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_declare (Ichar);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2320 } Ichar_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2321
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2322 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2323 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2324 Dynarr_declare (char);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2325 } char_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2326
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2327 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2328 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2329 Dynarr_declare (char *);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2330 } char_ptr_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2331
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2332 typedef unsigned char unsigned_char;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2333 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2334 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2335 Dynarr_declare (unsigned char);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2336 } unsigned_char_dynarr;
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 typedef unsigned long unsigned_long;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2339 typedef struct
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 Dynarr_declare (unsigned long);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2342 } unsigned_long_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2343
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
2344 typedef const Ascbyte *const_Ascbyte_ptr;
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
2345 typedef struct
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
2346 {
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
2347 Dynarr_declare (const Ascbyte *);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
2348 } const_Ascbyte_ptr_dynarr;
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
2349
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
2350 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
2351 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
2352
3092
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 (int);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2356 } int_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2357
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2358 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2359 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2360 Dynarr_declare (Charbpos);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2361 } Charbpos_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2362
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2363 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2364 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2365 Dynarr_declare (Bytebpos);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2366 } Bytebpos_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2367
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2368 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2369 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2370 Dynarr_declare (Charcount);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2371 } Charcount_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2372
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2373 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2374 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2375 Dynarr_declare (Bytecount);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2376 } Bytecount_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2377
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2378 /* Dynarr typedefs -- more complex types */
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2379
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2380 typedef struct
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 Dynarr_declare (struct face_cachel);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2383 } face_cachel_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2384
3293
168191f9515f [xemacs-hg @ 2006-03-20 21:20:19 by crestani]
crestani
parents: 3263
diff changeset
2385 #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
2386 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
2387 #define XFACE_CACHEL_DYNARR(x) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2388 XRECORD (x, face_cachel_dynarr, face_cachel_dynarr)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2389 #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
2390 #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
2391 #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
2392 #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
2393 #endif /* NEW_GC */
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2394
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2395 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2396 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2397 Dynarr_declare (struct glyph_cachel);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2398 } glyph_cachel_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2399
3293
168191f9515f [xemacs-hg @ 2006-03-20 21:20:19 by crestani]
crestani
parents: 3263
diff changeset
2400 #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
2401 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
2402 #define XGLYPH_CACHEL_DYNARR(x) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2403 XRECORD (x, glyph_cachel_dynarr, glyph_cachel_dynarr)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2404 #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
2405 #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
2406 #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
2407 #define CONCHECK_GLYPH_CACHEL_DYNARR(x) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2408 CONCHECK_RECORD (x, glyph_cachel_dynarr)
3293
168191f9515f [xemacs-hg @ 2006-03-20 21:20:19 by crestani]
crestani
parents: 3263
diff changeset
2409 #endif /* NEW_GC */
3092
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 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2412 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2413 Dynarr_declare (struct console_type_entry);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2414 } console_type_entry_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2415
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2416 /* 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
2417 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
2418 typedef struct
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2419 {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2420 Dynarr_declare (Lisp_Object);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2421 } Lisp_Object_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2422
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2423 typedef struct
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 Dynarr_declare (Lisp_Object *);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2426 } Lisp_Object_ptr_dynarr;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
2427
4967
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2428
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2429 /************* Stack-like malloc/free: Another allocator *************/
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2430
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2431 void *stack_like_malloc (Bytecount size);
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2432 void stack_like_free (void *val);
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2433
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2434
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2435 /************************************************************************/
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2436 /** Definitions of other basic Lisp objects **/
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2437 /************************************************************************/
0d4c9d0f6a8d rewrite dynarr code
Ben Wing <ben@xemacs.org>
parents: 4966
diff changeset
2438
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2439 /*------------------------------ unbound -------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2440
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2441 /* Qunbound is a special Lisp_Object (actually of type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2442 symbol-value-forward), that can never be visible to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2443 the Lisp caller and thus can be used in the C code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2444 to mean "no such value". */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2445
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2446 #define UNBOUNDP(val) EQ (val, Qunbound)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2447
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2448 /* 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
2449 #define RETURN_IF_NOT_UNBOUND(expr) do \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2450 { \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2451 Lisp_Object ret_nunb_val = (expr); \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2452 if (!UNBOUNDP (ret_nunb_val)) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2453 RETURN_SANS_WARNINGS ret_nunb_val; \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2454 } while (0)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2455
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2456 /*------------------------------- cons ---------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2457
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2458 /* 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
2459
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2460 struct Lisp_Cons
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2461 {
5120
d1247f3cc363 latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
2462 FROB_BLOCK_LISP_OBJECT_HEADER lheader;
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
2463 Lisp_Object car_, cdr_;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2464 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2465 typedef struct Lisp_Cons Lisp_Cons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2466
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2467 #if 0 /* FSFmacs */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2468 /* 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
2469 /* This is not really in use now */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2470
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2471 struct Lisp_Buffer_Cons
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2472 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2473 Lisp_Object car, cdr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2474 struct buffer *buffer;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2475 int charbpos;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2476 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2477 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2478
5120
d1247f3cc363 latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
2479 DECLARE_MODULE_API_LISP_OBJECT (cons, Lisp_Cons);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2480 #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
2481 #define wrap_cons(p) wrap_record (p, cons)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2482 #define CONSP(x) RECORDP (x, cons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2483 #define CHECK_CONS(x) CHECK_RECORD (x, cons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2484 #define CONCHECK_CONS(x) CONCHECK_RECORD (x, cons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2485
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
2486 #ifdef NEW_GC
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2487 #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
2488 #define MARK_CONS(c) MARK (&((c)->lheader))
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
2489 #else /* not NEW_GC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2490 #define CONS_MARKED_P(c) MARKED_RECORD_HEADER_P(&((c)->lheader))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2491 #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
2492 #endif /* not NEW_GC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2493
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
2494 extern MODULE_API Lisp_Object Qnil;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2495
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2496 #define NILP(x) EQ (x, Qnil)
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
2497 #define cons_car(a) ((a)->car_)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
2498 #define cons_cdr(a) ((a)->cdr_)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
2499 #define XCAR(a) (XCONS (a)->car_)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
2500 #define XCDR(a) (XCONS (a)->cdr_)
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2501 #define XCADR(a) (XCAR (XCDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2502 #define XCDDR(a) (XCDR (XCDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2503 #define XCADDR(a) (XCAR (XCDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2504 #define XCDDDR(a) (XCDR (XCDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2505 #define XCADDDR(a) (XCAR (XCDDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2506 #define XCDDDDR(a) (XCDR (XCDDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2507 #define XCADDDDR(a) (XCAR (XCDDDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2508 #define XCDDDDDR(a) (XCDR (XCDDDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2509 #define XCADDDDDR(a) (XCAR (XCDDDDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2510 #define XCDDDDDDR(a) (XCDR (XCDDDDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2511 #define X1ST(a) XCAR (a)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2512 #define X2ND(a) XCADR (a)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2513 #define X3RD(a) XCADDR (a)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2514 #define X4TH(a) XCADDDR (a)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2515 #define X5TH(a) XCADDDDR (a)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2516 #define X6TH(a) XCADDDDDR (a)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2517
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
2518 #define XSETCAR(a, b) (XCONS (a)->car_ = (b))
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
2519 #define XSETCDR(a, b) (XCONS (a)->cdr_ = (b))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2520 #define LISTP(x) (CONSP(x) || NILP(x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2521
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2522 #define CHECK_LIST(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2523 if (!LISTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2524 dead_wrong_type_argument (Qlistp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2525 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2526
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2527 #define CONCHECK_LIST(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2528 if (!LISTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2529 x = wrong_type_argument (Qlistp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2530 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2531
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2532 /*---------------------- list traversal macros -------------------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2533
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2534 /* 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
2535 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
2536
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2537 There are two kinds of macros, those requiring surrounding braces, and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2538 those not requiring this. Which type of macro will be indicated.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2539 The general format for using a brace-requiring macro is
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2540
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2541 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2542 LIST_LOOP_3 (elt, list, tail)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2543 execute_code_here;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2544 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2545
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2546 or
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 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2549 LIST_LOOP_3 (elt, list, tail)
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 execute_code_here;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2552 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2553 }
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 You can put variable declarations between the brace and beginning of
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2556 macro, but NOTHING ELSE.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2557
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2558 The brace-requiring macros typically declare themselves any arguments
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2559 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
2560 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
2561 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
2562 macros.)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2563 */
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 /* 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
2566 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
2567 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
2568 no circularities), and those that handle "external" lists, where the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2569 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
2570 the names: those with "EXTERNAL_" work with external lists, and those
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2571 without this prefix work with internal lists. The internal-list
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2572 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
2573 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
2574 malformed-list error or a circular-list error.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2575 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2576
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2577 /* 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
2578 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
2579 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
2580 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
2581 over. TAIL needs to be defined by the caller.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2582
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2583 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
2584 (tail), or destructively modify the list using XSETCAR (tail,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2585 ...). */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2586
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2587 #define LIST_LOOP(tail, list) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2588 for (tail = list; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2589 !NILP (tail); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2590 tail = XCDR (tail))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2591
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2592 /* The following macros are the "core" macros for list traversal.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2593
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2594 *** ALL OF THESE MACROS MUST BE DECLARED INSIDE BRACES -- SEE ABOVE. ***
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2595
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2596 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
2597 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
2598 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
2599 from LIST.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2600
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2601 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
2602 argument TAIL, another automatically-declared variable. At each iteration,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2603 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
2604
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2605 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
2606 LEN argument, again automatically declared, which counts the number of
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2607 iterations gone by. It is 0 during the first iteration.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2608
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2609 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
2610 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
2611 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
2612 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2613
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2614 #define LIST_LOOP_2(elt, list) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2615 LIST_LOOP_3(elt, list, unused_tail_##elt)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2616
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2617 #define LIST_LOOP_3(elt, list, tail) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2618 Lisp_Object elt, tail; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2619 for (tail = list; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2620 NILP (tail) ? \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2621 0 : (elt = XCAR (tail), 1); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2622 tail = XCDR (tail))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2623
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2624 /* The following macros are for traversing lisp lists.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2625 Signal an error if LIST is not properly acyclic and nil-terminated.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2626
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2627 Use tortoise/hare algorithm to check for cycles, but only if it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2628 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
2629 faster than the tortoise; it even gets a head start! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2630
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2631 /* Optimized and safe macros for looping over external lists. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2632 #define CIRCULAR_LIST_SUSPICION_LENGTH 1024
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2633
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2634 #define EXTERNAL_LIST_LOOP_1(list) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2635 Lisp_Object ELL1_elt, ELL1_hare, ELL1_tortoise; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2636 EMACS_INT ELL1_len; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2637 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
2638 ELL1_tortoise, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2639
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2640 #define EXTERNAL_LIST_LOOP_2(elt, list) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2641 Lisp_Object elt, hare_##elt, tortoise_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2642 EMACS_INT len_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2643 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len_##elt, hare_##elt, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2644 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2645
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2646
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2647 #define GC_EXTERNAL_LIST_LOOP_2(elt, list) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2648 do { \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2649 XGCDECL3 (elt); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2650 Lisp_Object elt, hare_##elt, tortoise_##elt; \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2651 EMACS_INT len_##elt; \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2652 XGCPRO3 (elt, elt, hare_##elt, tortoise_##elt); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2653 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
2654 tortoise_##elt, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2655 CIRCULAR_LIST_SUSPICION_LENGTH)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2656
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2657 #define END_GC_EXTERNAL_LIST_LOOP(elt) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2658 XUNGCPRO (elt); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2659 } \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2660 while (0)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2661
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2662 #define EXTERNAL_LIST_LOOP_3(elt, list, tail) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2663 Lisp_Object elt, tail, tortoise_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2664 EMACS_INT len_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2665 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len_##elt, tail, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2666 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2667
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2668 #define EXTERNAL_LIST_LOOP_4_NO_DECLARE(elt, list, tail, len) \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2669 Lisp_Object tortoise_##elt; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2670 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len, tail, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2671 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2672
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2673 #define EXTERNAL_LIST_LOOP_4(elt, list, tail, len) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2674 Lisp_Object elt, tail, tortoise_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2675 EMACS_INT len; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2676 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len, tail, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2677 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2678
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2679
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2680 #define PRIVATE_EXTERNAL_LIST_LOOP_6(elt, list, len, hare, \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2681 tortoise, suspicion_length) \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2682 for (tortoise = hare = list, len = 0; \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2683 \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2684 (CONSP (hare) ? ((elt = XCAR (hare)), 1) : \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2685 (NILP (hare) ? 0 : \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2686 (signal_malformed_list_error (list), 0))); \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2687 \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2688 hare = XCDR (hare), \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2689 (void) \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2690 ((++len > suspicion_length) \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2691 && \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2692 ((((len & 1) != 0) && (tortoise = XCDR (tortoise), 0)), \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2693 (EQ (hare, tortoise) && (signal_circular_list_error (list), 0)))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2694
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2695 /* GET_LIST_LENGTH and GET_EXTERNAL_LIST_LENGTH:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2696
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2697 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
2698 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
2699 be declared by the caller). Circularities are trapped in external lists
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2700 (and cause errors). Neither macro need be declared inside brackets. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2701
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2702 #define GET_LIST_LENGTH(list, len) do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2703 Lisp_Object GLL_tail; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2704 for (GLL_tail = list, len = 0; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2705 !NILP (GLL_tail); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2706 GLL_tail = XCDR (GLL_tail), ++len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2707 DO_NOTHING; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2708 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2709
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2710 #define GET_EXTERNAL_LIST_LENGTH(list, len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2711 do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2712 Lisp_Object GELL_elt, GELL_tail; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2713 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
2714 ; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2715 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2716
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2717 /* 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
2718 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
2719 will ABORT() if the list is not in valid format */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2720 #define LIST_LOOP_DELETING(consvar, nextconsvar, list) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2721 for (consvar = list; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2722 !NILP (consvar) ? (nextconsvar = XCDR (consvar), 1) :0; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2723 consvar = nextconsvar)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2724
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2725 /* LIST_LOOP_DELETE_IF and EXTERNAL_LIST_LOOP_DELETE_IF:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2726
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2727 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
2728 external list, according to which macro is used) satisfying
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2729 CONDITION, a C expression referring to variable ELT. ELT is
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2730 automatically declared. Circularities are trapped in external
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2731 lists (and cause errors). Neither macro need be declared inside
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2732 brackets. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2733
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2734 #define LIST_LOOP_DELETE_IF(elt, list, condition) do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2735 /* Do not use ##list when creating new variables because \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2736 that may not be just a variable name. */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2737 Lisp_Object prev_tail_##elt = Qnil; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2738 LIST_LOOP_3 (elt, list, tail_##elt) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2739 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2740 if (condition) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2741 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2742 if (NILP (prev_tail_##elt)) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2743 list = XCDR (tail_##elt); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2744 else \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2745 XCDR (prev_tail_##elt) = XCDR (tail_##elt); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2746 } \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2747 else \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2748 prev_tail_##elt = tail_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2749 } \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2750 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2751
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2752 #define EXTERNAL_LIST_LOOP_DELETE_IF(elt, list, condition) do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2753 Lisp_Object prev_tail_##elt = Qnil; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2754 EXTERNAL_LIST_LOOP_4 (elt, list, tail_##elt, len_##elt) \
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 (condition) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2757 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2758 if (NILP (prev_tail_##elt)) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2759 list = XCDR (tail_##elt); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2760 else \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2761 XCDR (prev_tail_##elt) = XCDR (tail_##elt); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2762 /* Keep tortoise from ever passing hare. */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2763 len_##elt = 0; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2764 } \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2765 else \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2766 prev_tail_##elt = tail_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2767 } \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2768 } while (0)
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
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2771 /* Macros for looping over internal alists.
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2772
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2773 *** 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
2774
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2775 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
2776 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
2777 declared.
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2778
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2779 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
2780 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
2781 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
2782 */
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2783
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2784 #define ALIST_LOOP_3(car, cdr, alist) \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2785 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
2786 for (_al3_tail_##car = alist; \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2787 NILP (_al3_tail_##car) ? \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2788 0 : (_al3_acons_##car = XCAR (_al3_tail_##car), \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2789 car = XCAR (_al3_acons_##car), \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2790 cdr = XCDR (_al3_acons_##car), 1); \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2791 _al3_tail_##car = XCDR (_al3_tail_##car))
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 #define ALIST_LOOP_4(acons, car, cdr, list) \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2794 Lisp_Object acons, car, cdr, _al4_tail_##car; \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2795 for (_al4_tail_##car = list; \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2796 NILP (_al4_tail_##car) ? \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2797 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
2798 cdr = XCDR (elt), 1); \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2799 _al4_tail_##car = XCDR (tail))
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2800
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2801 /* Macros for looping over external alists.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2802
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2803 *** ALL OF THESE MACROS MUST BE DECLARED INSIDE BRACES -- SEE ABOVE. ***
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2804
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2805 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
2806 assumes the elements are aconses (the elements in an alist) and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2807 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
2808 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
2809 ELT_CDR are automatically declared.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2810
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2811 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
2812 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
2813 declared.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2814
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2815 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
2816 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
2817 declared.
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_6_NO_DECLARE does not declare any of its arguments,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2820 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
2821 manually.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2822 */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2823
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2824 /* Optimized and safe macros for looping over external alists. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2825 #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
2826 Lisp_Object elt, elt_car, elt_cdr; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2827 Lisp_Object hare_##elt, tortoise_##elt; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2828 EMACS_INT len_##elt; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2829 PRIVATE_EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2830 len_##elt, hare_##elt, tortoise_##elt, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2831 CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2832
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2833 #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
2834 Lisp_Object elt, elt_car, elt_cdr, tail; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2835 Lisp_Object tortoise_##elt; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2836 EMACS_INT len_##elt; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2837 PRIVATE_EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2838 len_##elt, tail, tortoise_##elt, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2839 CIRCULAR_LIST_SUSPICION_LENGTH) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2840
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2841 #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
2842 Lisp_Object elt, elt_car, elt_cdr, tail; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2843 EMACS_INT len; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2844 Lisp_Object tortoise_##elt; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2845 PRIVATE_EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2846 len, tail, tortoise_##elt, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2847 CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2848
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2849 #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
2850 tail, len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2851 Lisp_Object tortoise_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2852 PRIVATE_EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2853 len, tail, tortoise_##elt, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2854 CIRCULAR_LIST_SUSPICION_LENGTH)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2855
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2856
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2857 #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
2858 hare, tortoise, suspicion_length) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2859 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len, hare, tortoise, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2860 suspicion_length) \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2861 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
2862 continue; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2863 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2864
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2865 /* Macros for looping over external property lists.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2866
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2867 *** ALL OF THESE MACROS MUST BE DECLARED INSIDE BRACES -- SEE ABOVE. ***
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2868
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2869 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
2870 be a property list, consisting of alternating pairs of keys
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2871 (typically symbols or keywords) and values. Each iteration
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2872 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
2873 KEY and VALUE respectively. Malformed lists and circularities are
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2874 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
2875 of elements also signal an error.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2876
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2877 EXTERNAL_PROPERTY_LIST_LOOP_4 adds a TAIL argument to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2878 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
2879 and again TAIL is automatically declared.
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 EXTERNAL_PROPERTY_LIST_LOOP_5 adds a LEN argument to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2882 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
2883 and again LEN is automatically declared. Note that in this case,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2884 LEN counts the iterations, NOT the total number of list elements
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2885 processed, which is 2 * LEN.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2886
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2887 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
2888 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
2889 must be declared manually. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2890
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2891 /* Optimized and safe macros for looping over external property lists. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2892 #define EXTERNAL_PROPERTY_LIST_LOOP_3(key, value, list) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2893 Lisp_Object key, value, hare_##key, tortoise_##key; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2894 EMACS_INT len_##key; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2895 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len_##key, hare_##key, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2896 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2897
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2898 #define EXTERNAL_PROPERTY_LIST_LOOP_4(key, value, list, tail) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2899 Lisp_Object key, value, tail, tortoise_##key; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2900 EMACS_INT len_##key; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2901 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len_##key, tail, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2902 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2903
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2904 #define EXTERNAL_PROPERTY_LIST_LOOP_5(key, value, list, tail, len) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2905 Lisp_Object key, value, tail, tortoise_##key; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2906 EMACS_INT len; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2907 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len, tail, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2908 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2909
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2910 #define EXTERNAL_PROPERTY_LIST_LOOP_5_NO_DECLARE(key, value, list, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2911 tail, len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2912 Lisp_Object tortoise_##key; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2913 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len, tail, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2914 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2915
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2916
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2917 #define EXTERNAL_PROPERTY_LIST_LOOP_7(key, value, list, len, hare, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2918 tortoise, suspicion_length) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2919 for (tortoise = hare = list, len = 0; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2920 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2921 ((CONSP (hare) && \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2922 (key = XCAR (hare), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2923 hare = XCDR (hare), \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2924 (CONSP (hare) ? 1 : \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2925 (signal_malformed_property_list_error (list), 0)))) ? \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2926 (value = XCAR (hare), 1) : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2927 (NILP (hare) ? 0 : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2928 (signal_malformed_property_list_error (list), 0))); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2929 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2930 hare = XCDR (hare), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2931 ((++len < suspicion_length) ? \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2932 ((void) 0) : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2933 (((len & 1) ? \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2934 ((void) (tortoise = XCDR (XCDR (tortoise)))) : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2935 ((void) 0)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2936 , \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2937 (EQ (hare, tortoise) ? \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2938 ((void) signal_circular_property_list_error (list)) : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2939 ((void) 0)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2940
2421
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2941 #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
2942 for (tail = plist; \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2943 NILP (tail) ? 0 : \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2944 (key = XCAR (tail), tail = XCDR (tail), \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2945 value = XCAR (tail), tail = XCDR (tail), 1); \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2946 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2947
2421
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2948 #define PROPERTY_LIST_LOOP_3(key, value, plist) \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2949 Lisp_Object key, value, tail_##key; \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2950 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
2951
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2952 #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
2953 do { \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2954 XGCDECL3 (key); \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2955 Lisp_Object key, value, tail_##key; \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2956 XGCPRO3 (key, key, value, tail_##key); \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2957 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
2958
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2959 #define END_GC_PROPERTY_LIST_LOOP(key) \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2960 XUNGCPRO (key); \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2961 } \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2962 while (0)
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2963
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2964 /* 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
2965 DECLARE_INLINE_HEADER (
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2966 int
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2967 TRUE_LIST_P (Lisp_Object object)
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2968 )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2969 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2970 Lisp_Object hare, tortoise;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2971 EMACS_INT len;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2972
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2973 for (hare = tortoise = object, len = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2974 CONSP (hare);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2975 hare = XCDR (hare), len++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2976 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2977 if (len < CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2978 continue;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2979
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2980 if (len & 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2981 tortoise = XCDR (tortoise);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2982 else if (EQ (hare, tortoise))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2983 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2984 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2985
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2986 return NILP (hare);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2987 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2988
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2989 /* Signal an error if LIST is not properly acyclic and nil-terminated. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2990 #define CHECK_TRUE_LIST(list) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2991 Lisp_Object CTL_list = (list); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2992 Lisp_Object CTL_hare, CTL_tortoise; \
436
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2993 EMACS_INT CTL_len; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2994 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2995 for (CTL_hare = CTL_tortoise = CTL_list, CTL_len = 0; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2996 CONSP (CTL_hare); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2997 CTL_hare = XCDR (CTL_hare), CTL_len++) \
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 if (CTL_len < CIRCULAR_LIST_SUSPICION_LENGTH) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3000 continue; \
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 if (CTL_len & 1) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3003 CTL_tortoise = XCDR (CTL_tortoise); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3004 else if (EQ (CTL_hare, CTL_tortoise)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3005 Fsignal (Qcircular_list, list1 (CTL_list)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3006 } \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3007 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3008 if (! NILP (CTL_hare)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3009 signal_malformed_list_error (CTL_list); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3010 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3011
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3012 /*------------------------------ string --------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3013
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3014 #ifdef NEW_GC
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3015 struct Lisp_String_Direct_Data
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3016 {
5127
a9c41067dd88 more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents: 5126
diff changeset
3017 NORMAL_LISP_OBJECT_HEADER header;
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3018 Bytecount size;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3019 Ibyte data[1];
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3020 };
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3021 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
3022
5120
d1247f3cc363 latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
3023 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
3024 #define XSTRING_DIRECT_DATA(x) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3025 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
3026 #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
3027 #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
3028 #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
3029 #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
3030
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3031 #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
3032 #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
3033
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 struct Lisp_String_Indirect_Data
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3036 {
5127
a9c41067dd88 more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents: 5126
diff changeset
3037 NORMAL_LISP_OBJECT_HEADER header;
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3038 Bytecount size;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3039 Ibyte *data;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3040 };
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3041 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
3042
5120
d1247f3cc363 latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
3043 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
3044 #define XSTRING_INDIRECT_DATA(x) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3045 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
3046 #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
3047 #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
3048 #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
3049 #define CONCHECK_STRING_INDIRECT_DATA(x) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3050 CONCHECK_RECORD (x, string_indirect_data)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3051
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3052 #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
3053 #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
3054
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3055
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3056 #define XSTRING_DATA_SIZE(s) ((s)->indirect)? \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3057 XSTRING_INDIRECT_DATA_SIZE ((s)->data_object): \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3058 XSTRING_DIRECT_DATA_SIZE ((s)->data_object)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3059 #define XSTRING_DATA_DATA(s) ((s)->indirect)? \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3060 XSTRING_INDIRECT_DATA_DATA ((s)->data_object): \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3061 XSTRING_DIRECT_DATA_DATA ((s)->data_object)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3062
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3063 #define XSET_STRING_DATA_SIZE(s, len) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3064 if ((s)->indirect) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3065 XSTRING_INDIRECT_DATA_SIZE ((s)->data_object) = len; \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3066 else \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3067 XSTRING_DIRECT_DATA_SIZE ((s)->data_object) = len
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3068 #define XSET_STRING_DATA_DATA(s, ptr) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3069 if ((s)->indirect) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3070 XSTRING_INDIRECT_DATA_DATA ((s)->data_object) = ptr; \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3071 else \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3072 XSTRING_DIRECT_DATA_DATA ((s)->data_object) = ptr
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3073 #endif /* NEW_GC */
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3074
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3075 struct Lisp_String
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3076 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3077 union
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3078 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3079 struct lrecord_header lheader;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3080 struct
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3081 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3082 /* WARNING: Everything before ascii_begin must agree exactly with
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3083 struct lrecord_header */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3084 unsigned int type :8;
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
3085 #ifdef NEW_GC
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3086 unsigned int lisp_readonly :1;
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3087 unsigned int free :1;
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3088 /* 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
3089 (byte_ascii_p) */
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3090 unsigned int ascii_begin :22;
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
3091 #else /* not NEW_GC */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3092 unsigned int mark :1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3093 unsigned int c_readonly :1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3094 unsigned int lisp_readonly :1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3095 /* 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
3096 (byte_ascii_p) */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3097 unsigned int ascii_begin :21;
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
3098 #endif /* not NEW_GC */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3099 } v;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3100 } u;
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3101 #ifdef NEW_GC
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3102 int indirect;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3103 Lisp_Object data_object;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3104 #else /* not NEW_GC */
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3105 Bytecount size_;
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3106 Ibyte *data_;
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3107 #endif /* not NEW_GC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3108 Lisp_Object plist;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3109 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3110 typedef struct Lisp_String Lisp_String;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3111
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
3112 #ifdef NEW_GC
3063
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3113 #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
3114 #else /* not NEW_GC */
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
3115 #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
3116 #endif /* not NEW_GC */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3117
5120
d1247f3cc363 latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
3118 DECLARE_MODULE_API_LISP_OBJECT (string, Lisp_String);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3119 #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
3120 #define wrap_string(p) wrap_record (p, string)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3121 #define STRINGP(x) RECORDP (x, string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3122 #define CHECK_STRING(x) CHECK_RECORD (x, string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3123 #define CONCHECK_STRING(x) CONCHECK_RECORD (x, string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3124
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3125 /* 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
3126 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
3127 stuff there. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3128
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3129 /* 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
3130 #ifdef NEW_GC
3304
73051095a712 [xemacs-hg @ 2006-03-26 14:33:37 by crestani]
crestani
parents: 3293
diff changeset
3131 #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
3132 #define set_lispstringp_indirect(s) ((s)->indirect = 1)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3133 #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
3134 #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
3135 #else /* not NEW_GC */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3136 #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
3137 #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
3138 #endif /* not NEW_GC */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3139
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3140 /* 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
3141 in any new code. */
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3142 #ifdef NEW_GC
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3143 #define STRING_DATA_OBJECT(s) ((s)->data_object)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3144 #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
3145 #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
3146 #else /* not NEW_GC */
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3147 #define XSTRING_LENGTH(s) (XSTRING (s)->size_)
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3148 #endif /* not NEW_GC */
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3149 #define XSTRING_PLIST(s) (XSTRING (s)->plist)
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3150 #ifdef NEW_GC
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
3151 #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
3152 #else /* not NEW_GC */
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3153 #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
3154 #endif /* not NEW_GC */
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3155 #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
3156 #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
3157 #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
3158 /* 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
3159 bump_string_modiff() afterwards. */
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3160 #define XSET_STRING_ASCII_BEGIN(s, val) \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3161 ((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
3162 #define XSTRING_FORMAT(s) FORMAT_DEFAULT
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3163
456
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3164 /* 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
3165 variable-length array field. (this is known as the "struct hack") */
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3166 /* Implementation: in practice, structtype and fieldtype usually have
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3167 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
3168 ALIGN_SIZE to be absolutely sure of getting the correct alignment.
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3169 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
3170 only a very stupid compiler would fail to correctly simplify. */
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3171 #define FLEXIBLE_ARRAY_STRUCT_SIZEOF(structtype, \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3172 fieldtype, \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3173 fieldname, \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3174 array_length) \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3175 (ALIGNOF (structtype) == ALIGNOF (fieldtype) \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3176 ? (offsetof (structtype, fieldname) + \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3177 (offsetof (structtype, fieldname[1]) - \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3178 offsetof (structtype, fieldname[0])) * \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3179 (array_length)) \
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3180 : (ALIGN_FOR_TYPE \
456
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3181 ((offsetof (structtype, fieldname) + \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3182 (offsetof (structtype, fieldname[1]) - \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3183 offsetof (structtype, fieldname[0])) * \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
3184 (array_length)), \
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3185 structtype)))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3186
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3187 /*------------------------------ vector --------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3188
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3189 struct Lisp_Vector
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3190 {
5127
a9c41067dd88 more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents: 5126
diff changeset
3191 NORMAL_LISP_OBJECT_HEADER header;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3192 long size;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3193 Lisp_Object contents[1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3194 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3195 typedef struct Lisp_Vector Lisp_Vector;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3196
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 5117 4744
diff changeset
3197 DECLARE_LISP_OBJECT (vector, Lisp_Vector);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3198 #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
3199 #define wrap_vector(p) wrap_record (p, vector)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3200 #define VECTORP(x) RECORDP (x, vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3201 #define CHECK_VECTOR(x) CHECK_RECORD (x, vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3202 #define CONCHECK_VECTOR(x) CONCHECK_RECORD (x, vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3203
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3204 #define vector_length(v) ((v)->size)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3205 #define XVECTOR_LENGTH(s) vector_length (XVECTOR (s))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3206 #define vector_data(v) ((v)->contents)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3207 #define XVECTOR_DATA(s) vector_data (XVECTOR (s))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3208
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3209 /*---------------------------- bit vectors -----------------------------*/
428
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 #if (LONGBITS < 16)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3212 #error What the hell?!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3213 #elif (LONGBITS < 32)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3214 # define LONGBITS_LOG2 4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3215 # define LONGBITS_POWER_OF_2 16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3216 #elif (LONGBITS < 64)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3217 # define LONGBITS_LOG2 5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3218 # define LONGBITS_POWER_OF_2 32
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3219 #elif (LONGBITS < 128)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3220 # define LONGBITS_LOG2 6
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3221 # define LONGBITS_POWER_OF_2 64
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3222 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3223 #error You really have 128-bit integers?!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3224 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3225
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3226 struct Lisp_Bit_Vector
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3227 {
5127
a9c41067dd88 more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents: 5126
diff changeset
3228 NORMAL_LISP_OBJECT_HEADER lheader;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3229 Elemcount size;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3230 unsigned long bits[1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3231 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3232 typedef struct Lisp_Bit_Vector Lisp_Bit_Vector;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3233
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 5117 4744
diff changeset
3234 DECLARE_LISP_OBJECT (bit_vector, Lisp_Bit_Vector);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3235 #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
3236 #define wrap_bit_vector(p) wrap_record (p, bit_vector)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3237 #define BIT_VECTORP(x) RECORDP (x, bit_vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3238 #define CHECK_BIT_VECTOR(x) CHECK_RECORD (x, bit_vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3239 #define CONCHECK_BIT_VECTOR(x) CONCHECK_RECORD (x, bit_vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3240
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3241 #define BITP(x) (INTP (x) && (XINT (x) == 0 || XINT (x) == 1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3242
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3243 #define CHECK_BIT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3244 if (!BITP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3245 dead_wrong_type_argument (Qbitp, x);\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3246 } while (0)
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 #define CONCHECK_BIT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3249 if (!BITP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3250 x = wrong_type_argument (Qbitp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3251 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3252
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3253 #define bit_vector_length(v) ((v)->size)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3254
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3255 DECLARE_INLINE_HEADER (
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3256 int
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3257 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
3258 )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3259 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3260 return ((v->bits[n >> LONGBITS_LOG2] >> (n & (LONGBITS_POWER_OF_2 - 1)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3261 & 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3262 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3263
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3264 DECLARE_INLINE_HEADER (
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3265 void
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3266 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
3267 )
428
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 if (value)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3270 v->bits[n >> LONGBITS_LOG2] |= (1UL << (n & (LONGBITS_POWER_OF_2 - 1)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3271 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3272 v->bits[n >> LONGBITS_LOG2] &= ~(1UL << (n & (LONGBITS_POWER_OF_2 - 1)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3273 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3274
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3275 /* Number of longs required to hold LEN bits */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3276 #define BIT_VECTOR_LONG_STORAGE(len) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3277 (((len) + LONGBITS_POWER_OF_2 - 1) >> LONGBITS_LOG2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3278
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3498
diff changeset
3279 /* 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
3280 know it's of a fixed size. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3498
diff changeset
3281 #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
3282 NORMAL_LISP_OBJECT_HEADER lheader; \
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3498
diff changeset
3283 Elemcount size; \
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3498
diff changeset
3284 unsigned long bits[BIT_VECTOR_LONG_STORAGE(numbits)]; \
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3498
diff changeset
3285 }
4995
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3286 /*---------------------- array, sequence -----------------------------*/
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3287
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3288 #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
3289
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3290 #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
3291 if (!ARRAYP (x)) \
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3292 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
3293 } while (0)
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3294
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3295 #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
3296 if (!ARRAYP (x)) \
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3297 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
3298 } while (0)
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3299
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3300 #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
3301
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3302 #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
3303 if (!SEQUENCEP (x)) \
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3304 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
3305 } while (0)
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3306
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3307 #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
3308 if (!SEQUENCEP (x)) \
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4888
diff changeset
3309 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
3310 } while (0)
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3311
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3312 /*------------------------------ symbol --------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3313
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3314 typedef struct Lisp_Symbol Lisp_Symbol;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3315 struct Lisp_Symbol
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3316 {
5124
623d57b7fbe8 separate regular and disksave finalization, print method fixes.
Ben Wing <ben@xemacs.org>
parents: 5120
diff changeset
3317 FROB_BLOCK_LISP_OBJECT_HEADER lheader;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3318 /* next symbol in this obarray bucket */
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3319 Lisp_Symbol *next;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3320 Lisp_Object name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3321 Lisp_Object value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3322 Lisp_Object function;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3323 Lisp_Object plist;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3324 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3325
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3326 #define SYMBOL_IS_KEYWORD(sym) \
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3327 ((string_byte (symbol_name (XSYMBOL (sym)), 0) == ':') \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3328 && EQ (sym, oblookup (Vobarray, \
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3329 XSTRING_DATA (symbol_name (XSYMBOL (sym))), \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3330 XSTRING_LENGTH (symbol_name (XSYMBOL (sym))))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3331 #define KEYWORDP(obj) (SYMBOLP (obj) && SYMBOL_IS_KEYWORD (obj))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3332
5120
d1247f3cc363 latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
3333 DECLARE_MODULE_API_LISP_OBJECT (symbol, Lisp_Symbol);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3334 #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
3335 #define wrap_symbol(p) wrap_record (p, symbol)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3336 #define SYMBOLP(x) RECORDP (x, symbol)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3337 #define CHECK_SYMBOL(x) CHECK_RECORD (x, symbol)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3338 #define CONCHECK_SYMBOL(x) CONCHECK_RECORD (x, symbol)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3339
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3340 #define symbol_next(s) ((s)->next)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3341 #define symbol_name(s) ((s)->name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3342 #define symbol_value(s) ((s)->value)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3343 #define symbol_function(s) ((s)->function)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3344 #define symbol_plist(s) ((s)->plist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3345
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3346 #define XSYMBOL_NEXT(s) (XSYMBOL (s)->next)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3347 #define XSYMBOL_NAME(s) (XSYMBOL (s)->name)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3348 #define XSYMBOL_VALUE(s) (XSYMBOL (s)->value)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3349 #define XSYMBOL_FUNCTION(s) (XSYMBOL (s)->function)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3350 #define XSYMBOL_PLIST(s) (XSYMBOL (s)->plist)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3351
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
3352
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3353 /*------------------------------- subr ---------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3354
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3355 /* 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
3356 We could define such types for n arguments, if needed. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3357 typedef Lisp_Object (*lisp_fn_t) (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3358
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3359 struct Lisp_Subr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3360 {
5120
d1247f3cc363 latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
3361 FROB_BLOCK_LISP_OBJECT_HEADER lheader;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3362 short min_args;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3363 short max_args;
3379
b544987e2eca [xemacs-hg @ 2006-05-06 08:09:35 by aidan]
aidan
parents: 3319
diff changeset
3364 /* #### 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
3365 char *. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3366 const char *prompt;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3367 const char *doc;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3368 const char *name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3369 lisp_fn_t subr_fn;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3370 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3371 typedef struct Lisp_Subr Lisp_Subr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3372
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 5117 4744
diff changeset
3373 DECLARE_LISP_OBJECT (subr, Lisp_Subr);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3374 #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
3375 #define wrap_subr(p) wrap_record (p, subr)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3376 #define SUBRP(x) RECORDP (x, subr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3377 #define CHECK_SUBR(x) CHECK_RECORD (x, subr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3378 #define CONCHECK_SUBR(x) CONCHECK_RECORD (x, subr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3379
436
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
3380 #define subr_function(subr) ((subr)->subr_fn)
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
3381 #define SUBR_FUNCTION(subr,max_args) \
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
3382 ((Lisp_Object (*) (EXFUN_##max_args)) (subr)->subr_fn)
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
3383 #define subr_name(subr) ((subr)->name)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3384
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3385 /*------------------------------ marker --------------------------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3386
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3387
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3388 typedef struct Lisp_Marker Lisp_Marker;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3389 struct Lisp_Marker
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3390 {
5120
d1247f3cc363 latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
3391 FROB_BLOCK_LISP_OBJECT_HEADER lheader;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3392 Lisp_Marker *next;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3393 Lisp_Marker *prev;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3394 struct buffer *buffer;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3395 Membpos membpos;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3396 char insertion_type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3397 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3398
5120
d1247f3cc363 latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
3399 DECLARE_MODULE_API_LISP_OBJECT (marker, Lisp_Marker);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3400 #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
3401 #define wrap_marker(p) wrap_record (p, marker)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3402 #define MARKERP(x) RECORDP (x, marker)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3403 #define CHECK_MARKER(x) CHECK_RECORD (x, marker)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3404 #define CONCHECK_MARKER(x) CONCHECK_RECORD (x, marker)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3405
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3406 /* 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
3407 /* assert (!INTP (XMARKER (x)->lheader.next.v)); */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3408
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3409 #define marker_next(m) ((m)->next)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3410 #define marker_prev(m) ((m)->prev)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3411
3063
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3412 /*-------------------basic int (no connection to char)------------------*/
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3413
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3414 #define ZEROP(x) EQ (x, Qzero)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3415
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
3416 #ifdef ERROR_CHECK_TYPES
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3417
3063
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3418 #define XINT(x) XINT_1 (x, __FILE__, __LINE__)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3419
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3420 DECLARE_INLINE_HEADER (
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3421 EMACS_INT
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3422 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
3423 )
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3424 {
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3425 assert_at_line (INTP (obj), file, line);
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3426 return XREALINT (obj);
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3427 }
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3428
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
3429 #else /* not ERROR_CHECK_TYPES */
3063
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3430
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3431 #define XINT(obj) XREALINT (obj)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3432
5038
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
3433 #endif /* (not) ERROR_CHECK_TYPES */
3063
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3434
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3435 #define CHECK_INT(x) do { \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3436 if (!INTP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3437 dead_wrong_type_argument (Qintegerp, x); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3438 } while (0)
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 #define CONCHECK_INT(x) do { \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3441 if (!INTP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3442 x = wrong_type_argument (Qintegerp, x); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3443 } while (0)
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 /* NOTE NOTE NOTE! This definition of "natural number" is mathematically
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
3446 wrong. Mathematically, a natural number is a positive integer; 0
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
3447 isn't included. This would be better called NONNEGINT(). */
9410323e4b0d major dynarr fixes
Ben Wing <ben@xemacs.org>
parents: 5023
diff changeset
3448
3063
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3449 #define NATNUMP(x) (INTP (x) && XINT (x) >= 0)
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_NATNUM(x) do { \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3452 if (!NATNUMP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3453 dead_wrong_type_argument (Qnatnump, 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_NATNUM(x) do { \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3457 if (!NATNUMP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3458 x = wrong_type_argument (Qnatnump, 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
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3461 /*------------------------------- char ---------------------------------*/
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3462
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3463 /* 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
3464 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
3465 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
3466 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
3467 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
3468 */
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3469
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3470 #ifdef MULE
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 MODULE_API int non_ascii_valid_ichar_p (Ichar ch);
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3473
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3474 /* Return whether the given Ichar is valid.
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3475 */
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3476
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3477 DECLARE_INLINE_HEADER (
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3478 int
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3479 valid_ichar_p (Ichar ch)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3480 )
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3481 {
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3482 return (! (ch & ~0xFF)) || non_ascii_valid_ichar_p (ch);
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3483 }
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3484
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3485 #else /* not MULE */
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3486
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3487 /* This works when CH is negative, and correctly returns non-zero only when CH
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3488 is in the range [0, 255], inclusive. */
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3489 #define valid_ichar_p(ch) (! (ch & ~0xFF))
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3490
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3491 #endif /* not MULE */
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3492
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3493 #ifdef ERROR_CHECK_TYPES
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 DECLARE_INLINE_HEADER (
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3496 int
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3497 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
3498 )
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 if (XTYPE (obj) != Lisp_Type_Char)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3501 return 0;
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3502 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
3503 return 1;
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3504 }
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 #define CHARP(x) CHARP_1 (x, __FILE__, __LINE__)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3507
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3508 DECLARE_INLINE_HEADER (
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3509 Ichar
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3510 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
3511 )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3512 {
3063
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3513 Ichar ch;
788
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
3514 assert_at_line (CHARP (obj), file, line);
3063
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3515 ch = XCHARVAL (obj);
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3516 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
3517 return ch;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3518 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3519
788
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
3520 #define XCHAR(x) XCHAR_1 (x, __FILE__, __LINE__)
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
3521
3063
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3522 #else /* not ERROR_CHECK_TYPES */
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3523
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3524 #define CHARP(x) (XTYPE (x) == Lisp_Type_Char)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3525 #define XCHAR(x) ((Ichar) XCHARVAL (x))
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3526
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3527 #endif /* (else) not ERROR_CHECK_TYPES */
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3528
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3529 #define CONCHECK_CHAR(x) do { \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3530 if (!CHARP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3531 x = wrong_type_argument (Qcharacterp, x); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3532 } while (0)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3533
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3534 #define CHECK_CHAR(x) do { \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3535 if (!CHARP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3536 dead_wrong_type_argument (Qcharacterp, x); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3537 } while (0)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3538
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 DECLARE_INLINE_HEADER (
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3541 Lisp_Object
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3542 make_char (Ichar val)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3543 )
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 type_checking_assert (valid_ichar_p (val));
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3546 /* 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
3547 return make_char_1 (val);
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3548 }
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 /*------------------------- int-char connection ------------------------*/
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3551
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3552 #ifdef ERROR_CHECK_TYPES
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3553
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3554 #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
3555
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3556 DECLARE_INLINE_HEADER (
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3557 EMACS_INT
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3558 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
3559 )
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 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
3562 return CHARP (obj) ? XCHAR (obj) : XINT (obj);
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3563 }
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3564
788
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
3565 #else /* no error checking */
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
3566
4134
ac5a714be3a2 [xemacs-hg @ 2007-08-21 20:32:33 by aidan]
aidan
parents: 4123
diff changeset
3567 /* 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
3568 of a macro. */
ac5a714be3a2 [xemacs-hg @ 2007-08-21 20:32:33 by aidan]
aidan
parents: 4123
diff changeset
3569 DECLARE_INLINE_HEADER (
ac5a714be3a2 [xemacs-hg @ 2007-08-21 20:32:33 by aidan]
aidan
parents: 4123
diff changeset
3570 EMACS_INT
ac5a714be3a2 [xemacs-hg @ 2007-08-21 20:32:33 by aidan]
aidan
parents: 4123
diff changeset
3571 XCHAR_OR_INT (Lisp_Object obj)
ac5a714be3a2 [xemacs-hg @ 2007-08-21 20:32:33 by aidan]
aidan
parents: 4123
diff changeset
3572 )
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 return CHARP (obj) ? XCHAR (obj) : XINT (obj);
ac5a714be3a2 [xemacs-hg @ 2007-08-21 20:32:33 by aidan]
aidan
parents: 4123
diff changeset
3575 }
788
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
3576
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
3577 #endif /* no error checking */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3578
3063
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3579 /* 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
3580 character. */
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3581
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3582 #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
3583
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3584 /* 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
3585 character. */
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3586 #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
3587
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3588 DECLARE_INLINE_HEADER (
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3589 Ichar
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3590 XCHAR_OR_CHAR_INT (Lisp_Object obj)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3591 )
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 return CHARP (obj) ? XCHAR (obj) : XINT (obj);
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3594 }
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 /* 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
3597 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
3598 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
3599 */
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 #define CHECK_CHAR_COERCE_INT(x) do { \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3602 if (CHARP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3603 ; \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3604 else if (CHAR_INTP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3605 x = make_char (XINT (x)); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3606 else \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3607 x = wrong_type_argument (Qcharacterp, x); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3608 } while (0)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3609
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3610 /* 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
3611 #define CHECK_INT_COERCE_CHAR(x) do { \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3612 if (INTP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3613 ; \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3614 else if (CHARP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3615 x = make_int (XCHAR (x)); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3616 else \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3617 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
3618 } while (0)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3619
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3620 #define CHECK_INT_COERCE_MARKER(x) do { \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3621 if (INTP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3622 ; \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3623 else if (MARKERP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3624 x = make_int (marker_position (x)); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3625 else \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3626 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
3627 } while (0)
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3628
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3629 #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
3630 if (INTP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3631 ; \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3632 else if (CHARP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3633 x = make_int (XCHAR (x)); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3634 else if (MARKERP (x)) \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3635 x = make_int (marker_position (x)); \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3636 else \
d30cd499e445 [xemacs-hg @ 2005-11-13 10:48:01 by ben]
ben
parents: 3017
diff changeset
3637 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
3638 } while (0)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3639
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3640 /*------------------------------ float ---------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3641
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3642 /* Note: the 'unused_next_' field exists only to ensure that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3643 `next' pointer fits within the structure, for the purposes of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3644 free list. This makes a difference in the unlikely case of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3645 sizeof(double) being smaller than sizeof(void *). */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3646
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3647 struct Lisp_Float
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3648 {
5120
d1247f3cc363 latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
3649 FROB_BLOCK_LISP_OBJECT_HEADER lheader;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3650 union { double d; struct Lisp_Float *unused_next_; } data;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3651 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3652 typedef struct Lisp_Float Lisp_Float;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3653
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 5117 4744
diff changeset
3654 DECLARE_LISP_OBJECT (float, Lisp_Float);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3655 #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
3656 #define wrap_float(p) wrap_record (p, float)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3657 #define FLOATP(x) RECORDP (x, float)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3658 #define CHECK_FLOAT(x) CHECK_RECORD (x, float)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3659 #define CONCHECK_FLOAT(x) CONCHECK_RECORD (x, float)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3660
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3661 #define float_data(f) ((f)->data.d)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3662 #define XFLOAT_DATA(x) float_data (XFLOAT (x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3663
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3664 #define XFLOATINT(n) extract_float (n)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3665
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3666 #define CHECK_INT_OR_FLOAT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3667 if (!INT_OR_FLOATP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3668 dead_wrong_type_argument (Qnumberp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3669 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3670
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3671 #define CONCHECK_INT_OR_FLOAT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3672 if (!INT_OR_FLOATP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3673 x = wrong_type_argument (Qnumberp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3674 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3675
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3676 # define INT_OR_FLOATP(x) (INTP (x) || FLOATP (x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3677
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3678 /*--------------------------- readonly objects -------------------------*/
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3679
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
3680 #ifndef NEW_GC
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3681 #define CHECK_C_WRITEABLE(obj) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3682 do { if (c_readonly (obj)) c_write_error (obj); } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3683
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3684 #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
3685 #endif /* not NEW_GC */
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3686
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3687 #define CHECK_LISP_WRITEABLE(obj) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3688 do { if (lisp_readonly (obj)) lisp_write_error (obj); } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3689
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3690 #define LISP_READONLY(obj) (LISP_READONLY_RECORD_HEADER_P(XRECORD_LHEADER (obj)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3691
980
2ec85ed291da [xemacs-hg @ 2002-08-30 08:05:30 by youngs]
youngs
parents: 970
diff changeset
3692 /*----------------------------- structures ----------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3693
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3694 typedef struct structure_keyword_entry structure_keyword_entry;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3695 struct structure_keyword_entry
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3696 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3697 Lisp_Object keyword;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3698 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
3699 Error_Behavior errb);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3700 };
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 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3703 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3704 Dynarr_declare (structure_keyword_entry);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3705 } structure_keyword_entry_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3706
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3707 typedef struct structure_type structure_type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3708 struct structure_type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3709 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3710 Lisp_Object type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3711 structure_keyword_entry_dynarr *keywords;
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
3712 int (*validate) (Lisp_Object data, Error_Behavior errb);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3713 Lisp_Object (*instantiate) (Lisp_Object data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3714 };
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 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3717 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3718 Dynarr_declare (structure_type);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3719 } structure_type_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3720
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3721 struct structure_type *define_structure_type (Lisp_Object type,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3722 int (*validate)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3723 (Lisp_Object data,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
3724 Error_Behavior errb),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3725 Lisp_Object (*instantiate)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3726 (Lisp_Object data));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3727 void define_structure_type_keyword (struct structure_type *st,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3728 Lisp_Object keyword,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3729 int (*validate) (Lisp_Object keyword,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3730 Lisp_Object value,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
3731 Error_Behavior errb));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3732
858
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3733 /*---------------------------- weak boxes ------------------------------*/
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3734
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3735 struct weak_box
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3736 {
5127
a9c41067dd88 more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents: 5126
diff changeset
3737 NORMAL_LISP_OBJECT_HEADER header;
858
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3738 Lisp_Object value;
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3739
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3740 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
3741 };
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 void prune_weak_boxes (void);
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3744 Lisp_Object make_weak_box (Lisp_Object value);
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3745 Lisp_Object weak_box_ref (Lisp_Object value);
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3746
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 5117 4744
diff changeset
3747 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
3748 #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
3749 #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
3750 #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
3751 #define WEAK_BOXP(x) RECORDP (x, weak_box)
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3752 #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
3753 #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
3754
888
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3755 /*--------------------------- ephemerons ----------------------------*/
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3756
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3757 struct ephemeron
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3758 {
5127
a9c41067dd88 more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents: 5126
diff changeset
3759 NORMAL_LISP_OBJECT_HEADER header;
888
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3760
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3761 Lisp_Object key;
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3762
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3763 /* 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
3764 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
3765 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
3766
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3767 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
3768 from Vall_ephemerons and chain it into
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3769 Vall_ephemerons_to_finalize. */
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3770
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3771 Lisp_Object cons_chain;
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3772
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3773 Lisp_Object value;
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3774 };
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 void prune_ephemerons (void);
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3777 Lisp_Object ephemeron_value(Lisp_Object ephi);
1590
03009473262a [xemacs-hg @ 2003-07-26 14:00:27 by michaels]
michaels
parents: 1467
diff changeset
3778 void init_marking_ephemerons(void);
03009473262a [xemacs-hg @ 2003-07-26 14:00:27 by michaels]
michaels
parents: 1467
diff changeset
3779 int continue_marking_ephemerons(void);
888
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3780 int finish_marking_ephemerons(void);
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3781 Lisp_Object zap_finalize_list(void);
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3782 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
3783
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 5117 4744
diff changeset
3784 DECLARE_LISP_OBJECT(ephemeron, struct ephemeron);
888
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3785 #define XEPHEMERON(x) XRECORD (x, ephemeron, struct ephemeron)
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3786 #define XEPHEMERON_REF(x) (XEPHEMERON (x)->value)
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3787 #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
3788 #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
3789 #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
3790 #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
3791 #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
3792 #define wrap_ephemeron(p) wrap_record (p, ephemeron)
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3793 #define EPHEMERONP(x) RECORDP (x, ephemeron)
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3794 #define CHECK_EPHEMERON(x) CHECK_RECORD (x, ephemeron)
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3795 #define CONCHECK_EPHEMERON(x) CONCHECK_RECORD (x, ephemeron)
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3796
858
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
3797
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3798 /*---------------------------- weak lists ------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3799
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3800 enum weak_list_type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3801 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3802 /* element disappears if it's unmarked. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3803 WEAK_LIST_SIMPLE,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3804 /* element disappears if it's a cons and either its car or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3805 cdr is unmarked. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3806 WEAK_LIST_ASSOC,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3807 /* element disappears if it's a cons and its car is unmarked. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3808 WEAK_LIST_KEY_ASSOC,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3809 /* 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
3810 WEAK_LIST_VALUE_ASSOC,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3811 /* 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
3812 its cdr is marked. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3813 WEAK_LIST_FULL_ASSOC
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3814 };
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 struct weak_list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3817 {
5127
a9c41067dd88 more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents: 5126
diff changeset
3818 NORMAL_LISP_OBJECT_HEADER header;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3819 Lisp_Object list; /* don't mark through this! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3820 enum weak_list_type type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3821 Lisp_Object next_weak; /* don't mark through this! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3822 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3823
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 5117 4744
diff changeset
3824 DECLARE_LISP_OBJECT (weak_list, struct weak_list);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3825 #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
3826 #define wrap_weak_list(p) wrap_record (p, weak_list)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3827 #define WEAK_LISTP(x) RECORDP (x, weak_list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3828 #define CHECK_WEAK_LIST(x) CHECK_RECORD (x, weak_list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3829 #define CONCHECK_WEAK_LIST(x) CONCHECK_RECORD (x, weak_list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3830
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3831 #define weak_list_list(w) ((w)->list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3832 #define XWEAK_LIST_LIST(w) (XWEAK_LIST (w)->list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3833
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3834 Lisp_Object make_weak_list (enum weak_list_type type);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3835 /* The following two are only called by the garbage collector */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3836 int finish_marking_weak_lists (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3837 void prune_weak_lists (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3838
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
3839 END_C_DECLS
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3840
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3841 /************************************************************************/
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3842 /* Definitions related to the format of text and of characters */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3843 /************************************************************************/
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3844
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3845 /* Note:
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3846
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3847 "internally formatted text" and the term "internal format" in
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3848 general are likely to refer to the format of text in buffers and
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3849 strings; "externally formatted text" and the term "external format"
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3850 refer to any text format used in the O.S. or elsewhere outside of
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3851 XEmacs. The format of text and of a character are related and
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3852 there must be a one-to-one relationship (hopefully through a
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3853 relatively simple algorithmic means of conversion) between a string
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3854 of text and an equivalent array of characters, but the conversion
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3855 between the two is NOT necessarily trivial.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3856
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3857 In a non-Mule XEmacs, allowed characters are numbered 0 through
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3858 255, where no fixed meaning is assigned to them, but (when
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3859 representing text, rather than bytes in a binary file) in practice
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3860 the lower half represents ASCII and the upper half some other 8-bit
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3861 character set (chosen by setting the font, case tables, syntax
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3862 tables, etc. appropriately for the character set through ad-hoc
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3863 means such as the `iso-8859-1' file and the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3864 `standard-display-european' function).
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3865
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3866 #### Finish this.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3867
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3868 */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3869 #include "text.h"
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3870
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3871
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3872 /************************************************************************/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3873 /* Definitions of primitive Lisp functions and variables */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3874 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3875
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3876
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3877 /* DEFUN - Define a built-in Lisp-visible C function or `subr'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3878 `lname' should be the name to give the function in Lisp,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3879 as a null-terminated C string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3880 `Fname' should be the C equivalent of `lname', using only characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3881 valid in a C identifier, with an "F" prepended.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3882 The name of the C constant structure that records information
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3883 on this function for internal use is "S" concatenated with Fname.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3884 `min_args' should be a number, the minimum number of arguments allowed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3885 `max_args' should be a number, the maximum number of arguments allowed,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3886 or else MANY or UNEVALLED.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3887 MANY means pass a vector of evaluated arguments,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3888 in the form of an integer number-of-arguments
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3889 followed by the address of a vector of Lisp_Objects
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3890 which contains the argument values.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3891 UNEVALLED means pass the list of unevaluated arguments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3892 `prompt' says how to read arguments for an interactive call.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3893 See the doc string for `interactive'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3894 A null string means call interactively with no arguments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3895 `arglist' are the comma-separated arguments (always Lisp_Objects) for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3896 the function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3897 The docstring for the function is placed as a "C" comment between
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3898 the prompt and the `args' argument. make-docfile reads the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3899 comment and creates the DOC file from it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3900 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3901
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3902 #define EXFUN_0 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3903 #define EXFUN_1 Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3904 #define EXFUN_2 Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3905 #define EXFUN_3 Lisp_Object,Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3906 #define EXFUN_4 Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3907 #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
3908 #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
3909 Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3910 #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
3911 Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3912 #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
3913 Lisp_Object,Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3914 #define EXFUN_MANY int, Lisp_Object*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3915 #define EXFUN_UNEVALLED Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3916 #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
3917 #define EXFUN_NORETURN(sym, max_args) \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3918 DECLARE_DOESNT_RETURN_TYPE (Lisp_Object, sym (EXFUN_##max_args))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3919
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3920 #define SUBR_MAX_ARGS 8
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3921 #define MANY -2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3922 #define UNEVALLED -1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3923
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3924 /* Can't be const, because then subr->doc is read-only and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3925 Snarf_documentation chokes */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3926
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
3927 #ifdef NEW_GC
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3928 #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
3929 Lisp_Object Fname (EXFUN_##max_args); \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3930 static struct Lisp_Subr MC_ALLOC_S##Fname = \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3931 { \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3932 { /* struct lrecord_header */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3933 lrecord_type_subr, /* lrecord_type_index */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3934 1, /* lisp_readonly bit */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3935 0, /* free */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3936 0 /* uid */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3937 }, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3938 min_args, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3939 max_args, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3940 prompt, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3941 0, /* doc string */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3942 lname, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3943 (lisp_fn_t) Fname \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3944 }; \
2814
520c08f04735 [xemacs-hg @ 2005-06-16 19:59:33 by crestani]
crestani
parents: 2720
diff changeset
3945 static struct Lisp_Subr *S##Fname; \
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3946 Lisp_Object Fname (DEFUN_##max_args arglist)
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3947
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3948 #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
3949 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
3950 static struct Lisp_Subr MC_ALLOC_S##Fname = \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3951 { \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3952 { /* struct lrecord_header */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3953 lrecord_type_subr, /* lrecord_type_index */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3954 1, /* lisp_readonly bit */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3955 0, /* free */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3956 0 /* uid */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3957 }, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3958 min_args, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3959 max_args, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3960 prompt, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3961 0, /* doc string */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3962 lname, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3963 (lisp_fn_t) Fname \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3964 }; \
2814
520c08f04735 [xemacs-hg @ 2005-06-16 19:59:33 by crestani]
crestani
parents: 2720
diff changeset
3965 static struct Lisp_Subr *S##Fname; \
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3966 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
3967 #define GET_DEFUN_LISP_OBJECT(Fname) \
172fb92bd156 [xemacs-hg @ 2005-06-28 11:32:13 by crestani]
crestani
parents: 2828
diff changeset
3968 wrap_subr (S##Fname);
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
3969 #else /* not NEW_GC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3970 #define DEFUN(lname, Fname, min_args, max_args, prompt, arglist) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3971 Lisp_Object Fname (EXFUN_##max_args); \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3972 static struct Lisp_Subr S##Fname = \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3973 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3974 { /* struct lrecord_header */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3975 lrecord_type_subr, /* lrecord_type_index */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3976 1, /* mark bit */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3977 1, /* c_readonly bit */ \
1111
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 1104
diff changeset
3978 1, /* lisp_readonly bit */ \
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 1104
diff changeset
3979 0 /* unused */ \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3980 }, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3981 min_args, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3982 max_args, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3983 prompt, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3984 0, /* doc string */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3985 lname, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3986 (lisp_fn_t) Fname \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3987 }; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3988 Lisp_Object Fname (DEFUN_##max_args arglist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3989
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3990 #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
3991 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
3992 static struct Lisp_Subr S##Fname = \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3993 { \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3994 { /* struct lrecord_header */ \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3995 lrecord_type_subr, /* lrecord_type_index */ \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3996 1, /* mark bit */ \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3997 1, /* c_readonly bit */ \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3998 1, /* lisp_readonly bit */ \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3999 0 /* unused */ \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
4000 }, \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
4001 min_args, \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
4002 max_args, \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
4003 prompt, \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
4004 0, /* doc string */ \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
4005 lname, \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
4006 (lisp_fn_t) Fname \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
4007 }; \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
4008 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
4009 #define GET_DEFUN_LISP_OBJECT(Fname) \
172fb92bd156 [xemacs-hg @ 2005-06-28 11:32:13 by crestani]
crestani
parents: 2828
diff changeset
4010 wrap_subr (&S##Fname);
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
4011 #endif /* not NEW_GC */
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
4012
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4013 /* Heavy ANSI C preprocessor hackery to get DEFUN to declare a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4014 prototype that matches max_args, and add the obligatory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4015 `Lisp_Object' type declaration to the formal C arguments. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4016
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4017 #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
4018 #define DEFUN_UNEVALLED(args) Lisp_Object args
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4019 #define DEFUN_0() void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4020 #define DEFUN_1(a) Lisp_Object a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4021 #define DEFUN_2(a,b) DEFUN_1(a), Lisp_Object b
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4022 #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
4023 #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
4024 #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
4025 #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
4026 #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
4027 #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
4028
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4029 /* WARNING: If you add defines here for higher values of max_args,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4030 make sure to also fix the clauses in PRIMITIVE_FUNCALL(),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4031 and change the define of SUBR_MAX_ARGS above. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4032
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4033 #include "symeval.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4034
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
4035 BEGIN_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
4036
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4037 /* `specpdl' is the special binding/unwind-protect stack.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4038
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4039 Knuth says (see the Jargon File):
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4040 At MIT, `pdl' [abbreviation for `Push Down List'] used to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4041 be a more common synonym for `stack'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4042 Everywhere else `stack' seems to be the preferred term.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4043
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4044 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
4045 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
4046 extern MODULE_API int specpdl_depth_counter;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4047 #define specpdl_depth() specpdl_depth_counter
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4048
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4049
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4050 #define CHECK_FUNCTION(fun) do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4051 while (NILP (Ffunctionp (fun))) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4052 signal_invalid_function_error (fun); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4053 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4054
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4055
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4056 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4057 /* Checking for QUIT */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4058 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4059
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4060 /* 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
4061 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
4062 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
4063 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
4064 (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
4065 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
4066 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
4067
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4068 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
4069 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
4070 since it's just too prevalent. */
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4071
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4072 /* 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
4073
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4074 /* Asynchronous events set something_happened, and then are processed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4075 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
4076 any sensitive code. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4077
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4078 extern MODULE_API volatile int something_happened;
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4079 extern MODULE_API int dont_check_for_quit;
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4080 MODULE_API void check_what_happened (void);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4081
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4082 extern MODULE_API volatile int quit_check_signal_happened;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4083 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
4084 MODULE_API void check_quit (void);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4085
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4086 MODULE_API void signal_quit (void);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4087
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4088 int begin_dont_check_for_quit (void);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4089 int begin_do_check_for_quit (void);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4090
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4091 /* 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
4092 that a quit should be signalled. */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4093 #define QUIT_FLAG_SAYS_SHOULD_QUIT \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4094 (!NILP (Vquit_flag) && \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4095 (NILP (Vinhibit_quit) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4096 || (EQ (Vquit_flag, Qcritical) && !dont_check_for_quit)))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4097
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4098 /* 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
4099 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
4100 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
4101 when poll for quit is used.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4102
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4103 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
4104 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
4105 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
4106 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
4107 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
4108 and then call QUIT.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4109
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4110 A different version (below) is used for the actual QUIT macro. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4111 #define QUITP \
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4112 ((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
4113 QUIT_FLAG_SAYS_SHOULD_QUIT)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4114
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4115 /* 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
4116 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
4117 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
4118 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
4119 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
4120 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
4121 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
4122 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
4123 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
4124 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
4125 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
4126 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
4127 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
4128 so we have this different version. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4129 #define INTERNAL_QUITP \
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4130 ((something_happened ? check_what_happened () : (void) 0), \
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4131 QUIT_FLAG_SAYS_SHOULD_QUIT)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4132
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4133 /* 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
4134 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
4135 handled. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4136 #define QUIT do { if (INTERNAL_QUITP) signal_quit (); } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4137
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4138
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4139 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4140 /* hashing */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4141 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4142
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4143 /* #### 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
4144 #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
4145 #define HASH2(a,b) (GOOD_HASH * (a) + (b))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4146 #define HASH3(a,b,c) (GOOD_HASH * HASH2 (a,b) + (c))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4147 #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
4148 #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
4149 #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
4150 #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
4151 #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
4152 #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
4153
5013
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 5001
diff changeset
4154 #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
4155 Hashcode memory_hash (const void *xv, Bytecount size);
b87570db038f [xemacs-hg @ 2005-01-26 10:25:03 by ben]
ben
parents: 2500
diff changeset
4156 Hashcode internal_hash (Lisp_Object obj, int depth);
b87570db038f [xemacs-hg @ 2005-01-26 10:25:03 by ben]
ben
parents: 2500
diff changeset
4157 Hashcode internal_array_hash (Lisp_Object *arr, int size, int depth);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4158
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4159
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4160 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4161 /* String translation */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4162 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4163
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4164 /* 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
4165 string from English into the language defined by
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4166 `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
4167 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
4168 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
4169 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
4170
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4171 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
4172 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
4173 This is what make-msgfile.lex does.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4174
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4175 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
4176 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
4177 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
4178 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
4179 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
4180 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
4181 returned string. See Fgettext().
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4182
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4183 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
4184 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
4185 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
4186 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
4187 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
4188 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
4189
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4190 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
4191 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
4192 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
4193 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
4194 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
4195 build_msg_ascstring().
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4196 */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4197
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4198 /* 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
4199 translated into a foreign language. */
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4200 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
4201 {
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4202 ASSERT_ASCTEXT_ASCII (s);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4203 return s;
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4204 }
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4205
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4206 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
4207 {
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4208 return s;
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4209 }
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4210
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4211 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
4212 {
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4213 return s;
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4214 }
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4215
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4216 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
4217 {
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4218 return s;
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4219 }
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4220
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4221 #define GETTEXT ASCGETTEXT
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4222
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4223 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
4224 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
4225 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
4226 #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
4227
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4228
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4229 /* 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
4230 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
4231 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
4232 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
4233 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
4234 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
4235 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
4236 during message snarfing (see above).
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4237
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4238 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
4239 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
4240 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
4241 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
4242 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
4243 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
4244 this property).
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4245 */
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4246
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4247 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
4248 {
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4249 ASSERT_ASCTEXT_ASCII (s);
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4250 return s;
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4251 }
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4252
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4253 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
4254 {
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4255 return s;
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4256 }
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4257
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4258 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
4259 {
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4260 return s;
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4261 }
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4262
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4263 #define DEFER_GETTEXT DEFER_ASCGETTEXT
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4264
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4265 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
4266 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
4267 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
4268
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4269 #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
4270
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4271
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4272 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
4273 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
4274 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
4275
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4276 #define write_msg_string write_msg_ascstring
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4277
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4278
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4279 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4280 /* Garbage collection / GC-protection */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4281 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4282
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4283 /* Structure for recording stack slots that need marking */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4284
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4285 /* 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
4286 variable whose value should be marked in garbage collection.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4287 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
4288 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
4289 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
4290 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
4291 containing the link disappears.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4292
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4293 Every function that can call Feval must protect in this fashion all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4294 Lisp_Object variables whose contents will be used again. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4295
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4296 extern MODULE_API struct gcpro *gcprolist;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4297
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
4298 END_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
4299
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4300 /* #### Catching insufficient gcpro:
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4301
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4302 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
4303 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
4304 is much harder, but could be done:
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4305
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4306 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
4307 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
4308 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
4309 stack-based Lisp_Objects.
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4310
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4311 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
4312 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
4313 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
4314
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4315 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
4316 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
4317 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
4318 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
4319 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
4320 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
4321 might not use the object any more.)
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4322
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4323 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
4324 is set.
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4325
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4326 --ben
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4327 */
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4328
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4329 struct gcpro
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4330 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4331 struct gcpro *next;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4332 const Lisp_Object *var; /* Address of first protected variable */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4333 int nvars; /* Number of consecutive protected variables */
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4334 #if defined (__cplusplus) && defined (ERROR_CHECK_GC)
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4335 /* 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
4336 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
4337 copy constructor or assignment operator is not defined. */
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4338 gcpro () : next (0), var (0), nvars (0) { }
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4339 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
4340 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
4341 nvars = g.nvars;
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4342 return *this;}
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4343 ~gcpro () { assert (!next); }
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4344 #endif /* defined (__cplusplus) && defined (ERROR_CHECK_GC) */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4345 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4346
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4347 /* Normally, you declare variables gcpro1, gcpro2, ... and use the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4348 GCPROn() macros. However, if you need to have nested gcpro's,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4349 declare ngcpro1, ngcpro2, ... and use NGCPROn(). If you need
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4350 to nest another level, use nngcpro1, nngcpro2, ... and use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4351 NNGCPROn(). If you need to nest yet another level, create
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4352 the appropriate macros. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4353
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4354 /* 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
4355 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
4356 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
4357 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
4358 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
4359 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
4360 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
4361 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
4362 */
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
4363
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
4364 BEGIN_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
4365
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4366 #define XGCDECL1(x) struct gcpro x##cpro1
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4367 #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
4368 #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
4369 #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
4370 #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
4371
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4372 #ifdef DEBUG_GCPRO
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4373
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4374 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
4375 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
4376 Lisp_Object *, Lisp_Object *);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4377 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
4378 struct gcpro *, Lisp_Object *, Lisp_Object *,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4379 Lisp_Object *);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4380 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
4381 struct gcpro *, struct gcpro *, Lisp_Object *,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4382 Lisp_Object *, Lisp_Object *, Lisp_Object *);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4383 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
4384 struct gcpro *, struct gcpro *, struct gcpro *,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4385 Lisp_Object *, Lisp_Object *, Lisp_Object *,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4386 Lisp_Object *, Lisp_Object *);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4387 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
4388
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4389 #define XGCPRO1(x,v) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4390 debug_gcpro1 (__FILE__, __LINE__,&x##cpro1,&v)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4391 #define XGCPRO2(x,v1,v2) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4392 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
4393 #define XGCPRO3(x,v1,v2,v3) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4394 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
4395 &v1,&v2,&v3)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4396 #define XGCPRO4(x,v1,v2,v3,v4) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4397 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
4398 &x##cpro4, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4399 &v1,&v2,&v3,&v4)
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4400 #define XGCPRO5(x,v1,v2,v3,v4,v5) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4401 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
4402 &x##cpro4,&x##cpro5, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4403 &v1,&v2,&v3,&v4,&v5)
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4404 #define XUNGCPRO(x) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4405 debug_ungcpro(__FILE__, __LINE__,&x##cpro1)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4406
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4407 #else /* ! DEBUG_GCPRO */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4408
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4409 #define XGCPRO1(x, var1) ((void) ( \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4410 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
4411 gcprolist = &x##cpro1 ))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4412
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4413 #define XGCPRO2(x, var1, var2) ((void) ( \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4414 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
4415 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
4416 gcprolist = &x##cpro2 ))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4417
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4418 #define XGCPRO3(x, var1, var2, var3) ((void) ( \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4419 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
4420 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
4421 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
4422 gcprolist = &x##cpro3 ))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4423
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4424 #define XGCPRO4(x, var1, var2, var3, var4) ((void) ( \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4425 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
4426 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
4427 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
4428 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
4429 gcprolist = &x##cpro4 ))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4430
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4431 #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
4432 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
4433 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
4434 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
4435 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
4436 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
4437 gcprolist = &x##cpro5 ))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4438
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4439 #define XGCPRO1_ARRAY(x, array, n) ((void) ( \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4440 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
4441 gcprolist = &x##cpro1 ))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4442
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4443 #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
4444 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
4445 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
4446 gcprolist = &x##cpro2 ))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4447
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4448 #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
4449 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
4450 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
4451 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
4452 gcprolist = &x##cpro3 ))
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4453
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4454 #if defined (__cplusplus) && defined (ERROR_CHECK_GC)
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4455 /* 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
4456 ~gcpro(). This happens in UNGCPRO and longjmp(). */
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4457 #define UNWIND_GCPRO_TO(val) \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4458 do \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4459 { \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4460 struct gcpro *__gcpro_stop = (val); \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4461 /* 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
4462 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
4463 assert (__gcpro_stop); \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4464 while (gcprolist != __gcpro_stop) \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4465 { \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4466 struct gcpro *__gcpro_next = gcprolist->next; \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4467 gcprolist->next = 0; \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4468 gcprolist = __gcpro_next; \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4469 assert (gcprolist); \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4470 } \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4471 } while (0)
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4472 #else
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4473 #define UNWIND_GCPRO_TO(val) (gcprolist = (val))
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4474 #endif /* defined (__cplusplus) && defined (ERROR_CHECK_GC) */
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4475
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4476 #define XUNGCPRO(x) UNWIND_GCPRO_TO (x##cpro1.next)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4477
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4478 #endif /* ! DEBUG_GCPRO */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4479
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4480 #define GCDECL1 XGCDECL1 (g)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4481 #define GCDECL2 XGCDECL2 (g)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4482 #define GCDECL3 XGCDECL3 (g)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4483 #define GCDECL4 XGCDECL4 (g)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4484 #define GCDECL5 XGCDECL5 (g)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4485
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4486 #define GCPRO1(a) XGCPRO1 (g,a)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4487 #define GCPRO2(a,b) XGCPRO2 (g,a,b)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4488 #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
4489 #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
4490 #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
4491
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4492 #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
4493 #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
4494 #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
4495
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4496 #define UNGCPRO XUNGCPRO (g)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4497
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4498 #define NGCDECL1 XGCDECL1 (ng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4499 #define NGCDECL2 XGCDECL2 (ng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4500 #define NGCDECL3 XGCDECL3 (ng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4501 #define NGCDECL4 XGCDECL4 (ng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4502 #define NGCDECL5 XGCDECL5 (ng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4503
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4504 #define NGCPRO1(a) XGCPRO1 (ng,a)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4505 #define NGCPRO2(a,b) XGCPRO2 (ng,a,b)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4506 #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
4507 #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
4508 #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
4509
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4510 #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
4511 #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
4512 #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
4513
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4514 #define NUNGCPRO XUNGCPRO (ng)
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 NNGCDECL1 XGCDECL1 (nng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4517 #define NNGCDECL2 XGCDECL2 (nng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4518 #define NNGCDECL3 XGCDECL3 (nng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4519 #define NNGCDECL4 XGCDECL4 (nng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4520 #define NNGCDECL5 XGCDECL5 (nng)
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 NNGCPRO1(a) XGCPRO1 (nng,a)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4523 #define NNGCPRO2(a,b) XGCPRO2 (nng,a,b)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4524 #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
4525 #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
4526 #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
4527
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4528 #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
4529 #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
4530 #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
4531
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4532 #define NNUNGCPRO XUNGCPRO (nng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4533
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4534 /* Evaluate expr, UNGCPRO, and then return the value of expr. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4535 #define RETURN_UNGCPRO(expr) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4536 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4537 Lisp_Object ret_ungc_val = (expr); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4538 UNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4539 RETURN_SANS_WARNINGS ret_ungc_val; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4540 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4541
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4542 /* Evaluate expr, NUNGCPRO, UNGCPRO, and then return the value of expr. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4543 #define RETURN_NUNGCPRO(expr) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4544 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4545 Lisp_Object ret_ungc_val = (expr); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4546 NUNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4547 UNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4548 RETURN_SANS_WARNINGS ret_ungc_val; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4549 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4550
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4551 /* Evaluate expr, NNUNGCPRO, NUNGCPRO, UNGCPRO, and then return the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4552 value of expr. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4553 #define RETURN_NNUNGCPRO(expr) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4554 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4555 Lisp_Object ret_ungc_val = (expr); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4556 NNUNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4557 NUNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4558 UNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4559 RETURN_SANS_WARNINGS ret_ungc_val; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4560 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4561
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
4562 extern Lisp_Object_ptr_dynarr *staticpros;
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
4563 extern Lisp_Object_ptr_dynarr *staticpros_nodump;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4564 #ifdef DEBUG_XEMACS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4565
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4566 /* 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
4567
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4568 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
4569 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
4570 #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
4571 #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
4572
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
4573 #ifdef HAVE_SHLIB
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
4574 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
4575 #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
4576 #endif
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
4577
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4578 #else
611
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 609
diff changeset
4579
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4580 /* 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
4581 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
4582 /* 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
4583 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
4584 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
4585 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
4586 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
4587 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
4588 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
4589 out of the variable name. */
4234fd5a7b17 fix bug #668 (compile error, not --with-debug)
Ben Wing <ben@xemacs.org>
parents: 4976
diff changeset
4590 #define staticpro_1(ptr, name) staticpro (ptr)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4591
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4592 /* Call staticpro_nodump (&var) to protect static variable `var'. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4593 /* 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
4594 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
4595 #define staticpro_nodump_1(ptr, name) staticpro_nodump (ptr)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4596
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
4597 #ifdef HAVE_SHLIB
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
4598 /* 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
4599 MODULE_API void unstaticpro_nodump (Lisp_Object *);
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
4600 #endif
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
4601
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4602 #endif
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4603
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
4604 #ifdef NEW_GC
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
4605 extern Lisp_Object_dynarr *mcpros;
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
4606 #ifdef DEBUG_XEMACS
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
4607 /* 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
4608 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
4609 #define mcpro(ptr) mcpro_1 (ptr, #ptr)
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
4610 #else /* not DEBUG_XEMACS */
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
4611 /* Call mcpro (&var) to protect mc variable `var'. */
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
4612 MODULE_API void mcpro (Lisp_Object);
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
4613 #endif /* not DEBUG_XEMACS */
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
4614 #endif /* NEW_GC */
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
4615
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4616 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
4617 int begin_gc_forbidden (void);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4618 void end_gc_forbidden (int count);
1957
59e1bbea04fe [xemacs-hg @ 2004-03-19 02:59:08 by james]
james
parents: 1927
diff changeset
4619 extern int gc_currently_forbidden;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4620
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
4621 END_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
4622
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4623
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4624 /************************************************************************/
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4625 /* Misc definitions */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4626 /************************************************************************/
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4627
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4628 /************************************************************************/
1983
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
4629 /* Other numeric types */
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
4630 /************************************************************************/
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
4631 #include "number.h"
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
4632
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
4633
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
4634 /************************************************************************/
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4635 /* prototypes */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4636 /************************************************************************/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4637
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4638 /* NOTE: Prototypes should go HERE, not in various header files, unless
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4639 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
4640 (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
4641
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4642 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
4643 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
4644 the specifics of such objects. Putting prototypes here minimizes the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4645 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
4646 of reasons. --ben */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4647
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4648 /*--------------- prototypes for various public c functions ------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4649
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4650 /* Prototypes for all init/syms_of/vars_of initialization functions. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4651 #include "symsinit.h"
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4652
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
4653 BEGIN_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
4654
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4655 /* Defined in abbrev.c */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4656 MODULE_API EXFUN (Fexpand_abbrev, 0);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4657
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4658 /* Defined in alloc.c */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4659 MODULE_API EXFUN (Fcons, 2);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4660 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
4661 EXFUN (Fbit_vector, MANY);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4662 EXFUN (Fmake_byte_code, MANY);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4663 MODULE_API EXFUN (Fmake_list, 2);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4664 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
4665 EXFUN (Fstring, MANY);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4666 MODULE_API EXFUN (Fmake_symbol, 1);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4667 MODULE_API EXFUN (Fmake_vector, 2);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4668 MODULE_API EXFUN (Fvector, MANY);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4669
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
4670 #ifndef NEW_GC
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4671 void release_breathing_space (void);
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3250
diff changeset
4672 #endif /* not NEW_GC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4673 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
4674 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
4675 MODULE_API Lisp_Object vector1 (Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4676 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
4677 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
4678 Lisp_Object make_bit_vector (Elemcount, Lisp_Object);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
4679 Lisp_Object make_bit_vector_from_byte_vector (unsigned char *, Elemcount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4680 Lisp_Object noseeum_make_marker (void);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
4681 #ifndef NEW_GC
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4682 void garbage_collect_1 (void);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
4683 #endif /* not NEW_GC */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4684 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
4685 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
4686 MODULE_API Lisp_Object list1 (Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4687 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
4688 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
4689 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
4690 Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4691 MODULE_API Lisp_Object list5 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4692 Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4693 MODULE_API Lisp_Object list6 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4694 Lisp_Object, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4695 DECLARE_DOESNT_RETURN (memory_full (void));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4696 void disksave_object_finalization (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4697 extern int purify_flag;
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
4698 #ifndef NEW_GC
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4699 extern EMACS_INT gc_generation_number[1];
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
4700 #endif /* not NEW_GC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4701 int c_readonly (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4702 int lisp_readonly (Lisp_Object);
4953
304aebb79cd3 function renamings to track names of char typedefs
Ben Wing <ben@xemacs.org>
parents: 4952
diff changeset
4703 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
4704 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
4705 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
4706 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
4707 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
4708 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
4709 void init_string_ascii_begin (Lisp_Object string);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4710 Lisp_Object make_uninit_string (Bytecount);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4711 MODULE_API Lisp_Object make_float (double);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4712 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
4713 void free_cons (Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4714 void free_list (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4715 void free_alist (Lisp_Object);
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4716 void free_marker (Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4717 int object_dead_p (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4718 void mark_object (Lisp_Object obj);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
4719 #ifndef NEW_GC
1598
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1590
diff changeset
4720 #ifdef USE_KKCC
2645
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
4721 #ifdef DEBUG_XEMACS
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
4722 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
4723 #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
4724 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
4725 void kkcc_backtrace (void);
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
4726 #else
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
4727 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
4728 #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
4729 kkcc_gc_stack_push_lisp_object_1 (obj)
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
4730 #define kkcc_backtrace()
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
4731 #endif
1598
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1590
diff changeset
4732 #endif /* USE_KKCC */
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3085
diff changeset
4733 #endif /* not NEW_GC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4734 int marked_p (Lisp_Object obj);
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
4735 extern int funcall_allocation_flag;
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
4736 extern int need_to_garbage_collect;
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4737 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
4738 extern int need_to_signal_post_gc;
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
4739 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
4740 void recompute_funcall_allocation_flag (void);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4741
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4742 #ifdef MEMORY_USAGE_STATS
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
4743 Bytecount malloced_storage_size (void *, Bytecount, struct overhead_stats *);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
4744 Bytecount fixed_type_block_overhead (Bytecount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4745 #endif
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4746
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4747 #ifdef EVENT_DATA_AS_OBJECTS
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4748 Lisp_Object make_key_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4749 Lisp_Object make_button_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4750 Lisp_Object make_motion_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4751 Lisp_Object make_process_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4752 Lisp_Object make_timeout_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4753 Lisp_Object make_magic_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4754 Lisp_Object make_magic_eval_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4755 Lisp_Object make_eval_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4756 Lisp_Object make_misc_user_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4757 void free_key_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4758 void free_button_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4759 void free_motion_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4760 void free_process_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4761 void free_timeout_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4762 void free_magic_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4763 void free_magic_eval_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4764 void free_eval_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4765 void free_misc_user_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4766 #endif /* EVENT_DATA_AS_OBJECTS */
934
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 930
diff changeset
4767
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4768 /* Defined in buffer.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4769 Lisp_Object get_truename_buffer (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4770 void switch_to_buffer (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4771 extern int find_file_compare_truenames;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4772 extern int find_file_use_truenames;
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4773 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
4774 void set_buffer_internal (struct buffer *b);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4775 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
4776
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4777 void record_buffer (Lisp_Object buf);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4778 Lisp_Object get_buffer (Lisp_Object name,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4779 int error_if_deleted_or_does_not_exist);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4780 int map_over_sharing_buffers (struct buffer *buf,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4781 int (*mapfun) (struct buffer *buf,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4782 void *closure),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4783 void *closure);
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4784 void cleanup_buffer_undo_lists (void);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4785
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4786 extern struct buffer *current_buffer;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4787
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4788 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
4789
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4790 EXFUN (Fbuffer_disable_undo, 1);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4791 MODULE_API EXFUN (Fbuffer_modified_p, 1);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4792 MODULE_API EXFUN (Fbuffer_name, 1);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4793 MODULE_API EXFUN (Fcurrent_buffer, 0);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4794 EXFUN (Ferase_buffer, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4795 EXFUN (Fget_buffer, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4796 EXFUN (Fget_buffer_create, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4797 EXFUN (Fget_file_buffer, 1);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4798 MODULE_API EXFUN (Fkill_buffer, 1);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4799 EXFUN (Fother_buffer, 3);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4800 EXFUN (Frecord_buffer, 1);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4801 MODULE_API EXFUN (Fset_buffer, 1);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4802 EXFUN (Fset_buffer_modified_p, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4803
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4804 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
4805 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
4806 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
4807 extern Lisp_Object Qpermanent_local, Vafter_change_function;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4808 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
4809 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
4810 extern Lisp_Object Vinhibit_read_only, Vtransient_mark_mode;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4811
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4812 /* Defined in bytecode.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4813 EXFUN (Fbyte_code, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4814
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 578
diff changeset
4815 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
4816 (const Ascbyte *reason, Lisp_Object frob));
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4817
4932
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
4818 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
4819
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4820 /* Defined in callint.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4821 EXFUN (Fcall_interactively, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4822 EXFUN (Fprefix_numeric_value, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4823
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4824 /* Defined in casefiddle.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4825 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
4826 EXFUN (Fcanoncase, 2);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4827 EXFUN (Fupcase, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4828 EXFUN (Fupcase_initials, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4829 EXFUN (Fupcase_initials_region, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4830 EXFUN (Fupcase_region, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4831
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4832 /* Defined in casetab.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4833 EXFUN (Fset_standard_case_table, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4834
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4835 /* Defined in chartab.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4836 EXFUN (Freset_char_table, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4837
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4838 /* Defined in cmds.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4839 EXFUN (Fbeginning_of_line, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4840 EXFUN (Fend_of_line, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4841 EXFUN (Fforward_char, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4842 EXFUN (Fforward_line, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4843
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4844 /* Defined in data.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4845 EXFUN (Fadd1, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4846 EXFUN (Faref, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4847 EXFUN (Faset, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4848 EXFUN (Fcar, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4849 EXFUN (Fcar_safe, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4850 EXFUN (Fcdr, 1);
919
111c4f2ed9c9 [xemacs-hg @ 2002-07-14 09:43:52 by adrian]
adrian
parents: 888
diff changeset
4851 EXFUN (Fcdr_safe, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4852 EXFUN (Fgeq, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4853 EXFUN (Fgtr, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4854 EXFUN (Findirect_function, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4855 EXFUN (Fleq, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4856 EXFUN (Flistp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4857 EXFUN (Flss, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4858 EXFUN (Fmax, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4859 EXFUN (Fmin, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4860 EXFUN (Fminus, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4861 EXFUN (Fnumber_to_string, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4862 EXFUN (Fplus, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4863 EXFUN (Fquo, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4864 EXFUN (Frem, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4865 EXFUN (Fsetcar, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4866 EXFUN (Fsetcdr, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4867 EXFUN (Fsub1, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4868 EXFUN (Fsubr_max_args, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4869 EXFUN (Fsubr_min_args, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4870 EXFUN (Ftimes, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4871
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4872 DECLARE_DOESNT_RETURN (c_write_error (Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4873 DECLARE_DOESNT_RETURN (lisp_write_error (Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4874 DECLARE_DOESNT_RETURN (args_out_of_range (Lisp_Object, Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4875 DECLARE_DOESNT_RETURN (args_out_of_range_3 (Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4876 Lisp_Object));
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4877 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
4878 MODULE_API
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4879 DECLARE_DOESNT_RETURN (dead_wrong_type_argument (Lisp_Object, Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4880 void check_int_range (EMACS_INT, EMACS_INT, EMACS_INT);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4881
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4882 EXFUN (Fint_to_char, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4883 EXFUN (Fchar_to_int, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4884
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4885 enum arith_comparison {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4886 arith_equal,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4887 arith_notequal,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4888 arith_less,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4889 arith_grtr,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4890 arith_less_or_equal,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4891 arith_grtr_or_equal };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4892 Lisp_Object arithcompare (Lisp_Object, Lisp_Object, enum arith_comparison);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4893
707
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 665
diff changeset
4894 /* 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
4895 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
4896 values! Use make_time. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4897 Lisp_Object word_to_lisp (unsigned int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4898 unsigned int lisp_to_word (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4899
4932
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
4900 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
4901 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
4902 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
4903 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
4904 extern MODULE_API Lisp_Object Qintegerp;
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
4905
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
4906 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
4907 Qcircular_list, Qcircular_property_list, Qconversion_error,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
4908 Qcyclic_variable_indirection, Qdomain_error, Qediting_error,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
4909 Qend_of_buffer, Qend_of_file, Qerror, Qfile_error, Qinternal_error,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
4910 Qinvalid_change, Qinvalid_constant, Qinvalid_function, Qinvalid_operation,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
4911 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
4912 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
4913 Qoverflow_error, Qprinting_unreadable_object, Qquit, Qrange_error,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
4914 Qsetting_constant, Qsingularity_error, Qstack_overflow,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
4915 Qstructure_formation_error, Qtext_conversion_error, Qunderflow_error,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
4916 Qvoid_function, Qvoid_variable, Qwrong_number_of_arguments,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
4917 Qwrong_type_argument;
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
4918 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
4919
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4920 /* Defined in dired.c */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4921 Lisp_Object make_directory_hash_table (const Ibyte *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4922 Lisp_Object wasteful_word_to_lisp (unsigned int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4923
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4924 /* Defined in doc.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4925 EXFUN (Fsubstitute_command_keys, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4926
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
4927 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
4928 Ibyte *name_nonreloc,
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
4929 Lisp_Object name_reloc,
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
4930 int standard_doc_file);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4931 Lisp_Object read_doc_string (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4932
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4933 /* Defined in doprnt.c */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4934 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
4935 Bytecount format_length, Lisp_Object format_reloc,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4936 va_list vargs);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4937 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
4938 Bytecount format_length, Lisp_Object format_reloc,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4939 int nargs, const Lisp_Object *largs, ...);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4940 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
4941 Lisp_Object format_reloc, int nargs,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4942 const Lisp_Object *largs);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4943 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
4944 Lisp_Object format_reloc, int nargs, ...);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4945 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
4946 Lisp_Object format_reloc, int nargs,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4947 const Lisp_Object *largs,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4948 Bytecount *len_out);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4949 Ibyte *emacs_sprintf_malloc_lisp (Bytecount *len_out,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4950 const CIbyte *format_nonreloc,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4951 Lisp_Object format_reloc, int nargs, ...);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4952 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
4953 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
4954 PRINTF_ARGS (1, 2);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4955 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
4956 Bytecount *len_out);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4957 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
4958 PRINTF_ARGS (2, 3);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4959 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
4960 va_list vargs);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4961 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
4962 PRINTF_ARGS (2, 3);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4963
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4964
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4965 /* Defined in editfns.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4966 EXFUN (Fbobp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4967 EXFUN (Fbolp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4968 EXFUN (Fbuffer_substring, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4969 EXFUN (Fchar_after, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4970 EXFUN (Fchar_to_string, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4971 EXFUN (Fdelete_region, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4972 EXFUN (Feobp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4973 EXFUN (Feolp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4974 EXFUN (Ffollowing_char, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4975 EXFUN (Fformat, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4976 EXFUN (Fgoto_char, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4977 EXFUN (Finsert, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4978 EXFUN (Finsert_buffer_substring, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4979 EXFUN (Finsert_char, 4);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4980 EXFUN (Fnarrow_to_region, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4981 EXFUN (Fpoint, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4982 EXFUN (Fpoint_marker, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4983 EXFUN (Fpoint_max, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4984 EXFUN (Fpoint_min, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4985 EXFUN (Fpreceding_char, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4986 EXFUN (Fsystem_name, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4987 EXFUN (Fuser_home_directory, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4988 EXFUN (Fuser_login_name, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4989 EXFUN (Fwiden, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4990
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4991 void uncache_home_directory (void);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4992 Ibyte *get_home_directory (void);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4993 Ibyte *user_login_name (uid_t *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4994 void buffer_insert1 (struct buffer *, Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
4995 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
4996 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
4997 Lisp_Object make_time (time_t);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4998 Lisp_Object save_excursion_save (void);
844
047d37eb70d7 [xemacs-hg @ 2002-05-16 13:30:23 by ben]
ben
parents: 826
diff changeset
4999 Lisp_Object save_restriction_save (struct buffer *buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5000 Lisp_Object save_excursion_restore (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5001 Lisp_Object save_restriction_restore (Lisp_Object);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5002 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
5003 int beginning_of_line_p (struct buffer *b, Charbpos pt);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5004
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5005 /* Defined in emacsfns.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5006 Lisp_Object save_current_buffer_restore (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5007
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5008 /* Defined in emacs.c */
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
5009 EXFUN_NORETURN (Fkill_emacs, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5010 EXFUN (Frunning_temacs_p, 0);
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
5011 EXFUN (Fforce_debugging_signal, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5012
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5013 SIGTYPE fatal_error_signal (int);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5014 Lisp_Object make_arg_list (int, Wexttext **);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5015 void make_argc_argv (Lisp_Object, int *, Wexttext ***);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5016 void free_argc_argv (Wexttext **);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5017 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
5018 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
5019
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5020 /* 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
5021 extern int noninteractive, noninteractive1;
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5022 extern int inhibit_non_essential_conversion_operations;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5023 extern int preparing_for_armageddon;
458
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
5024 extern Fixnum emacs_priority;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5025 extern int suppress_early_error_handler_backtrace;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5026 void debug_break (void);
4854
95c4ced5c07c fix compile problems
Ben Wing <ben@xemacs.org>
parents: 4846
diff changeset
5027 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
5028 DECLARE_DOESNT_RETURN (really_abort (void));
776
79940b592197 [xemacs-hg @ 2002-03-15 07:43:14 by ben]
ben
parents: 771
diff changeset
5029 void zero_out_command_line_status_vars (void);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5030
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5031 /* Defined in emodules.c */
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
5032 #ifdef HAVE_SHLIB
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5033 EXFUN (Flist_modules, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5034 EXFUN (Fload_module, 3);
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
5035 extern int unloading_module;
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
5036 #endif
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5037
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5038 /* Defined in eval.c */
1706
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5039 MODULE_API EXFUN (Fapply, MANY);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5040 EXFUN (Fbacktrace, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5041 EXFUN (Fcommand_execute, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5042 EXFUN (Fcommandp, 1);
4744
17f7e9191c0b Rationalise duplicated functionality, #'custom-quote, #'quote-maybe.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4690
diff changeset
5043 EXFUN (Fquote_maybe, 1);
1706
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5044 MODULE_API EXFUN (Feval, 1);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5045 MODULE_API EXFUN (Ffuncall, MANY);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5046 EXFUN (Ffunctionp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5047 EXFUN (Finteractive_p, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5048 EXFUN (Fprogn, UNEVALLED);
1706
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5049 MODULE_API EXFUN (Fsignal, 2);
4677
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4512
diff changeset
5050 MODULE_API EXFUN_NORETURN (Fthrow, UNEVALLED);
1706
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5051 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
5052 EXFUN (Ffunction_max_args, 1);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5053 EXFUN (Ffunction_min_args, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5054
4677
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4512
diff changeset
5055 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
5056 Lisp_Object, int,
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4512
diff changeset
5057 Lisp_Object, Lisp_Object));
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4512
diff changeset
5058
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5059 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
5060 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
5061 Error_Behavior);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5062 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
5063 Lisp_Object, Error_Behavior);
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
5064 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
5065 ...)) PRINTF_ARGS(2, 3);
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5066 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
5067 const CIbyte *, ...) PRINTF_ARGS (4, 5);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5068 Lisp_Object signal_continuable_ferror (Lisp_Object, const CIbyte *, ...)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5069 PRINTF_ARGS (2, 3);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5070 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
5071 Error_Behavior,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5072 const CIbyte *, ...)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5073 PRINTF_ARGS (4, 5);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5074
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5075 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
5076 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
5077 Lisp_Object));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5078 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
5079 Lisp_Object, Error_Behavior);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5080 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
5081 Lisp_Object);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5082 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
5083 Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5084 Lisp_Object, Error_Behavior);
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
5085 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
5086 const Ascbyte *, ...))
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
5087 PRINTF_ARGS(3, 4);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5088 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
5089 Error_Behavior,
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5090 const Ascbyte *, ...) PRINTF_ARGS (5, 6);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5091 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
5092 const Ascbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5093 ...) PRINTF_ARGS (3, 4);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5094 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
5095 Lisp_Object,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5096 Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5097 Error_Behavior,
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5098 const Ascbyte *, ...)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5099 PRINTF_ARGS (5, 6);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5100 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
5101 Lisp_Object, Lisp_Object));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5102 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
5103 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
5104 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
5105 Lisp_Object, Lisp_Object);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5106 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
5107 Lisp_Object, Lisp_Object,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5108 Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5109 Error_Behavior);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5110
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5111
1927
44905d8fae13 [xemacs-hg @ 2004-02-25 17:42:34 by james]
james
parents: 1743
diff changeset
5112 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
5113 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
5114 (Lisp_Object));
44905d8fae13 [xemacs-hg @ 2004-02-25 17:42:34 by james]
james
parents: 1743
diff changeset
5115 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
5116 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
5117 (Lisp_Object));
436
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
5118
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5119 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
5120 Lisp_Object frob));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5121 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
5122 Lisp_Object frob1,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5123 Lisp_Object frob2));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5124 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
5125 Error_Behavior);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5126 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
5127 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
5128 Lisp_Object frob2));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5129 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
5130 Error_Behavior);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5131 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
5132 Lisp_Object frob));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5133 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
5134 Lisp_Object frob1,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5135 Lisp_Object frob2));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5136 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
5137 Error_Behavior);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5138 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
5139 Lisp_Object frob));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5140 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
5141 Lisp_Object frob1,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5142 Lisp_Object frob2));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5143 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
5144 Lisp_Object, Error_Behavior);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5145 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
5146 Lisp_Object frob));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5147 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
5148 Lisp_Object frob1,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5149 Lisp_Object frob2));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5150 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
5151 Error_Behavior);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5152 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
5153 Lisp_Object frob));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5154 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
5155 Lisp_Object frob1,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5156 Lisp_Object frob2));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5157 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
5158 Error_Behavior);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5159 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
5160 Lisp_Object frob));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5161 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
5162 Lisp_Object frob1,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5163 Lisp_Object frob2));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5164 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
5165 Error_Behavior);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5166 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
5167 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
5168 Lisp_Object frob));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5169 DECLARE_DOESNT_RETURN (stack_overflow (const Ascbyte *reason,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5170 Lisp_Object frob));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5171
436
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
5172 Lisp_Object signal_void_function_error (Lisp_Object);
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
5173 Lisp_Object signal_invalid_function_error (Lisp_Object);
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
5174 Lisp_Object signal_wrong_number_of_arguments_error (Lisp_Object, int);
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
5175
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5176 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
5177 enum run_hooks_condition);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5178 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
5179 void va_run_hook_with_args (Lisp_Object, int, ...);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5180 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
5181 Lisp_Object run_hook (Lisp_Object);
1706
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5182 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
5183 MODULE_API Lisp_Object call0 (Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5184 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
5185 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
5186 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
5187 Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5188 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
5189 Lisp_Object, Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5190 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
5191 Lisp_Object, Lisp_Object, Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5192 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
5193 Lisp_Object, Lisp_Object, Lisp_Object,
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5194 Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5195 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
5196 Lisp_Object, Lisp_Object, Lisp_Object,
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5197 Lisp_Object, Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5198 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
5199 Lisp_Object, Lisp_Object, Lisp_Object,
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
5200 Lisp_Object, Lisp_Object, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5201 Lisp_Object call0_in_buffer (struct buffer *, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5202 Lisp_Object call1_in_buffer (struct buffer *, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5203 Lisp_Object call2_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5204 Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5205 Lisp_Object call3_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5206 Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5207 Lisp_Object call4_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5208 Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5209 Lisp_Object call5_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5210 Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5211 Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5212 Lisp_Object call6_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5213 Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5214 Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5215 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
5216
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5217 struct call_trapping_problems_result
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5218 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5219 int caught_error, caught_throw;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5220 Lisp_Object error_conditions, data;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5221 Lisp_Object backtrace;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5222 Lisp_Object thrown_tag;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5223 Lisp_Object thrown_value;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5224 };
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5225
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5226 #define NO_INHIBIT_ERRORS (1<<0)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5227 #define NO_INHIBIT_THROWS (1<<1)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5228 #define INTERNAL_INHIBIT_ERRORS (1<<0)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5229 #define INTERNAL_INHIBIT_THROWS (1<<1)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5230 #define INHIBIT_WARNING_ISSUE (1<<2)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5231 #define ISSUE_WARNINGS_AT_DEBUG_LEVEL (1<<3)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5232 #define INHIBIT_QUIT (1<<4)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5233 #define UNINHIBIT_QUIT (1<<5)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5234 #define INHIBIT_GC (1<<6)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5235 #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
5236 #define INHIBIT_EXISTING_CODING_SYSTEM_DELETION (1<<8)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5237 #define INHIBIT_EXISTING_CHARSET_DELETION (1<<9)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5238 #define INHIBIT_PERMANENT_DISPLAY_OBJECT_CREATION (1<<10)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5239 #define INHIBIT_CODING_SYSTEM_CREATION (1<<11)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5240 #define INHIBIT_CHARSET_CREATION (1<<12)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5241 #define INHIBIT_EXISTING_BUFFER_TEXT_MODIFICATION (1<<13)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5242 #define INHIBIT_ANY_CHANGE_AFFECTING_REDISPLAY (1<<14)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5243 #define INHIBIT_ENTERING_DEBUGGER (1<<15)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5244 #define CALL_WITH_SUSPENDED_ERRORS (1<<16)
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
5245 #define POSTPONE_WARNING_ISSUE (1<<17)
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5246
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5247 enum check_allowed_operation
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5248 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5249 OPERATION_DELETE_OBJECT,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5250 OPERATION_CREATE_OBJECT,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5251 OPERATION_MODIFY_BUFFER_TEXT,
1429
969b7290edca [xemacs-hg @ 2003-04-24 05:33:43 by youngs]
youngs
parents: 1346
diff changeset
5252 OPERATION_MODIFY_OBJECT_PROPERTY
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5253 };
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5254
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5255 int get_inhibit_flags (void);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5256 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
5257 void note_object_created (Lisp_Object obj);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5258 void note_object_deleted (Lisp_Object obj);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5259 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
5260 Lisp_Object,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5261 Lisp_Object),
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5262 Lisp_Object handler_arg,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5263 Lisp_Object (*fun) (Lisp_Object),
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5264 Lisp_Object arg);
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
5265 int set_trapping_problems_flags (int flags);
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5266 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
5267 const Ascbyte *warning_string,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5268 int flags,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5269 struct call_trapping_problems_result
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5270 *problem,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5271 Lisp_Object (*fun) (void *),
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5272 void *arg);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5273 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
5274 const Ascbyte *warning_string,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5275 int flags,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5276 struct call_trapping_problems_result
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5277 *problem,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5278 lisp_fn_t fun, int nargs, ...);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5279 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
5280 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
5281 int);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5282 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
5283 Lisp_Object, int);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5284 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
5285 Lisp_Object, Lisp_Object, int);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5286 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
5287 Lisp_Object, Lisp_Object, Lisp_Object,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5288 int);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5289 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
5290 Lisp_Object, Lisp_Object, Lisp_Object,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5291 Lisp_Object, int);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5292 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
5293 Lisp_Object, int);
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
5294 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
5295 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
5296 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
5297 struct buffer *,
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
5298 int nargs,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5299 Lisp_Object *args,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5300 enum
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5301 run_hooks_condition
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5302 cond, int flags);
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
5303 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
5304 int nargs,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5305 Lisp_Object *args,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5306 enum run_hooks_condition
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5307 cond,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5308 int flags);
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
5309 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
5310 Lisp_Object hook_var,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5311 int nargs, ...);
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
5312 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
5313 struct buffer *,
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
5314 Lisp_Object,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5315 int nargs, ...);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5316 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
5317 Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5318 Error_Behavior, int, ...);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5319 /* 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
5320 int proper_redisplay_wrapping_in_place (void);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5321 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
5322 Lisp_Object, int * volatile,
2532
989a7680c221 [xemacs-hg @ 2005-01-29 09:15:55 by ben]
ben
parents: 2526
diff changeset
5323 Lisp_Object * volatile,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5324 Lisp_Object * volatile);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5325 Lisp_Object condition_case_1 (Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5326 Lisp_Object (*) (Lisp_Object),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5327 Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5328 Lisp_Object (*) (Lisp_Object, Lisp_Object),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5329 Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5330 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
5331 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
5332 #define unbind_to(obj) unbind_to_1 (obj, Qnil)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5333 void specbind (Lisp_Object, Lisp_Object);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5334 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
5335 Lisp_Object);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5336 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
5337 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
5338 int internal_bind_int (int *addr, int newval);
19dfb459d51a [xemacs-hg @ 2002-04-03 10:47:37 by ben]
ben
parents: 801
diff changeset
5339 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
5340 void do_autoload (Lisp_Object, Lisp_Object); /* GCPROs both arguments */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5341 Lisp_Object un_autoload (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5342 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
5343 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
5344 ...) PRINTF_ARGS (3, 4);
1292
f3437b56874d [xemacs-hg @ 2003-02-13 09:57:04 by ben]
ben
parents: 1268
diff changeset
5345 extern int backtrace_with_internal_sections;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5346
4841
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 4805
diff changeset
5347 extern Lisp_Object Vdebug_on_error;
1315
70921960b980 [xemacs-hg @ 2003-02-20 08:19:28 by ben]
ben
parents: 1292
diff changeset
5348 extern Lisp_Object Vstack_trace_on_error;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5349
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5350 /* Defined in event-stream.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5351 EXFUN (Faccept_process_output, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5352 EXFUN (Fadd_timeout, 4);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5353 EXFUN (Fdisable_timeout, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5354 EXFUN (Fdiscard_input, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5355 EXFUN (Fdispatch_event, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5356 EXFUN (Fenqueue_eval_event, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5357 EXFUN (Fnext_event, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5358 EXFUN (Fread_key_sequence, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5359 EXFUN (Fsit_for, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5360 EXFUN (Fsleep_for, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5361
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5362 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
5363 int detect_input_pending (int how_many);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5364 void reset_this_command_keys (Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5365 Lisp_Object enqueue_misc_user_event (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5366 Lisp_Object enqueue_misc_user_event_pos (Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5367 Lisp_Object, int, int, int, int);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5368 extern int modifier_keys_are_sticky;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5369
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5370 /* Defined in event-Xt.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5371 void signal_special_Xt_user_event (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5372
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5373
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5374 /* Defined in events.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5375 EXFUN (Fcopy_event, 2);
2862
b95fe16005fd [xemacs-hg @ 2005-07-17 20:08:40 by aidan]
aidan
parents: 2834
diff changeset
5376 EXFUN (Fevent_to_character, 4);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5377
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5378 void clear_event_resource (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5379 Lisp_Object allocate_event (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5380
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5381 EXFUN (Fevent_x_pixel, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5382 EXFUN (Fevent_y_pixel, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5383
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5384
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5385 /* Defined in file-coding.c */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5386 EXFUN (Fcoding_category_list, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5387 EXFUN (Fcoding_category_system, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5388 EXFUN (Fcoding_priority_list, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5389 EXFUN (Fcoding_system_description, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5390 EXFUN (Fcoding_system_documentation, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5391 EXFUN (Fcoding_system_list, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5392 EXFUN (Fcoding_system_name, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5393 EXFUN (Fcoding_system_p, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5394 EXFUN (Fcoding_system_property, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5395 EXFUN (Fcoding_system_type, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5396 EXFUN (Fcopy_coding_system, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5397 EXFUN (Fdecode_big5_char, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5398 EXFUN (Fdecode_coding_region, 4);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5399 EXFUN (Fdecode_shift_jis_char, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5400 EXFUN (Fdefine_coding_system_alias, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5401 EXFUN (Fdetect_coding_region, 3);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5402 EXFUN (Fdefault_encoding_detection_enabled_p, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5403 EXFUN (Fencode_big5_char, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5404 EXFUN (Fencode_coding_region, 4);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5405 EXFUN (Fencode_shift_jis_char, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5406 EXFUN (Ffind_coding_system, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5407 EXFUN (Fget_coding_system, 1);
4690
257b468bf2ca Move the #'query-coding-region implementation to C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4682
diff changeset
5408 EXFUN (Fmake_coding_system_internal, 4);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5409 EXFUN (Fset_coding_category_system, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5410 EXFUN (Fset_coding_priority_list, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5411 EXFUN (Fsubsidiary_coding_system, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5412
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5413 extern Lisp_Object Qshift_jis, Qiso2022, Qbig5, Qccl;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5414 extern Lisp_Object Qcharset_g0;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5415 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
5416 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
5417 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
5418 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
5419 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
5420 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
5421 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
5422 extern Lisp_Object Qno_conversion, Qraw_text;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5423 extern Lisp_Object Qno_iso6429, Qoutput_charset_conversion;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5424 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
5425 extern Lisp_Object Qshort, Vcoding_system_for_read;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5426 extern Lisp_Object Vcoding_system_for_write;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5427 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
5428 extern Lisp_Object Vterminal_coding_system;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5429 extern Lisp_Object Qcanonicalize_after_coding;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5430 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
5431 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
5432 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
5433 int eol_wrap);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5434 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
5435
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5436
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5437 /* Defined in fileio.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5438 EXFUN (Fdirectory_file_name, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5439 EXFUN (Fdo_auto_save, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5440 EXFUN (Fexpand_file_name, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5441 EXFUN (Ffile_accessible_directory_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5442 EXFUN (Ffile_directory_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5443 EXFUN (Ffile_executable_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5444 EXFUN (Ffile_exists_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5445 EXFUN (Ffile_name_absolute_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5446 EXFUN (Ffile_name_as_directory, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5447 EXFUN (Ffile_name_directory, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5448 EXFUN (Ffile_name_nondirectory, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5449 EXFUN (Ffile_readable_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5450 EXFUN (Ffile_symlink_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5451 EXFUN (Ffile_truename, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5452 EXFUN (Ffind_file_name_handler, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5453 EXFUN (Finsert_file_contents_internal, 7);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5454 EXFUN (Fmake_temp_name, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5455 EXFUN (Fsubstitute_in_file_name, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5456 EXFUN (Funhandled_file_name_directory, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5457 EXFUN (Fverify_visited_file_modtime, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5458
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5459 void record_auto_save (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5460 void force_auto_save_soon (void);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5461 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
5462 const Ascbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5463 Lisp_Object data));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5464 DECLARE_DOESNT_RETURN (report_file_error (const Ascbyte *, Lisp_Object));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5465 Lisp_Object lisp_strerror (int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5466 Lisp_Object expand_and_dir_to_file (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5467 int internal_delete_file (Lisp_Object);
2526
902d5bd9b75c [xemacs-hg @ 2005-01-28 02:36:11 by ben]
ben
parents: 2516
diff changeset
5468 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
5469 Bytecount len);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5470
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5471 /* Defined in filelock.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5472 EXFUN (Funlock_buffer, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5473
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5474 void lock_file (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5475 void unlock_file (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5476 void unlock_all_files (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5477 void unlock_buffer (struct buffer *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5478
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5479 /* Defined in floatfns.c */
4678
b5e1d4f6b66f Make #'floor, #'ceiling, #'round, #'truncate conform to Common Lisp.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4677
diff changeset
5480 EXFUN (Ftruncate, 2);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5481
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5482 double extract_float (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5483
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5484 /* Defined in fns.c */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5485 MODULE_API EXFUN (Fappend, MANY);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5486 EXFUN (Fassoc, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5487 EXFUN (Fassq, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5488 EXFUN (Fcanonicalize_lax_plist, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5489 EXFUN (Fcanonicalize_plist, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5490 EXFUN (Fcheck_valid_plist, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5491 EXFUN (Fconcat, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5492 EXFUN (Fcopy_alist, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5493 EXFUN (Fcopy_list, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5494 EXFUN (Fcopy_sequence, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5495 EXFUN (Fcopy_tree, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5496 EXFUN (Fdelete, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5497 EXFUN (Fdelq, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5498 EXFUN (Fdestructive_alist_to_plist, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5499 EXFUN (Felt, 2);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5500 MODULE_API EXFUN (Fequal, 2);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5501 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
5502 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
5503 MODULE_API EXFUN (Fequalp, 2);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5504 EXFUN (Flast, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5505 EXFUN (Flax_plist_get, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5506 EXFUN (Flax_plist_remprop, 2);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5507 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
5508 EXFUN (FmapcarX, MANY);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5509 EXFUN (Fmember, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5510 EXFUN (Fmemq, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5511 EXFUN (Fnconc, MANY);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5512 MODULE_API EXFUN (Fnreverse, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5513 EXFUN (Fnthcdr, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5514 EXFUN (Fold_assq, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5515 EXFUN (Fold_equal, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5516 EXFUN (Fold_member, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5517 EXFUN (Fold_memq, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5518 EXFUN (Fplist_get, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5519 EXFUN (Fplist_member, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5520 EXFUN (Fplist_put, 3);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5521 MODULE_API EXFUN (Fprovide, 1);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5522 MODULE_API EXFUN (Fput, 3);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5523 EXFUN (Frassq, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5524 EXFUN (Fremassq, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5525 EXFUN (Freplace_list, 2);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5526 MODULE_API EXFUN (Freverse, 1);
1268
fffe735e63ee [xemacs-hg @ 2003-02-07 11:50:50 by ben]
ben
parents: 1261
diff changeset
5527 EXFUN (Fsafe_length, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5528 EXFUN (Fsort, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5529 EXFUN (Fstring_equal, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5530 EXFUN (Fstring_lessp, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5531 EXFUN (Fsubstring, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5532 EXFUN (Fvalid_plist_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5533
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5534 Lisp_Object list_sort (Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5535 int (*) (Lisp_Object, Lisp_Object, Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5536 Lisp_Object merge (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5537
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5538 void bump_string_modiff (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5539 Lisp_Object memq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5540 Lisp_Object assoc_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5541 Lisp_Object assq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5542 Lisp_Object rassq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5543 Lisp_Object delq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5544 Lisp_Object delq_no_quit_and_free_cons (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5545 Lisp_Object remassoc_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5546 Lisp_Object remassq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5547 Lisp_Object remrassq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5548
4906
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4888
diff changeset
5549 int plists_differ (Lisp_Object, Lisp_Object, int, int, int, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5550 Lisp_Object internal_plist_get (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5551 void internal_plist_put (Lisp_Object *, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5552 int internal_remprop (Lisp_Object *, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5553 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
5554 int, Error_Behavior);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5555 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
5556 Lisp_Object, int, Error_Behavior);
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5557 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
5558 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
5559 const Ascbyte *warning_string,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5560 int flags,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5561 struct call_trapping_problems_result *p,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5562 int retval,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5563 Lisp_Object obj1, Lisp_Object obj2,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
5564 int depth);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5565 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
5566 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
5567 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
5568 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
5569 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
5570 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
5571 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
5572 int internal_equal_0 (Lisp_Object, Lisp_Object, int, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5573 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
5574 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
5575 void check_losing_bytecode (const Ascbyte *, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5576
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5577 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
5578 const Ascbyte *ascii_string);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5579 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
5580 Lisp_Object symbol);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5581
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5582 /* Defined in free-hook.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5583 EXFUN (Freally_free, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5584
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5585 /* Defined in glyphs.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5586 EXFUN (Fmake_glyph_internal, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5587
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5588 Error_Behavior decode_error_behavior_flag (Lisp_Object);
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5589 Lisp_Object encode_error_behavior_flag (Error_Behavior);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5590
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5591 /* Defined in glyphs-shared.c */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5592 void shared_resource_validate (Lisp_Object instantiator);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5593 Lisp_Object shared_resource_normalize (Lisp_Object inst,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5594 Lisp_Object console_type,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5595 Lisp_Object dest_mask,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5596 Lisp_Object tag);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5597 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
5598
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5599 /* Defined in gui.c */
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5600 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
5601 Lisp_Object frob));
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5602 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
5603 Lisp_Object frob0, Lisp_Object frob1));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5604 /* Defined in indent.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5605 EXFUN (Findent_to, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5606 EXFUN (Fvertical_motion, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5607
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5608 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
5609 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
5610 int string_column_at_point (Lisp_Object, Charbpos, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5611 int current_column (struct buffer *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5612 void invalidate_current_column (void);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
5613 Charbpos vmotion (struct window *, Charbpos, int, int *);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
5614 Charbpos vmotion_pixels (Lisp_Object, Charbpos, int, int, int *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5615
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5616 /* Defined in insdel.c */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5617 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
5618
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5619 /* Defined in intl.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5620 EXFUN (Fgettext, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5621
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5622 /* Defined in keymap.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5623 EXFUN (Fdefine_key, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5624 EXFUN (Fkey_description, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5625 EXFUN (Flookup_key, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5626 EXFUN (Fmake_sparse_keymap, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5627
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
5628 void where_is_to_char (Lisp_Object, Eistring *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5629
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5630 /* Defined in lread.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5631 EXFUN (Fread, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5632
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5633 void ebolify_bytecode_constants (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5634 void close_load_descs (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5635 int locate_file (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object *, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5636 EXFUN (Flocate_file_clear_hashing, 1);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5637 int isfloat_string (const char *);
1983
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
5638 #ifdef HAVE_RATIO
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
5639 int isratio_string (const char *);
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
5640 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5641
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5642 /* Well, I've decided to enable this. -- ben */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5643 /* And I've decided to make it work right. -- sb */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5644 #define LOADHIST
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5645 /* Define the following symbol to enable load history of dumped files */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5646 #define LOADHIST_DUMPED
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5647 /* Define the following symbol to enable load history of C source */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5648 #define LOADHIST_BUILTIN
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5649
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5650 #ifdef LOADHIST /* this is just a stupid idea */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5651 #define LOADHIST_ATTACH(x) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5652 do { if (initialized) Vcurrent_load_list = Fcons (x, Vcurrent_load_list); } \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5653 while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5654 #else /*! LOADHIST */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5655 # define LOADHIST_ATTACH(x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5656 #endif /*! LOADHIST */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5657
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5658 /* Defined in macros.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5659 EXFUN (Fexecute_kbd_macro, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5660
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5661 /* Defined in marker.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5662 EXFUN (Fcopy_marker, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5663 EXFUN (Fmake_marker, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5664 EXFUN (Fmarker_buffer, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5665 EXFUN (Fmarker_position, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5666 EXFUN (Fset_marker, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5667 EXFUN (Fset_marker_insertion_type, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5668
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5669 Bytebpos byte_marker_position (Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
5670 Charbpos marker_position (Lisp_Object);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5671 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
5672 void set_marker_position (Lisp_Object, Charbpos);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5673 void unchain_marker (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5674 Lisp_Object noseeum_copy_marker (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5675 Lisp_Object set_marker_restricted (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5676 #ifdef MEMORY_USAGE_STATS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5677 int compute_buffer_marker_usage (struct buffer *, struct overhead_stats *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5678 #endif
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5679 void init_buffer_markers (struct buffer *b);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5680 void uninit_buffer_markers (struct buffer *b);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5681
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5682 /* Defined in minibuf.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5683 extern int minibuf_level;
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5684 Charcount scmp_1 (const Ibyte *, const Ibyte *, Charcount, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5685 #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
5686 extern int completion_ignore_case;
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5687 int regexp_ignore_completion_p (const Ibyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5688 Bytecount, Bytecount);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5689 Lisp_Object clear_echo_area (struct frame *, Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5690 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
5691 void echo_area_append (struct frame *, const Ibyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5692 Bytecount, Bytecount, Lisp_Object);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5693 void echo_area_message (struct frame *, const Ibyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5694 Bytecount, Bytecount, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5695 Lisp_Object echo_area_status (struct frame *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5696 int echo_area_active (struct frame *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5697 Lisp_Object echo_area_contents (struct frame *);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5698 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
5699 void message_append_internal (const Ibyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5700 Bytecount, Bytecount);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5701 MODULE_API void message (const char *, ...) PRINTF_ARGS (1, 2);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5702 void message_append (const char *, ...) PRINTF_ARGS (1, 2);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5703 void message_no_translate (const char *, ...) PRINTF_ARGS (1, 2);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5704 void clear_message (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5705
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5706 /* Defined in mule-charset.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5707 EXFUN (Fmake_charset, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5708
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5709 extern Lisp_Object Ql2r, Qr2l;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5710
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5711 /* Defined in print.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5712 EXFUN (Fdisplay_error, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5713 EXFUN (Ferror_message_string, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5714 EXFUN (Fprin1, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5715 EXFUN (Fprin1_to_string, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5716 EXFUN (Fprinc, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5717 EXFUN (Fprint, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5718
4394
cacc942c0d0f Avoid clearing print-gensym-alist inappropriately when printing hash tables.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4355
diff changeset
5719 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
5720
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5721 /* Lower-level ways to output data: */
3085
d9ca850d40de [xemacs-hg @ 2005-11-22 09:02:37 by crestani]
crestani
parents: 3063
diff changeset
5722 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
5723 void print_internal (Lisp_Object, Lisp_Object, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5724 void debug_print (Lisp_Object);
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
5725 void debug_p4 (Lisp_Object obj);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
5726 void debug_p3 (Lisp_Object obj);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
5727 void debug_short_backtrace (int);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
5728 void debug_backtrace (void);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5729 /* 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
5730 * Note: stream should be defaulted before calling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5731 * (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
5732 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
5733 /* Same goes for this function. */
4953
304aebb79cd3 function renamings to track names of char typedefs
Ben Wing <ben@xemacs.org>
parents: 4952
diff changeset
5734 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
5735 /* Same goes for this function. */
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4932
diff changeset
5736 MODULE_API void write_ascstring (Lisp_Object stream, const Ascbyte *str);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5737 /* Same goes for this function. */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5738 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
5739 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
5740
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5741 /* 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
5742 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
5743 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
5744 int nargs, ...);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5745 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
5746 void stderr_out_lisp (const CIbyte *, int nargs, ...);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5747 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
5748 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
5749 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
5750 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
5751
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5752 /* Internal functions: */
1261
465bd3c7d932 [xemacs-hg @ 2003-02-06 06:35:47 by ben]
ben
parents: 1204
diff changeset
5753 Lisp_Object canonicalize_printcharfun (Lisp_Object printcharfun);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5754 void temp_output_buffer_setup (Lisp_Object);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5755 void temp_output_buffer_show (Lisp_Object, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5756 void print_cons (Lisp_Object, Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5757 void print_vector (Lisp_Object, Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5758 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
5759 void print_symbol (Lisp_Object, Lisp_Object, int);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5760 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
5761 /* 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
5762 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
5763 optional sign prefix, and null byte terminator.
614
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
5764 2.40824 == log (256) / log (10).
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
5765
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
5766 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
5767 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
5768 constant. */
603
1c880911c386 [xemacs-hg @ 2001-06-01 08:23:09 by martinb]
martinb
parents: 593
diff changeset
5769 #define DECIMAL_PRINT_SIZE(integral_type) \
614
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
5770 (((2410824 * sizeof (integral_type)) / 1000000) + 3)
577
910449c92002 [xemacs-hg @ 2001-05-25 10:04:26 by hrvojen]
hrvojen
parents: 569
diff changeset
5771 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
5772 void ulong_to_bit_string (char *, unsigned long);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5773 extern int print_escape_newlines;
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5774 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
5775 extern int in_debug_print;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5776 Lisp_Object internal_with_output_to_temp_buffer (Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5777 Lisp_Object (*) (Lisp_Object),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5778 Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5779 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
5780 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
5781 int UNUSED (escapeflag));
5117
3742ea8250b5 Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents: 3063
diff changeset
5782 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
5783 int UNUSED (escapeflag));
4846
a98ca4640147 clean up object print methods
Ben Wing <ben@xemacs.org>
parents: 4844
diff changeset
5784 MODULE_API DECLARE_DOESNT_RETURN (printing_unreadable_object (const CIbyte *,
a98ca4640147 clean up object print methods
Ben Wing <ben@xemacs.org>
parents: 4844
diff changeset
5785 ...))
a98ca4640147 clean up object print methods
Ben Wing <ben@xemacs.org>
parents: 4844
diff changeset
5786 PRINTF_ARGS (1, 2);
a98ca4640147 clean up object print methods
Ben Wing <ben@xemacs.org>
parents: 4844
diff changeset
5787 DECLARE_DOESNT_RETURN (printing_unreadable_lcrecord (Lisp_Object obj,
a98ca4640147 clean up object print methods
Ben Wing <ben@xemacs.org>
parents: 4844
diff changeset
5788 const Ibyte *name));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5789
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5790 /* Defined in rangetab.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5791 EXFUN (Fclear_range_table, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5792 EXFUN (Fget_range_table, 3);
2421
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
5793 EXFUN (Fmake_range_table, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5794 EXFUN (Fput_range_table, 4);
4690
257b468bf2ca Move the #'query-coding-region implementation to C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4682
diff changeset
5795 EXFUN (Fcopy_range_table, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5796
2421
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
5797 extern Lisp_Object Qstart_closed_end_open;
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
5798 extern Lisp_Object Qstart_open_end_open;
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
5799 extern Lisp_Object Qstart_closed_end_closed;
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
5800 extern Lisp_Object Qstart_open_end_closed;
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
5801
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5802 void put_range_table (Lisp_Object, EMACS_INT, EMACS_INT, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5803 int unified_range_table_bytes_needed (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5804 int unified_range_table_bytes_used (void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5805 void unified_range_table_copy_data (Lisp_Object, void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5806 Lisp_Object unified_range_table_lookup (void *, EMACS_INT, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5807 int unified_range_table_nentries (void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5808 void unified_range_table_get_range (void *, int, EMACS_INT *, EMACS_INT *,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5809 Lisp_Object *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5810
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5811 /* Defined in search.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5812 EXFUN (Fmatch_beginning, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5813 EXFUN (Fmatch_end, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5814 EXFUN (Fskip_chars_backward, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5815 EXFUN (Fskip_chars_forward, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5816 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
5817 EXFUN (Fregexp_quote, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5818
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5819 struct re_pattern_buffer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5820 struct re_registers;
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5821 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
5822 EMACS_INT *, int);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
5823 Charbpos find_next_newline (struct buffer *, Charbpos, int);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
5824 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
5825 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
5826 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
5827 EMACS_INT);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
5828 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
5829 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
5830 struct re_registers *regp,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5831 Lisp_Object translate,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5832 Lisp_Object searchobj,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5833 struct buffer *searchbuf,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5834 int posix, Error_Behavior errb);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5835 Bytecount fast_string_match (Lisp_Object, const Ibyte *,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5836 Lisp_Object, Bytecount,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
5837 Bytecount, int, Error_Behavior, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5838 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
5839 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
5840
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5841
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5842 /* Defined in signal.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5843 void init_interrupts_late (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5844
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5845 /* Defined in sound.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5846 EXFUN (Fding, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5847
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5848 void init_device_sound (struct device *);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5849 DECLARE_DOESNT_RETURN (report_sound_error (const Ascbyte *, Lisp_Object));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5850
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5851 /* Defined in specifier.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5852 EXFUN (Fadd_spec_to_specifier, 5);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5853 EXFUN (Fspecifier_spec_list, 4);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5854
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5855 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
5856 Error_Behavior, int, int, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5857 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
5858 Error_Behavior, int, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5859
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5860 /* Defined in symbols.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5861 EXFUN (Fboundp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5862 EXFUN (Fbuilt_in_variable_type, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5863 EXFUN (Fdefault_boundp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5864 EXFUN (Fdefault_value, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5865 EXFUN (Ffboundp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5866 EXFUN (Ffset, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5867 EXFUN (Fintern, 2);
4355
a2af1ff1761f Provide a DEFAULT argument in #'intern-soft.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4329
diff changeset
5868 EXFUN (Fintern_soft, 3);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5869 EXFUN (Fkill_local_variable, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5870 EXFUN (Fset, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5871 EXFUN (Fset_default, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5872 EXFUN (Fsymbol_function, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5873 EXFUN (Fsymbol_name, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5874 EXFUN (Fsymbol_plist, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5875 EXFUN (Fsymbol_value, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5876
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5877 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
5878 Lisp_Object intern_istring (const Ibyte *str);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5879 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
5880 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
5881 Lisp_Object oblookup (Lisp_Object, const Ibyte *, Bytecount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5882 void map_obarray (Lisp_Object, int (*) (Lisp_Object, void *), void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5883 Lisp_Object indirect_function (Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5884 Lisp_Object symbol_value_in_buffer (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5885 void kill_buffer_local_variables (struct buffer *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5886 int symbol_value_buffer_local_info (Lisp_Object, struct buffer *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5887 Lisp_Object find_symbol_value (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5888 Lisp_Object find_symbol_value_quickly (Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5889 Lisp_Object top_level_value (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5890 void reject_constant_symbols (Lisp_Object sym, Lisp_Object newval,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5891 int function_p,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5892 Lisp_Object follow_past_lisp_magic);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5893
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5894 /* Defined in syntax.c */
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
5895 Charbpos scan_words (struct buffer *, Charbpos, int);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5896 EXFUN (Fchar_syntax, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5897 EXFUN (Fforward_word, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5898 extern Lisp_Object Vstandard_syntax_table;
3250
2b8bb4938bb4 [xemacs-hg @ 2006-02-21 11:33:41 by stephent]
stephent
parents: 3094
diff changeset
5899 void signal_syntax_cache_extent_changed (EXTENT extent);
2b8bb4938bb4 [xemacs-hg @ 2006-02-21 11:33:41 by stephent]
stephent
parents: 3094
diff changeset
5900 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
5901 void init_buffer_syntax_cache (struct buffer *buf);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5902 void mark_buffer_syntax_cache (struct buffer *buf);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5903 void uninit_buffer_syntax_cache (struct buffer *buf);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5904 extern Lisp_Object Qsyntax_table;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5905
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5906 /* Defined in sysdep.c */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5907 long get_random (void);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5908 void seed_random (long arg);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5909
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5910 /* Defined in text.c */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5911 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
5912 const Ibyte *str,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5913 Bytecount len);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5914 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
5915 const Ichar *str,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5916 Charcount len);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5917 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
5918 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
5919 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
5920 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
5921 Bytecount len,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5922 Ichar_dynarr *dyn);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5923 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
5924 Bytecount len,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5925 Ichar *arr);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5926 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
5927 Ibyte_dynarr *dyn);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5928 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
5929 Bytecount *len_out);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5930 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
5931 Internal_Format srcfmt,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5932 Lisp_Object srcobj,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5933 Ibyte *dst, Bytecount dstlen,
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5934 Internal_Format dstfmt,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5935 Lisp_Object dstobj,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5936 Bytecount *src_used);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5937 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
5938 Bytecount len, Ibyte *dst, Bytecount dstlen,
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5939 Internal_Format dstfmt, Lisp_Object dstobj,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5940 Bytecount *src_used);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5941
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5942 /* 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
5943 /* 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
5944 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
5945 should be specified. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5946
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5947 #define GB_ALLOW_PAST_ACCESSIBLE (1 << 0)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5948 #define GB_ALLOW_NIL (1 << 1)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5949 #define GB_CHECK_ORDER (1 << 2)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5950 #define GB_COERCE_RANGE (1 << 3)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5951 #define GB_NO_ERROR_IF_BAD (1 << 4)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5952 #define GB_NEGATIVE_FROM_END (1 << 5)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5953 #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
5954
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5955 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
5956 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5957 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
5958 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5959 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
5960 Charbpos *from_out, Charbpos *to_out,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5961 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5962 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
5963 Bytebpos *from_out, Bytebpos *to_out,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5964 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5965 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
5966 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5967 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
5968 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5969 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
5970 Lisp_Object to, Charcount *from_out,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5971 Charcount *to_out, unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5972 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
5973 Lisp_Object to, Bytecount *from_out,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5974 Bytecount *to_out, unsigned int flags);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5975 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
5976 unsigned int flags);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5977 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
5978 unsigned int flags);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5979 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
5980 Lisp_Object to, Charxpos *from_out,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5981 Charxpos *to_out, unsigned int flags);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5982 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
5983 Lisp_Object to, Bytexpos *from_out,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5984 Bytexpos *to_out, unsigned int flags);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5985 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
5986 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
5987 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
5988 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
5989 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
5990 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
5991 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
5992 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
5993 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
5994 Charbpos upper);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5995 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
5996 Bytebpos upper);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5997 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
5998 Charxpos upper);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5999 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
6000 Bytexpos upper);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6001 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
6002 Charxpos pos);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6003 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
6004 Bytexpos pos);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6005 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
6006 Charxpos pos);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6007 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
6008 Bytexpos pos);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6009
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6010
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6011 #ifdef ENABLE_COMPOSITE_CHARS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6012
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6013 Ichar lookup_composite_char (Ibyte *str, int len);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6014 Lisp_Object composite_char_string (Ichar ch);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6015 #endif /* ENABLE_COMPOSITE_CHARS */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6016
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6017 EXFUN (Ffind_charset, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6018 EXFUN (Fget_charset, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6019 EXFUN (Fcharset_list, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6020
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6021 extern Lisp_Object Vcharset_ascii;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6022 extern Lisp_Object Vcharset_control_1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6023 extern Lisp_Object Vcharset_latin_iso8859_1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6024 extern Lisp_Object Vcharset_latin_iso8859_2;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6025 extern Lisp_Object Vcharset_latin_iso8859_3;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6026 extern Lisp_Object Vcharset_latin_iso8859_4;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6027 extern Lisp_Object Vcharset_thai_tis620;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6028 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
6029 extern Lisp_Object Vcharset_arabic_iso8859_6;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6030 extern Lisp_Object Vcharset_hebrew_iso8859_8;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6031 extern Lisp_Object Vcharset_katakana_jisx0201;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6032 extern Lisp_Object Vcharset_latin_jisx0201;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6033 extern Lisp_Object Vcharset_cyrillic_iso8859_5;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6034 extern Lisp_Object Vcharset_latin_iso8859_9;
3094
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3092
diff changeset
6035 extern Lisp_Object Vcharset_latin_iso8859_15;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6036 extern Lisp_Object Vcharset_japanese_jisx0208_1978;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6037 extern Lisp_Object Vcharset_chinese_gb2312;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6038 extern Lisp_Object Vcharset_japanese_jisx0208;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6039 extern Lisp_Object Vcharset_korean_ksc5601;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6040 extern Lisp_Object Vcharset_japanese_jisx0212;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6041 extern Lisp_Object Vcharset_chinese_cns11643_1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6042 extern Lisp_Object Vcharset_chinese_cns11643_2;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6043 extern Lisp_Object Vcharset_chinese_big5_1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6044 extern Lisp_Object Vcharset_chinese_big5_2;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6045 extern Lisp_Object Vcharset_composite;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6046
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6047 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
6048 int Lstream_fput_ichar (Lstream *stream, Ichar ch);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6049 void Lstream_funget_ichar (Lstream *stream, Ichar ch);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6050
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6051 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
6052 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6053 return (Ibyte *) xstrdup ((const Chbyte *) s);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6054 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6055
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6056 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
6057 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6058 return strlen ((const Chbyte *) s);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6059 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6060
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6061 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
6062 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6063 return bytecount_to_charcount (s, qxestrlen (s));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6064 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6065
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6066 DECLARE_INLINE_HEADER (int qxestrcmp (const Ibyte *s1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6067 const Ibyte *s2))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6068 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6069 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
6070 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6071
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6072 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
6073 const Ascbyte *s2))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6074 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6075 return strcmp ((const Chbyte *) s1, s2);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6076 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6077
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6078 DECLARE_INLINE_HEADER (int qxestrncmp (const Ibyte *string1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6079 const Ibyte *string2,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6080 Bytecount count))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6081 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6082 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
6083 (size_t) count);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6084 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6085
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6086 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
6087 const Ascbyte *string2,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6088 Bytecount count))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6089 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6090 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
6091 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6092
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6093 DECLARE_INLINE_HEADER (Ibyte *qxestrcpy (Ibyte *strDest,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6094 const Ibyte *strSource))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6095 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6096 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
6097 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6098
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6099 DECLARE_INLINE_HEADER (Ibyte *qxestrcpy_ascii (Ibyte *strDest,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6100 const Ascbyte *strSource))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6101 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6102 return (Ibyte *) strcpy ((Chbyte *) strDest, strSource);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6103 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6104
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6105 DECLARE_INLINE_HEADER (Ibyte *qxestrncpy (Ibyte *strDest,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6106 const Ibyte *strSource,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6107 Bytecount count))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6108 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6109 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
6110 (size_t) count);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6111 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6112
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6113 DECLARE_INLINE_HEADER (Ibyte *qxestrncpy_ascii (Ibyte *strDest,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6114 const Ascbyte *strSource,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6115 Bytecount count))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6116 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6117 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
6118 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6119
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6120 DECLARE_INLINE_HEADER (Ibyte *qxestrcat (Ibyte *strDest,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6121 const Ibyte *strSource))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6122 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6123 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
6124 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6125
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6126 DECLARE_INLINE_HEADER (Ibyte *qxestrcat_ascii (Ibyte *strDest,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6127 const Ascbyte *strSource))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6128 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6129 return (Ibyte *) strcat ((Chbyte *) strDest, strSource);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6130 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6131
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6132 DECLARE_INLINE_HEADER (Ibyte *qxestrncat (Ibyte *strDest,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6133 const Ibyte *strSource,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6134 Bytecount count))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6135 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6136 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
6137 (size_t) count);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6138 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6139
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6140 DECLARE_INLINE_HEADER (Ibyte *qxestrncat_ascii (Ibyte *strDest,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6141 const Ascbyte *strSource,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6142 Bytecount count))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6143 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6144 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
6145 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6146
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6147 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
6148 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6149 assert (c >= 0 && c <= 255);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6150 return (Ibyte *) strchr ((const Chbyte *) s, c);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6151 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6152
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6153 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
6154 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6155 assert (c >= 0 && c <= 255);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6156 return (Ibyte *) strrchr ((const Chbyte *) s, c);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6157 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6158
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6159 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
6160 const Ibyte *string2))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6161 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6162 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
6163 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6164
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6165 DECLARE_INLINE_HEADER (Bytecount qxestrcspn (const Ibyte *string,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6166 const CIbyte *strCharSet))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6167 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6168 return (Bytecount) strcspn ((const Chbyte *) string, strCharSet);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6169 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6170
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6171 DECLARE_INLINE_HEADER (Bytecount qxestrspn (const Ibyte *string,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6172 const CIbyte *strCharSet))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6173 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6174 return (Bytecount) strspn ((const Chbyte *) string, strCharSet);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6175 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6176
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6177 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
6178 const CIbyte *strCharSet))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6179 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6180 return (Ibyte *) strpbrk ((const Chbyte *) string, strCharSet);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6181 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6182
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6183 DECLARE_INLINE_HEADER (Ibyte *qxestrtok (Ibyte *strToken,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6184 const CIbyte *strDelimit))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6185 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6186 return (Ibyte *) strtok ((Chbyte *) strToken, strDelimit);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6187 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6188
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6189 DECLARE_INLINE_HEADER (double qxestrtod (const Ibyte *nptr,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6190 Ibyte **endptr))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6191 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6192 return strtod ((const Chbyte *) nptr, (Chbyte **) endptr);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6193 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6194
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6195 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
6196 int base))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6197 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6198 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
6199 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6200
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6201 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
6202 Ibyte **endptr,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6203 int base))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6204 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6205 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
6206 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6207
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6208 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
6209 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6210 return atoi ((const Chbyte *) string);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6211 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6212
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6213 DECLARE_INLINE_HEADER (Ibyte *qxestrupr (Ibyte *s))
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6214 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6215 return (Ibyte *) strupr ((Chbyte *) s);
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6216 }
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6217
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6218 DECLARE_INLINE_HEADER (Ibyte *qxestrlwr (Ibyte *s))
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6219 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6220 return (Ibyte *) strlwr ((Chbyte *) s);
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6221 }
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6222
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6223 int qxesprintf (Ibyte *buffer, const CIbyte *format, ...)
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6224 PRINTF_ARGS (2, 3);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6225
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6226 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
6227 const Ascbyte *format,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6228 void *ptr))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6229 {
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6230 /* #### DAMNIT! No vsscanf! */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6231 return sscanf ((Chbyte *) buffer, format, ptr);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6232 }
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6233
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6234 /* 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
6235 #define qxestrcoll DO NOT USE.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6236 #define qxestrxfrm DO NOT USE.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6237
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6238 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
6239 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
6240 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
6241 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
6242 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
6243 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
6244 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
6245 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
6246 Bytecount len);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6247 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
6248 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
6249 Bytecount len);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6250 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
6251 int qxememcmp4 (const Ibyte *s1, Bytecount len1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6252 const Ibyte *s2, Bytecount len2);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6253 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
6254 int qxememcasecmp4 (const Ibyte *s1, Bytecount len1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6255 const Ibyte *s2, Bytecount len2);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6256 int qxetextcmp (const Ibyte *s1, Bytecount len1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6257 const Ibyte *s2, Bytecount len2);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6258 int qxetextcmp_matching (const Ibyte *s1, Bytecount len1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6259 const Ibyte *s2, Bytecount len2,
801
2b676dc88c66 [xemacs-hg @ 2002-04-01 03:58:02 by ben]
ben
parents: 800
diff changeset
6260 Charcount *matching);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6261 int qxetextcasecmp (const Ibyte *s1, Bytecount len1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6262 const Ibyte *s2, Bytecount len2);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6263 int qxetextcasecmp_matching (const Ibyte *s1, Bytecount len1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6264 const Ibyte *s2, Bytecount len2,
801
2b676dc88c66 [xemacs-hg @ 2002-04-01 03:58:02 by ben]
ben
parents: 800
diff changeset
6265 Charcount *matching);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6266
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6267 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
6268 Bytecount bytelength,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6269 Charcount charlength);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6270 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
6271 Charbpos end, Bytebpos byte_start,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6272 Bytebpos byte_end);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6273
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6274 typedef struct
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6275 {
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6276 const char *srctext;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6277 void *dst;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6278 Bytecount dst_size;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6279 } alloca_convert_vals;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6280
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6281 typedef struct
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6282 {
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6283 Dynarr_declare (alloca_convert_vals);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6284 } alloca_convert_vals_dynarr;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6285
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6286 extern alloca_convert_vals_dynarr *active_alloca_convert;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6287
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6288 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
6289 srctext);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
6290
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6291 /* Defined in unicode.c */
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
6292 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
6293 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
6294 void init_charset_unicode_tables (Lisp_Object charset);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6295 void free_charset_unicode_tables (Lisp_Object charset);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6296 void recalculate_unicode_precedence (void);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6297 extern Lisp_Object Qunicode;
4096
1abf84db2c7f [xemacs-hg @ 2007-08-04 20:00:10 by aidan]
aidan
parents: 3988
diff changeset
6298 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
6299 #ifdef MEMORY_USAGE_STATS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6300 Bytecount compute_from_unicode_table_size (Lisp_Object charset,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6301 struct overhead_stats *stats);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6302 Bytecount compute_to_unicode_table_size (Lisp_Object charset,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6303 struct overhead_stats *stats);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6304 #endif /* MEMORY_USAGE_STATS */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6305
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6306 /* Defined in undo.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6307 EXFUN (Fundo_boundary, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6308
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6309 Lisp_Object truncate_undo_list (Lisp_Object, int, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6310 void record_extent (Lisp_Object, int);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
6311 void record_insert (struct buffer *, Charbpos, Charcount);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
6312 void record_delete (struct buffer *, Charbpos, Charcount);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
6313 void record_change (struct buffer *, Charbpos, Charcount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6314
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6315 /* Defined in unex*.c */
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
6316 #ifdef WIN32_NATIVE
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
6317 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
6318 #else
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
6319 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
6320 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6321 #ifdef RUN_TIME_REMAP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6322 int run_time_remap (char *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6323 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6324
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6325 /* Defined in vm-limit.c */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
6326 void memory_warnings (void *, void (*) (const char *));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6327
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
6328 /*--------------- prototypes for constant symbols ------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
6329
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6330 /* #### We should get rid of this and put the prototypes back up there in
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6331 #### the per-file stuff, where they belong. */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6332
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6333 /* Use the following when you have to add a bunch of symbols. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6334
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6335 /*
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6336
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6337 (defun redo-symbols (beg end)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6338 "Snarf any symbols out of the region and print them into a temporary buffer,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6339 which is displayed when the function finishes. The symbols are laid out with
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6340 `extern Lisp_Object ' before each one, with as many as can fit on one line
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6341 \(the maximum line width is controlled by the constant `max-line-length' in the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6342 code)."
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6343 (interactive "r")
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6344 (save-excursion
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6345 (goto-char beg)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6346 (let (syms)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6347 (while (re-search-forward "\\s-\\(Q[A-Za-z_0-9]+\\)" end t)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6348 (push (match-string 1) syms))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6349 (setq syms (sort syms #'string-lessp))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6350 (with-output-to-temp-buffer "*Symbols*"
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6351 (let* ((col 0)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6352 (start "extern Lisp_Object ")
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6353 (startlen (length start))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6354 ;; with a default-width frame of 80 chars, you can only fit
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6355 ;; 79 before wrapping. you can see this to a lower value if
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6356 ;; you don't want it right up against the right margin.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6357 (max-line-length 79))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6358 (dolist (sym syms)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6359 (cond (;; if something already on line (this will always be the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6360 ;; case except the very first iteration), see what
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6361 ;; space we've got. (need to take into account 2
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6362 ;; for the comma+space, 1 for the semicolon at the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6363 ;; end.) if enough space, do it.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6364 (and (> col 0) (< (+ col (length sym) 2)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6365 (1- max-line-length)))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6366 (princ ", ")
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6367 (princ sym)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6368 (incf col 2)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6369 (incf col (length sym)))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6370 (t
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6371 ;; either we're first iteration or we ran out of space.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6372 ;; if the latter, terminate the previous line. this
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6373 ;; loop is written on purpose so that it always prints
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6374 ;; at least one item, even if that would go over.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6375 (when (> col 0)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6376 (princ ";\n")
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6377 (setq col 0))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6378 (princ start)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6379 (incf col startlen)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6380 (princ sym)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6381 (incf col (length sym)))))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6382 ;; finally terminate the last line.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6383 (princ ";\n"))))))
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 */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6386
4932
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6387 extern Lisp_Object Qactivate_menubar_hook, Qand_optional, Qand_rest, Qautoload,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6388 Qbackground, Qbackground_pixmap, Qblinking, Qbuffer_glyph_p, Qbuffer_live_p,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6389 Qcall_interactively, Qcategory_designator_p,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6390 Qcategory_table_value_p, Qcdr, Qcolor_pixmap_image_instance_p, Qcommandp,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6391 Qcompletion_ignore_case, Qconsole_live_p, Qconst_specifier, Qcurrent_menubar,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6392 Qdefun, Qdevice_live_p, Qdim, Qdirection, Qdisabled, Qdisabled_command_hook,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6393 Qdisplay_table, Qdll_error, Qend_open, Qerror_lacks_explanatory_string,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6394 Qevent_live_p, Qexit, Qextent_live_p, Qexternal_debugging_output, Qfeaturep,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6395 Qfile_error, Qfile_name_sans_extension, Qfinal, Qforeground, Qformat,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6396 Qframe_live_p, Qgraphic, Qgui_error, Qicon_glyph_p, Qidentity, Qinhibit_quit,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6397 Qinhibit_read_only, Qinteractive, Qlayout, Qload, Qlong_name, Qmacro,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6398 Qmakunbound, Qmark, Qmodule, Qmono_pixmap_image_instance_p,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6399 Qmouse_leave_buffer_hook, Qnative_layout, Qnetwork_error,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6400 Qnothing_image_instance_p, Qpoint, Qpointer_glyph_p,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6401 Qpointer_image_instance_p, Qprint_length, Qprint_string_length, Qprogn,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6402 Qread_char, Qread_from_minibuffer, Qreally_early_error_handler,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6403 Qregion_beginning, Qregion_end, Qregistries, Qreverse_direction_charset,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6404 Qrun_hooks, Qsans_modifiers, Qsave_buffers_kill_emacs, Qself_insert_command,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6405 Qself_insert_defer_undo, Qsequencep, Qset, Qshort_name, Qsound_error,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6406 Qstandard_input, Qstandard_output, Qstart_open, Qstring_lessp, Qsubwindow,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6407 Qsubwindow_image_instance_p, Qtext_image_instance_p, Qtop_level, Qunderline,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6408 Quser_files_and_directories, Qvalues, Qvariable_documentation,
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6409 Qvariable_domain, Qwindow_live_p, Qyes_or_no_p;
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6410
8b63e21b0436 fix compile issues with gcc 4
Ben Wing <ben@xemacs.org>
parents: 4929
diff changeset
6411 extern MODULE_API Lisp_Object Qprocess_error, Qt, Qunbound;
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
6412
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
6413 #define SYMBOL(fou) extern Lisp_Object fou
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
6414 #define SYMBOL_MODULE_API(fou) extern MODULE_API Lisp_Object fou
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
6415 #define SYMBOL_KEYWORD(la_cle_est_fou) extern Lisp_Object la_cle_est_fou
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
6416 #define SYMBOL_GENERAL(tout_le_monde, est_fou) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
6417 extern Lisp_Object tout_le_monde
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
6418
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
6419 #include "general-slots.h"
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
6420
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
6421 #undef SYMBOL
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
6422 #undef SYMBOL_MODULE_API
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
6423 #undef SYMBOL_KEYWORD
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
6424 #undef SYMBOL_GENERAL
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
6425
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
6426 /*--------------- prototypes for variables of type Lisp_Object ------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
6427
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6428 /* #### We should get rid of this and put the prototypes back up there in
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6429 #### the per-file stuff, where they belong. */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
6430
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
6431 extern Lisp_Object Vactivate_menubar_hook;
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
6432 extern Lisp_Object Vautoload_queue, Vblank_menubar;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6433 extern Lisp_Object Vcommand_history;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6434 extern Lisp_Object Vcommand_line_args, Vconfigure_info_directory;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6435 extern Lisp_Object Vconfigure_site_directory, Vconfigure_site_module_directory;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6436 extern Lisp_Object Vconsole_list, Vcontrolling_terminal;
4921
17362f371cc2 add more byte-code assertions and better failure output
Ben Wing <ben@xemacs.org>
parents: 4914
diff changeset
6437 extern Lisp_Object Vcurrent_load_list;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6438 extern Lisp_Object Vcurrent_mouse_event, Vcurrent_prefix_arg, Vdata_directory;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
6439 extern Lisp_Object Vdirectory_sep_char, Vdisabled_command_hook;
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
6440 extern Lisp_Object Vdoc_directory, Vinternal_doc_file_name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6441 extern Lisp_Object Vecho_area_buffer, Vemacs_major_version;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6442 extern Lisp_Object Vemacs_minor_version, Vexec_directory, Vexec_path;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6443 extern Lisp_Object Vexecuting_macro, Vfeatures, Vfile_domain;
1927
44905d8fae13 [xemacs-hg @ 2004-02-25 17:42:34 by james]
james
parents: 1743
diff changeset
6444 extern Lisp_Object Vinvocation_directory, Vinvocation_name;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6445 extern Lisp_Object Vlast_command, Vlast_command_char;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6446 extern Lisp_Object Vlast_command_event, Vlast_input_event;
2548
c4c8a36043be [xemacs-hg @ 2005-02-03 07:11:19 by ben]
ben
parents: 2535
diff changeset
6447 extern Lisp_Object Vload_file_name_internal, Vload_history;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6448 extern Lisp_Object Vload_path, Vmark_even_if_inactive, Vmenubar_configuration;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6449 extern Lisp_Object Vminibuf_preprompt, Vminibuf_prompt, Vminibuffer_zero;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6450 extern Lisp_Object Vmodule_directory, Vmswindows_downcase_file_names;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6451 extern Lisp_Object Vmswindows_get_true_file_attributes, Vobarray;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6452 extern Lisp_Object Vprint_length, Vprint_level, Vprocess_environment;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6453 extern Lisp_Object Vrecent_keys_ring, Vshell_file_name, Vsite_directory;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6454 extern Lisp_Object Vsite_module_directory;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6455 extern Lisp_Object Vstandard_input, Vstandard_output, Vstdio_str;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
6456 extern Lisp_Object Vsynchronous_sounds, Vsystem_name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6457 extern Lisp_Object Vthis_command_keys, Vunread_command_event;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6458 extern Lisp_Object Vx_initial_argv_list;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6459
1927
44905d8fae13 [xemacs-hg @ 2004-02-25 17:42:34 by james]
james
parents: 1743
diff changeset
6460 extern MODULE_API Lisp_Object Vinhibit_quit, Vquit_flag;
44905d8fae13 [xemacs-hg @ 2004-02-25 17:42:34 by james]
james
parents: 1743
diff changeset
6461
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
6462 END_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
6463
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
6464 #endif /* INCLUDED_lisp_h_ */