annotate src/lisp.h @ 665:fdefd0186b75

[xemacs-hg @ 2001-09-20 06:28:42 by ben] The great integral types renaming. The purpose of this is to rationalize the names used for various integral types, so that they match their intended uses and follow consist conventions, and eliminate types that were not semantically different from each other. The conventions are: -- All integral types that measure quantities of anything are signed. Some people disagree vociferously with this, but their arguments are mostly theoretical, and are vastly outweighed by the practical headaches of mixing signed and unsigned values, and more importantly by the far increased likelihood of inadvertent bugs: Because of the broken "viral" nature of unsigned quantities in C (operations involving mixed signed/unsigned are done unsigned, when exactly the opposite is nearly always wanted), even a single error in declaring a quantity unsigned that should be signed, or even the even more subtle error of comparing signed and unsigned values and forgetting the necessary cast, can be catastrophic, as comparisons will yield wrong results. -Wsign-compare is turned on specifically to catch this, but this tends to result in a great number of warnings when mixing signed and unsigned, and the casts are annoying. More has been written on this elsewhere. -- All such quantity types just mentioned boil down to EMACS_INT, which is 32 bits on 32-bit machines and 64 bits on 64-bit machines. This is guaranteed to be the same size as Lisp objects of type `int', and (as far as I can tell) of size_t (unsigned!) and ssize_t. The only type below that is not an EMACS_INT is Hashcode, which is an unsigned value of the same size as EMACS_INT. -- Type names should be relatively short (no more than 10 characters or so), with the first letter capitalized and no underscores if they can at all be avoided. -- "count" == a zero-based measurement of some quantity. Includes sizes, offsets, and indexes. -- "bpos" == a one-based measurement of a position in a buffer. "Charbpos" and "Bytebpos" count text in the buffer, rather than bytes in memory; thus Bytebpos does not directly correspond to the memory representation. Use "Membpos" for this. -- "Char" refers to internal-format characters, not to the C type "char", which is really a byte. -- For the actual name changes, see the script below. I ran the following script to do the conversion. (NOTE: This script is idempotent. You can safely run it multiple times and it will not screw up previous results -- in fact, it will do nothing if nothing has changed. Thus, it can be run repeatedly as necessary to handle patches coming in from old workspaces, or old branches.) There are two tags, just before and just after the change: `pre-integral-type-rename' and `post-integral-type-rename'. When merging code from the main trunk into a branch, the best thing to do is first merge up to `pre-integral-type-rename', then apply the script and associated changes, then merge from `post-integral-type-change' to the present. (Alternatively, just do the merging in one operation; but you may then have a lot of conflicts needing to be resolved by hand.) Script `fixtypes.sh' follows: ----------------------------------- cut ------------------------------------ files="*.[ch] s/*.h m/*.h config.h.in ../configure.in Makefile.in.in ../lib-src/*.[ch] ../lwlib/*.[ch]" gr Memory_Count Bytecount $files gr Lstream_Data_Count Bytecount $files gr Element_Count Elemcount $files gr Hash_Code Hashcode $files gr extcount bytecount $files gr bufpos charbpos $files gr bytind bytebpos $files gr memind membpos $files gr bufbyte intbyte $files gr Extcount Bytecount $files gr Bufpos Charbpos $files gr Bytind Bytebpos $files gr Memind Membpos $files gr Bufbyte Intbyte $files gr EXTCOUNT BYTECOUNT $files gr BUFPOS CHARBPOS $files gr BYTIND BYTEBPOS $files gr MEMIND MEMBPOS $files gr BUFBYTE INTBYTE $files gr MEMORY_COUNT BYTECOUNT $files gr LSTREAM_DATA_COUNT BYTECOUNT $files gr ELEMENT_COUNT ELEMCOUNT $files gr HASH_CODE HASHCODE $files ----------------------------------- cut ------------------------------------ `fixtypes.sh' is a Bourne-shell script; it uses 'gr': ----------------------------------- cut ------------------------------------ #!/bin/sh # Usage is like this: # gr FROM TO FILES ... # globally replace FROM with TO in FILES. FROM and TO are regular expressions. # backup files are stored in the `backup' directory. from="$1" to="$2" shift 2 echo ${1+"$@"} | xargs global-replace "s/$from/$to/g" ----------------------------------- cut ------------------------------------ `gr' in turn uses a Perl script to do its real work, `global-replace', which follows: ----------------------------------- cut ------------------------------------ : #-*- Perl -*- ### global-modify --- modify the contents of a file by a Perl expression ## Copyright (C) 1999 Martin Buchholz. ## Copyright (C) 2001 Ben Wing. ## Authors: Martin Buchholz <martin@xemacs.org>, Ben Wing <ben@xemacs.org> ## Maintainer: Ben Wing <ben@xemacs.org> ## Current Version: 1.0, May 5, 2001 # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with XEmacs; see the file COPYING. If not, write to the Free # Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. eval 'exec perl -w -S $0 ${1+"$@"}' if 0; use strict; use FileHandle; use Carp; use Getopt::Long; use File::Basename; (my $myName = $0) =~ s@.*/@@; my $usage=" Usage: $myName [--help] [--backup-dir=DIR] [--line-mode] [--hunk-mode] PERLEXPR FILE ... Globally modify a file, either line by line or in one big hunk. Typical usage is like this: [with GNU print, GNU xargs: guaranteed to handle spaces, quotes, etc. in file names] find . -name '*.[ch]' -print0 | xargs -0 $0 's/\bCONST\b/const/g'\n [with non-GNU print, xargs] find . -name '*.[ch]' -print | xargs $0 's/\bCONST\b/const/g'\n The file is read in, either line by line (with --line-mode specified) or in one big hunk (with --hunk-mode specified; it's the default), and the Perl expression is then evalled with \$_ set to the line or hunk of text, including the terminating newline if there is one. It should destructively modify the value there, storing the changed result in \$_. Files in which any modifications are made are backed up to the directory specified using --backup-dir, or to `backup' by default. To disable this, use --backup-dir= with no argument. Hunk mode is the default because it is MUCH MUCH faster than line-by-line. Use line-by-line only when it matters, e.g. you want to do a replacement only once per line (the default without the `g' argument). Conversely, when using hunk mode, *ALWAYS* use `g'; otherwise, you will only make one replacement in the entire file! "; my %options = (); $Getopt::Long::ignorecase = 0; &GetOptions ( \%options, 'help', 'backup-dir=s', 'line-mode', 'hunk-mode', ); die $usage if $options{"help"} or @ARGV <= 1; my $code = shift; die $usage if grep (-d || ! -w, @ARGV); sub SafeOpen { open ((my $fh = new FileHandle), $_[0]); confess "Can't open $_[0]: $!" if ! defined $fh; return $fh; } sub SafeClose { close $_[0] or confess "Can't close $_[0]: $!"; } sub FileContents { my $fh = SafeOpen ("< $_[0]"); my $olddollarslash = $/; local $/ = undef; my $contents = <$fh>; $/ = $olddollarslash; return $contents; } sub WriteStringToFile { my $fh = SafeOpen ("> $_[0]"); binmode $fh; print $fh $_[1] or confess "$_[0]: $!\n"; SafeClose $fh; } foreach my $file (@ARGV) { my $changed_p = 0; my $new_contents = ""; if ($options{"line-mode"}) { my $fh = SafeOpen $file; while (<$fh>) { my $save_line = $_; eval $code; $changed_p = 1 if $save_line ne $_; $new_contents .= $_; } } else { my $orig_contents = $_ = FileContents $file; eval $code; if ($_ ne $orig_contents) { $changed_p = 1; $new_contents = $_; } } if ($changed_p) { my $backdir = $options{"backup-dir"}; $backdir = "backup" if !defined ($backdir); if ($backdir) { my ($name, $path, $suffix) = fileparse ($file, ""); my $backfulldir = $path . $backdir; my $backfile = "$backfulldir/$name"; mkdir $backfulldir, 0755 unless -d $backfulldir; print "modifying $file (original saved in $backfile)\n"; rename $file, $backfile; } WriteStringToFile ($file, $new_contents); } } ----------------------------------- cut ------------------------------------ In addition to those programs, I needed to fix up a few other things, particularly relating to the duplicate definitions of types, now that some types merged with others. Specifically: 1. in lisp.h, removed duplicate declarations of Bytecount. The changed code should now look like this: (In each code snippet below, the first and last lines are the same as the original, as are all lines outside of those lines. That allows you to locate the section to be replaced, and replace the stuff in that section, verifying that there isn't anything new added that would need to be kept.) --------------------------------- snip ------------------------------------- /* Counts of bytes or chars */ typedef EMACS_INT Bytecount; typedef EMACS_INT Charcount; /* Counts of elements */ typedef EMACS_INT Elemcount; /* Hash codes */ typedef unsigned long Hashcode; /* ------------------------ dynamic arrays ------------------- */ --------------------------------- snip ------------------------------------- 2. in lstream.h, removed duplicate declaration of Bytecount. Rewrote the comment about this type. The changed code should now look like this: --------------------------------- snip ------------------------------------- #endif /* The have been some arguments over the what the type should be that specifies a count of bytes in a data block to be written out or read in, using Lstream_read(), Lstream_write(), and related functions. Originally it was long, which worked fine; Martin "corrected" these to size_t and ssize_t on the grounds that this is theoretically cleaner and is in keeping with the C standards. Unfortunately, this practice is horribly error-prone due to design flaws in the way that mixed signed/unsigned arithmetic happens. In fact, by doing this change, Martin introduced a subtle but fatal error that caused the operation of sending large mail messages to the SMTP server under Windows to fail. By putting all values back to be signed, avoiding any signed/unsigned mixing, the bug immediately went away. The type then in use was Lstream_Data_Count, so that it be reverted cleanly if a vote came to that. Now it is Bytecount. Some earlier comments about why the type must be signed: This MUST BE SIGNED, since it also is used in functions that return the number of bytes actually read to or written from in an operation, and these functions can return -1 to signal error. Note that the standard Unix read() and write() functions define the count going in as a size_t, which is UNSIGNED, and the count going out as an ssize_t, which is SIGNED. This is a horrible design flaw. Not only is it highly likely to lead to logic errors when a -1 gets interpreted as a large positive number, but operations are bound to fail in all sorts of horrible ways when a number in the upper-half of the size_t range is passed in -- this number is unrepresentable as an ssize_t, so code that checks to see how many bytes are actually written (which is mandatory if you are dealing with certain types of devices) will get completely screwed up. --ben */ typedef enum lstream_buffering --------------------------------- snip ------------------------------------- 3. in dumper.c, there are four places, all inside of switch() statements, where XD_BYTECOUNT appears twice as a case tag. In each case, the two case blocks contain identical code, and you should *REMOVE THE SECOND* and leave the first.
author ben
date Thu, 20 Sep 2001 06:31:11 +0000
parents b39c14581166
children a307f9a2021d
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.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4 Copyright (C) 1995, 1996, 2000 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
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
25 #ifndef INCLUDED_lisp_h_
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
26 #define INCLUDED_lisp_h_
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 /* general definitions */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
32 /* ------------------------ include files ------------------- */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
33
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 /* We include the following generally useful header files so that you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 don't have to worry about prototypes when using the standard C
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 library functions and macros. These files shouldn't be excessively
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 large so they shouldn't cause that much of a slowdown. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 #include <stdlib.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 #include <string.h> /* primarily for memcpy, etc. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 #include <stdio.h> /* NULL, etc. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 #include <ctype.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 #include <stdarg.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 #include <stddef.h> /* offsetof */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 #include <sys/types.h>
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
46 #include <limits.h>
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
47
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
48 /* ------------------------ definition of EMACS_INT ------------------- */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
49
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
50 /* EMACS_INT is the underlying integral type into which a Lisp_Object must fit.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
51 In particular, it must be large enough to contain a pointer.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
52 config.h can override this, e.g. to use `long long' for bigger lisp ints.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
53
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
54 #### In point of fact, it would NOT be a good idea for config.h to mess
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
55 with EMACS_INT. A lot of code makes the basic assumption that EMACS_INT
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
56 is the size of a pointer. */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
57
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
58 #ifndef SIZEOF_EMACS_INT
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
59 # define SIZEOF_EMACS_INT SIZEOF_VOID_P
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
60 #endif
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
61
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
62 #ifndef EMACS_INT
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
63 # if SIZEOF_EMACS_INT == SIZEOF_LONG
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
64 # define EMACS_INT long
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
65 # elif SIZEOF_EMACS_INT == SIZEOF_INT
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
66 # define EMACS_INT int
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
67 # elif SIZEOF_EMACS_INT == SIZEOF_LONG_LONG
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
68 # define EMACS_INT long long
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
69 # else
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
70 # error Unable to determine suitable type for EMACS_INT
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
71 # endif
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
72 #endif
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
73
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
74 #ifndef EMACS_UINT
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
75 # define EMACS_UINT unsigned EMACS_INT
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
76 #endif
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
77
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
78 #define BITS_PER_EMACS_INT (SIZEOF_EMACS_INT * BITS_PER_CHAR)
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
79
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
80 /* ------------------------ basic char/int typedefs ------------------- */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
81
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
82 /* The definitions we put here use typedefs to attribute specific meaning
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
83 to types that by themselves are pretty general. Stuff pointed to by a
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
84 char * or unsigned char * will nearly always be one of four types:
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
85 a) pointer to internally-formatted text; b) pointer to text in some
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
86 external format, which can be defined as all formats other than the
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
87 internal one; c) pure ASCII text; d) binary data that is not meant to
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
88 be interpreted as text. [A fifth possible type "e) a general pointer
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
89 to memory" should be replaced with void *.] Using these more specific
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
90 types rather than the general ones helps avoid the confusions that
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
91 occur when the semantics of a char * argument being studied are unclear.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
92
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
93 Note that these typedefs are purely for documentation purposes; from
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
94 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
95 `unsigned char *', etc., so you can freely use them with library
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
96 functions declared as such. */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
97
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
98 /* The data representing the text in a buffer is logically a set
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
99 of Intbytes, declared as follows. */
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
100
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
101 typedef unsigned char Intbyte;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
102
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
103 /* 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
104 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
105 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
106 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
107
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
108 In general, you should avoid this where possible and use Intbyte instead,
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
109 for consistency. For example, the new Mule workspace contains
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
110 Intbyte versions of the stdlib string functions. */
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
111
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
112 typedef char CIntbyte;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
113
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
114 /* 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
115 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
116 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
117 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
118 for referring to external text. */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
119
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
120 typedef char Extbyte;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
121
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
122 /* A byte in a string in binary format: */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
123 typedef char Char_Binary;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
124 typedef signed char SChar_Binary;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
125 typedef unsigned char UChar_Binary;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
126
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
127 /* 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
128 the range 00 - 7F) */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
129
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
130 typedef char Char_ASCII;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
131 typedef unsigned char UChar_ASCII;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
132
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
133
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
134 /* To the user, a buffer is made up of characters, declared as follows.
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
135 In the non-Mule world, characters and Intbytes are equivalent.
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
136 In the Mule world, a character requires (typically) 1 to 4
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
137 Intbytes for its representation in a buffer. */
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
138
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
139 typedef int Emchar;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
140
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
141 /* 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
142 the typedefs in preference to 'EMACS_INT' to make it clearer what
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
143 sort of position is being used. See extents.c for a description
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
144 of the different positions. We put them here instead of in
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
145 buffer.h (where they rightfully belong) to avoid syntax errors
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
146 in function prototypes. */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
147
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
148 typedef EMACS_INT Charbpos;
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
149 typedef EMACS_INT Bytebpos;
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
150 typedef EMACS_INT Membpos;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
151
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
152 /* Counts of bytes or chars */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
153 typedef EMACS_INT Bytecount;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
154 typedef EMACS_INT Charcount;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
155
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
156 /* Counts of elements */
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
157 typedef EMACS_INT Elemcount;
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
158
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
159 /* Hash codes */
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
160 typedef unsigned long Hashcode;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
161
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
162 /* ------------------------ dynamic arrays ------------------- */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 #define Dynarr_declare(type) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 type *base; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 int elsize; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 int cur; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 int largest; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 int max
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 typedef struct dynarr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 Dynarr_declare (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 } Dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 void *Dynarr_newf (int elsize);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 void Dynarr_resize (void *dy, int size);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
178 void Dynarr_insert_many (void *d, const void *el, int len, int start);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 void Dynarr_delete_many (void *d, int start, int len);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 void Dynarr_free (void *d);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
182 #define Dynarr_new(type) ((type##_dynarr *) Dynarr_newf (sizeof (type)))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
183 #define Dynarr_new2(dynarr_type, type) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
184 ((dynarr_type *) Dynarr_newf (sizeof (type)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 #define Dynarr_at(d, pos) ((d)->base[pos])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 #define Dynarr_atp(d, pos) (&Dynarr_at (d, pos))
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
187 #define Dynarr_begin(d) Dynarr_atp (d, 0)
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
188 #define Dynarr_end(d) Dynarr_atp (d, Dynarr_length (d))
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
189 #define Dynarr_sizeof(d) ((d)->cur * (d)->elsize)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 #define Dynarr_length(d) ((d)->cur)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 #define Dynarr_largest(d) ((d)->largest)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 #define Dynarr_reset(d) ((d)->cur = 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 #define Dynarr_add_many(d, el, len) Dynarr_insert_many (d, el, len, (d)->cur)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 #define Dynarr_insert_many_at_start(d, el, len) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 Dynarr_insert_many (d, el, len, 0)
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
196 #define Dynarr_add_literal_string(d, s) Dynarr_add_many (d, s, sizeof (s) - 1)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 #define Dynarr_add_lisp_string(d, s) do { \
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
198 Lisp_String *dyna_ls_s = XSTRING (s); \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 Dynarr_add_many (d, (char *) string_data (dyna_ls_s), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 string_length (dyna_ls_s)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 #define Dynarr_add(d, el) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 (d)->cur >= (d)->max ? Dynarr_resize ((d), (d)->cur+1) : (void) 0, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 ((d)->base)[(d)->cur++] = (el), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 (d)->cur > (d)->largest ? (d)->largest = (d)->cur : (int) 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 /* The following defines will get you into real trouble if you aren't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 careful. But they can save a lot of execution time when used wisely. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 #define Dynarr_increment(d) ((d)->cur++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 #define Dynarr_set_size(d, n) ((d)->cur = n)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 #ifdef MEMORY_USAGE_STATS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 struct overhead_stats;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
215 Bytecount Dynarr_memory_usage (void *d, struct overhead_stats *stats);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 /* Also define min() and max(). (Some compilers put them in strange
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 places that won't be referenced by the above include files, such
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 as 'macros.h' under Solaris.) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 #ifndef min
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 #define min(a,b) (((a) <= (b)) ? (a) : (b))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 #ifndef max
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 #define max(a,b) (((a) > (b)) ? (a) : (b))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 /* Memory allocation */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
230 void malloc_warning (const char *);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
231 void *xmalloc (Bytecount size);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
232 void *xmalloc_and_zero (Bytecount size);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
233 void *xrealloc (void *, Bytecount size);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
234 char *xstrdup (const char *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 /* generally useful */
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
236 #define countof(x) ((int) (sizeof(x)/sizeof((x)[0])))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 #define xnew(type) ((type *) xmalloc (sizeof (type)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 #define xnew_array(type, len) ((type *) xmalloc ((len) * sizeof (type)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 #define xnew_and_zero(type) ((type *) xmalloc_and_zero (sizeof (type)))
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
240 #define xzero(lvalue) ((void) memset (&(lvalue), '\0', sizeof (lvalue)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 #define xnew_array_and_zero(type, len) ((type *) xmalloc_and_zero ((len) * sizeof (type)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 #define XREALLOC_ARRAY(ptr, type, len) ((void) (ptr = (type *) xrealloc (ptr, (len) * sizeof (type))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 #define alloca_array(type, len) ((type *) alloca ((len) * sizeof (type)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 /* also generally useful if you want to avoid arbitrary size limits
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 but don't need a full dynamic array. Assumes that BASEVAR points
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 to a malloced array of TYPE objects (or possibly a NULL pointer,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 if SIZEVAR is 0), with the total size stored in SIZEVAR. This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 macro will realloc BASEVAR as necessary so that it can hold at
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 least NEEDED_SIZE objects. The reallocing is done by doubling,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 which ensures constant amortized time per element. */
430
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
252 #define DO_REALLOC(basevar, sizevar, needed_size, type) do { \
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
253 Bytecount do_realloc_needed_size = (needed_size); \
430
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
254 if ((sizevar) < do_realloc_needed_size) \
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
255 { \
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
256 if ((sizevar) < 32) \
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
257 (sizevar) = 32; \
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
258 while ((sizevar) < do_realloc_needed_size) \
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
259 (sizevar) *= 2; \
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
260 XREALLOC_ARRAY (basevar, type, (sizevar)); \
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
261 } \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 #ifdef ERROR_CHECK_MALLOC
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 void xfree_1 (void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 #define xfree(lvalue) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 void **xfree_ptr = (void **) &(lvalue); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 xfree_1 (*xfree_ptr); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 *xfree_ptr = (void *) 0xDEADBEEF; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 void xfree (void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 #endif /* ERROR_CHECK_MALLOC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 #ifndef PRINTF_ARGS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 # if defined (__GNUC__) && (__GNUC__ >= 2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 # define PRINTF_ARGS(string_index,first_to_check) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 __attribute__ ((format (printf, string_index, first_to_check)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 # else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 # define PRINTF_ARGS(string_index,first_to_check)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 # endif /* GNUC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 #ifndef DOESNT_RETURN
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 # if defined __GNUC__
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 # if ((__GNUC__ > 2) || (__GNUC__ == 2) && (__GNUC_MINOR__ >= 5))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
288 # define DOESNT_RETURN void
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 # define DECLARE_DOESNT_RETURN(decl) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
290 extern void decl __attribute__ ((noreturn))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 # define DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS(decl,str,idx) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 /* Should be able to state multiple independent __attribute__s, but \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 the losing syntax doesn't work that way, and screws losing cpp */ \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
294 extern void decl \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 __attribute__ ((noreturn, format (printf, str, idx)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 # else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 # define DOESNT_RETURN void volatile
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 # define DECLARE_DOESNT_RETURN(decl) extern void volatile decl
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 # define DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS(decl,str,idx) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 extern void volatile decl PRINTF_ARGS(str,idx)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 # endif /* GNUC 2.5 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 # else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 # define DOESNT_RETURN void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 # define DECLARE_DOESNT_RETURN(decl) extern void decl
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 # define DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS(decl,str,idx) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 extern void decl PRINTF_ARGS(str,idx)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 # endif /* GNUC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
310 /* No type has a greater alignment requirement than max_align_t.
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
311 (except perhaps for types we don't use, like long double) */
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
312 typedef union
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
313 {
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
314 struct { long l; } l;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
315 struct { void *p; } p;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
316 struct { void (*f)(void); } f;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
317 struct { double d; } d;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
318 } max_align_t;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
319
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 #ifndef ALIGNOF
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 # if defined (__GNUC__) && (__GNUC__ >= 2)
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
322 /* gcc has an extension that gives us exactly what we want. */
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
323 # define ALIGNOF(type) __alignof__ (type)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
324 # elif ! defined (__cplusplus)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
325 /* The following is mostly portable, except that:
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
326 - it doesn't work for inside out declarations like void (*) (void).
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
327 (so just call ALIGNOF with a typedef'ed name)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
328 - it doesn't work with C++. The C++ committee has decided,
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
329 in its infinite wisdom, that:
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
330 "Types must be declared in declarations, not in expressions." */
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
331 # define ALIGNOF(type) offsetof (struct { char c; type member; }, member)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 # else
456
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
333 /* C++ is annoying, but it has a big bag of tricks.
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
334 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
335 template<typename T> struct alignment_trick { char c; T member; };
456
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
336 # define ALIGNOF(type) offsetof (alignment_trick<type>, member)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 # endif
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
338 #endif /* ALIGNOF */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 #define ALIGN_SIZE(len, unit) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 ((((len) + (unit) - 1) / (unit)) * (unit))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 /* #### Yuck, this is kind of evil */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 #define ALIGN_PTR(ptr, unit) \
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
345 ((void *) ALIGN_SIZE ((size_t) (ptr), unit))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 #ifndef DO_NOTHING
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 #define DO_NOTHING do {} while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 #ifndef DECLARE_NOTHING
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 #define DECLARE_NOTHING struct nosuchstruct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 /* We define assert iff USE_ASSERTIONS or DEBUG_XEMACS is defined.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 Otherwise we define it to be empty. Quantify has shown that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 time the assert checks take is measurable so let's not include them
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 in production binaries. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 #ifdef USE_ASSERTIONS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 /* Highly dubious kludge */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 /* (thanks, Jamie, I feel better now -- ben) */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
363 void assert_failed (const char *, int, const char *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 # define abort() (assert_failed (__FILE__, __LINE__, "abort()"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 # define assert(x) ((x) ? (void) 0 : assert_failed (__FILE__, __LINE__, #x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 # ifdef DEBUG_XEMACS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 # define assert(x) ((x) ? (void) 0 : (void) abort ())
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 # else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 # define assert(x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 # endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 /*#ifdef DEBUG_XEMACS*/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 #define REGISTER
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 #define register
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 /*#else*/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 /*#define REGISTER register*/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 /*#endif*/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 /* typedefs */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
387 /* 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
388
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 /* We put typedefs here so that prototype declarations don't choke.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 Note that we don't actually declare the structures here (except
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 maybe for simple structures like Dynarrs); that keeps them private
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 to the routines that actually use them. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 typedef struct lstream Lstream;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
396 typedef int face_index;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 Dynarr_declare (struct face_cachel);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 } face_cachel_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
403 typedef int glyph_index;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 /* This is shared by process.h, events.h and others in future.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 See events.h for description */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 typedef unsigned int USID;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 Dynarr_declare (struct glyph_cachel);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 } glyph_cachel_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 struct buffer; /* "buffer.h" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 struct console; /* "console.h" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 struct device; /* "device.h" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 struct extent_fragment;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 struct extent;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 typedef struct extent *EXTENT;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 struct frame; /* "frame.h" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 struct window; /* "window.h" */
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
422 typedef struct Lisp_Event Lisp_Event; /* "events.h" */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
423 typedef struct Lisp_Face Lisp_Face; /* "faces.h" */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
424 typedef struct Lisp_Process Lisp_Process; /* "procimpl.h" */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 struct stat; /* <sys/stat.h> */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 typedef struct Lisp_Color_Instance Lisp_Color_Instance;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 typedef struct Lisp_Font_Instance Lisp_Font_Instance;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 typedef struct Lisp_Image_Instance Lisp_Image_Instance;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 typedef struct Lisp_Gui_Item Lisp_Gui_Item;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 struct display_line;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 struct display_glyph_area;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 struct display_box;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 struct redisplay_info;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 struct window_mirror;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 struct scrollbar_instance;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 struct font_metric_info;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437 struct face_cachel;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 struct console_type_entry;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 {
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
442 Dynarr_declare (Intbyte);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
443 } Intbyte_dynarr;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 Dynarr_declare (Extbyte);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 } Extbyte_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 Dynarr_declare (Emchar);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 } Emchar_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 Dynarr_declare (char);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 } char_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 typedef unsigned char unsigned_char;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 Dynarr_declare (unsigned char);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464 } unsigned_char_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 typedef unsigned long unsigned_long;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 Dynarr_declare (unsigned long);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 } unsigned_long_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 Dynarr_declare (int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 } int_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 {
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
479 Dynarr_declare (Charbpos);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
480 } Charbpos_dynarr;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 {
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
484 Dynarr_declare (Bytebpos);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
485 } Bytebpos_dynarr;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 Dynarr_declare (Charcount);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 } Charcount_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 Dynarr_declare (Bytecount);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 } Bytecount_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 Dynarr_declare (struct console_type_entry);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 } console_type_entry_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 enum run_hooks_condition
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504 RUN_HOOKS_TO_COMPLETION,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 RUN_HOOKS_UNTIL_SUCCESS,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 RUN_HOOKS_UNTIL_FAILURE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 #ifdef HAVE_TOOLBARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 enum toolbar_pos
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 TOP_TOOLBAR,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 BOTTOM_TOOLBAR,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 LEFT_TOOLBAR,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 RIGHT_TOOLBAR
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 enum edge_style
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 EDGE_ETCHED_IN,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522 EDGE_ETCHED_OUT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523 EDGE_BEVEL_IN,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524 EDGE_BEVEL_OUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527 #ifndef ERROR_CHECK_TYPECHECK
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 typedef enum error_behavior
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531 ERROR_ME,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532 ERROR_ME_NOT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533 ERROR_ME_WARN
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
534 } Error_Behavior;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 #define ERRB_EQ(a, b) ((a) == (b))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 /* By defining it like this, we provide strict type-checking
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 for code that lazily uses ints. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543 typedef struct _error_behavior_struct_
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 int really_unlikely_name_to_have_accidentally_in_a_non_errb_structure;
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
546 } Error_Behavior;
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
547
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
548 extern Error_Behavior ERROR_ME;
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
549 extern Error_Behavior ERROR_ME_NOT;
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
550 extern Error_Behavior ERROR_ME_WARN;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
551
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
552 #define ERRB_EQ(a, b) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553 ((a).really_unlikely_name_to_have_accidentally_in_a_non_errb_structure == \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
554 (b).really_unlikely_name_to_have_accidentally_in_a_non_errb_structure)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
555
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
556 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 enum munge_me_out_the_door
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 MUNGE_ME_FUNCTION_KEY,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561 MUNGE_ME_KEY_TRANSLATION
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566 /* Definition of Lisp_Object data type */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 /* Define the fundamental Lisp data structures */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
570
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571 /* This is the set of Lisp data types */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573 enum Lisp_Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
575 Lisp_Type_Record,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
576 Lisp_Type_Int_Even,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577 Lisp_Type_Char,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578 Lisp_Type_Int_Odd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 #define POINTER_TYPE_P(type) ((type) == Lisp_Type_Record)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583 /* Overridden by m/next.h */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584 #ifndef ASSERT_VALID_POINTER
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585 # define ASSERT_VALID_POINTER(pnt) (assert ((((EMACS_UINT) pnt) & 3) == 0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 #define GCMARKBITS 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589 #define GCTYPEBITS 2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 #define GCBITS 2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 #define INT_GCBITS 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
593 #define INT_VALBITS (BITS_PER_EMACS_INT - INT_GCBITS)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594 #define VALBITS (BITS_PER_EMACS_INT - GCBITS)
542
2e265ae71eed [xemacs-hg @ 2001-05-17 09:52:16 by yoshiki]
yoshiki
parents: 528
diff changeset
595 #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
596 #define EMACS_INT_MIN (-(EMACS_INT_MAX) - 1)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598 #ifdef USE_UNION_TYPE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599 # include "lisp-union.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600 #else /* !USE_UNION_TYPE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601 # include "lisp-disunion.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602 #endif /* !USE_UNION_TYPE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 #define XPNTR(x) ((void *) XPNTRVAL(x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606 /* WARNING WARNING WARNING. You must ensure on your own that proper
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607 GC protection is provided for the elements in this array. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 Dynarr_declare (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 } Lisp_Object_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
613 typedef struct
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
614 {
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
615 Dynarr_declare (Lisp_Object *);
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
616 } Lisp_Object_ptr_dynarr;
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
617
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
618 /* Close your eyes now lest you vomit or spontaneously combust ... */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
619
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
620 #define HACKEQ_UNSAFE(obj1, obj2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
621 (EQ (obj1, obj2) || (!POINTER_TYPE_P (XTYPE (obj1)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622 && !POINTER_TYPE_P (XTYPE (obj2)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623 && XCHAR_OR_INT (obj1) == XCHAR_OR_INT (obj2)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
625 #ifdef DEBUG_XEMACS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
626 extern int debug_issue_ebola_notices;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
627 int eq_with_ebola_notice (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628 #define EQ_WITH_EBOLA_NOTICE(obj1, obj2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629 (debug_issue_ebola_notices ? eq_with_ebola_notice (obj1, obj2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630 : EQ (obj1, obj2))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632 #define EQ_WITH_EBOLA_NOTICE(obj1, obj2) EQ (obj1, obj2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 /* OK, you can open them again */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 /************************************************************************/
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
639 /** Definitions of basic Lisp objects **/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 #include "lrecord.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
644 /*------------------------------ unbound -------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646 /* Qunbound is a special Lisp_Object (actually of type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 symbol-value-forward), that can never be visible to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648 the Lisp caller and thus can be used in the C code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 to mean "no such value". */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 #define UNBOUNDP(val) EQ (val, Qunbound)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
653 /*------------------------------- cons ---------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655 /* 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
656
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657 struct Lisp_Cons
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 struct lrecord_header lheader;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660 Lisp_Object car, cdr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662 typedef struct Lisp_Cons Lisp_Cons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 #if 0 /* FSFmacs */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 /* 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
666 /* This is not really in use now */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 struct Lisp_Buffer_Cons
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670 Lisp_Object car, cdr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 struct buffer *buffer;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
672 int charbpos;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676 DECLARE_LRECORD (cons, Lisp_Cons);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
677 #define XCONS(x) XRECORD (x, cons, Lisp_Cons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678 #define XSETCONS(x, p) XSETRECORD (x, p, cons)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
679 #define wrap_cons(p) wrap_record (p, cons)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680 #define CONSP(x) RECORDP (x, cons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681 #define CHECK_CONS(x) CHECK_RECORD (x, cons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682 #define CONCHECK_CONS(x) CONCHECK_RECORD (x, cons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
683
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684 #define CONS_MARKED_P(c) MARKED_RECORD_HEADER_P(&((c)->lheader))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685 #define MARK_CONS(c) MARK_RECORD_HEADER (&((c)->lheader))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687 extern Lisp_Object Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
688
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
689 #define NILP(x) EQ (x, Qnil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
690 #define XCAR(a) (XCONS (a)->car)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
691 #define XCDR(a) (XCONS (a)->cdr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
692 #define LISTP(x) (CONSP(x) || NILP(x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
693
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
694 #define CHECK_LIST(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695 if (!LISTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696 dead_wrong_type_argument (Qlistp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
697 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
698
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
699 #define CONCHECK_LIST(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700 if (!LISTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
701 x = wrong_type_argument (Qlistp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
703
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
704 /*---------------------- list traversal macros -------------------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
705
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
706 /* 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
707 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
708
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
709 There are two kinds of macros, those requiring surrounding braces, and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
710 those not requiring this. Which type of macro will be indicated.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
711 The general format for using a brace-requiring macro is
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
712
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
713 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
714 LIST_LOOP_3 (elt, list, tail)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
715 execute_code_here;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
716 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
717
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
718 or
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
719
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
720 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
721 LIST_LOOP_3 (elt, list, tail)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
722 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
723 execute_code_here;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
724 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
725 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
726
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
727 You can put variable declarations between the brace and beginning of
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
728 macro, but NOTHING ELSE.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
729
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
730 The brace-requiring macros typically declare themselves any arguments
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
731 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
732 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
733 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
734 macros.)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
735 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
736
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
737 /* 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
738 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
739 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
740 no circularities), and those that handle "external" lists, where the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
741 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
742 the names: those with "EXTERNAL_" work with external lists, and those
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
743 without this prefix work with internal lists. The internal-list
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
744 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
745 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
746 malformed-list error or a circular-list error.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
747
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
748 Note also that the simplest external list iterator, EXTERNAL_LIST_LOOP,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
749 does *NOT* check for circularities. Therefore, make sure you call
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
750 QUIT each iteration or so. However, it's probably easier just to use
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
751 EXTERNAL_LIST_LOOP_2, which is easier to use in any case.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
752 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
753
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
754 /* LIST_LOOP and EXTERNAL_LIST_LOOP are the simplest macros. They don't
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
755 require brace surrounding, and iterate through a list, which may or may
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
756 not known to be syntactically correct. EXTERNAL_LIST_LOOP is for those
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
757 not known to be correct, and it detects and signals a malformed list
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
758 error when encountering a problem. Circularities, however, are not
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
759 handled, and cause looping forever, so make sure to include a QUIT.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
760 These functions also accept two args, TAIL (set progressively to each
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
761 cons starting with the first), and LIST, the list to iterate over.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
762 TAIL needs to be defined by the program.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
763
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
764 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
765 (tail), or destructively modify the list using XSETCAR (tail,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
766 ...). */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
767
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
768 #define LIST_LOOP(tail, list) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
769 for (tail = list; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
770 !NILP (tail); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
771 tail = XCDR (tail))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
772
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
773 #define EXTERNAL_LIST_LOOP(tail, list) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
774 for (tail = list; !NILP (tail); tail = XCDR (tail)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
775 if (!CONSP (tail)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
776 signal_malformed_list_error (list); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
777 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
778
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
779 /* The following macros are the "core" macros for list traversal.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
780
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
781 *** ALL OF THESE MACROS MUST BE DECLARED INSIDE BRACES -- SEE ABOVE. ***
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
782
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
783 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
784 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
785 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
786 from LIST.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
787
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
788 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
789 argument TAIL, another automatically-declared variable. At each iteration,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
790 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
791
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
792 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
793 LEN argument, again automatically declared, which counts the number of
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
794 iterations gone by. It is 0 during the first iteration.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
795
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
796 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
797 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
798 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
799 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
800
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
801 #define LIST_LOOP_2(elt, list) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
802 LIST_LOOP_3(elt, list, unused_tail_##elt)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
803
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
804 #define LIST_LOOP_3(elt, list, tail) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
805 Lisp_Object elt, tail; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
806 for (tail = list; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
807 NILP (tail) ? \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
808 0 : (elt = XCAR (tail), 1); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
809 tail = XCDR (tail))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
810
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
811 /* The following macros are for traversing lisp lists.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
812 Signal an error if LIST is not properly acyclic and nil-terminated.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
813
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
814 Use tortoise/hare algorithm to check for cycles, but only if it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
815 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
816 faster than the tortoise; it even gets a head start! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
817
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
818 /* Optimized and safe macros for looping over external lists. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
819 #define CIRCULAR_LIST_SUSPICION_LENGTH 1024
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
820
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
821 #define EXTERNAL_LIST_LOOP_1(list) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
822 Lisp_Object ELL1_elt, ELL1_hare, ELL1_tortoise; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
823 EMACS_INT ELL1_len; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
824 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
825 ELL1_tortoise, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
826
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
827 #define EXTERNAL_LIST_LOOP_2(elt, list) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
828 Lisp_Object elt, hare_##elt, tortoise_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
829 EMACS_INT len_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
830 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len_##elt, hare_##elt, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
831 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
832
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
833 #define EXTERNAL_LIST_LOOP_3(elt, list, tail) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
834 Lisp_Object elt, tail, tortoise_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
835 EMACS_INT len_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
836 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len_##elt, tail, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
837 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
838
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
839 #define EXTERNAL_LIST_LOOP_4_NO_DECLARE(elt, list, tail, len) \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
840 Lisp_Object tortoise_##elt; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
841 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len, tail, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
842 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
843
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
844 #define EXTERNAL_LIST_LOOP_4(elt, list, tail, len) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
845 Lisp_Object elt, tail, tortoise_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
846 EMACS_INT len; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
847 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len, tail, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
848 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
849
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
850
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
851 #define PRIVATE_EXTERNAL_LIST_LOOP_6(elt, list, len, hare, \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
852 tortoise, suspicion_length) \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
853 for (tortoise = hare = list, len = 0; \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
854 \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
855 (CONSP (hare) ? ((elt = XCAR (hare)), 1) : \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
856 (NILP (hare) ? 0 : \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
857 (signal_malformed_list_error (list), 0))); \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
858 \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
859 hare = XCDR (hare), \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
860 (void) \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
861 ((++len > suspicion_length) \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
862 && \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
863 ((((len & 1) != 0) && (tortoise = XCDR (tortoise), 0)), \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
864 (EQ (hare, tortoise) && (signal_circular_list_error (list), 0)))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
865
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
866 /* GET_LIST_LENGTH and GET_EXTERNAL_LIST_LENGTH:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
867
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
868 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
869 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
870 be declared by the caller). Circularities are trapped in external lists
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
871 (and cause errors). Neither macro need be declared inside brackets. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
872
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
873 #define GET_LIST_LENGTH(list, len) do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
874 Lisp_Object GLL_tail; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
875 for (GLL_tail = list, len = 0; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
876 !NILP (GLL_tail); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
877 GLL_tail = XCDR (GLL_tail), ++len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
878 DO_NOTHING; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
879 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
880
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
881 #define GET_EXTERNAL_LIST_LENGTH(list, len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
882 do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
883 Lisp_Object GELL_elt, GELL_tail; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
884 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
885 ; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
886 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
887
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
888 /* 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
889 be deleting the current element out of the list --
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
890 will abort() if the list is not in valid format */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
891 #define LIST_LOOP_DELETING(consvar, nextconsvar, list) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
892 for (consvar = list; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
893 !NILP (consvar) ? (nextconsvar = XCDR (consvar), 1) :0; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
894 consvar = nextconsvar)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
895
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
896 /* LIST_LOOP_DELETE_IF and EXTERNAL_LIST_LOOP_DELETE_IF:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
897
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
898 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
899 external list, according to which macro is used) satisfying
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
900 CONDITION, a C expression referring to variable ELT. ELT is
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
901 automatically declared. Circularities are trapped in external
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
902 lists (and cause errors). Neither macro need be declared inside
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
903 brackets. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
904
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
905 #define LIST_LOOP_DELETE_IF(elt, list, condition) do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
906 /* Do not use ##list when creating new variables because \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
907 that may not be just a variable name. */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
908 Lisp_Object prev_tail_##elt = Qnil; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
909 LIST_LOOP_3 (elt, list, tail_##elt) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
910 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
911 if (condition) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
912 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
913 if (NILP (prev_tail_##elt)) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
914 list = XCDR (tail_##elt); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
915 else \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
916 XCDR (prev_tail_##elt) = XCDR (tail_##elt); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
917 } \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
918 else \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
919 prev_tail_##elt = tail_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
920 } \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
921 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
922
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
923 #define EXTERNAL_LIST_LOOP_DELETE_IF(elt, list, condition) do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
924 Lisp_Object prev_tail_##elt = Qnil; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
925 EXTERNAL_LIST_LOOP_4 (elt, list, tail_##elt, len_##elt) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
926 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
927 if (condition) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
928 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
929 if (NILP (prev_tail_##elt)) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
930 list = XCDR (tail_##elt); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
931 else \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
932 XCDR (prev_tail_##elt) = XCDR (tail_##elt); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
933 /* Keep tortoise from ever passing hare. */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
934 len_##elt = 0; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
935 } \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
936 else \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
937 prev_tail_##elt = tail_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
938 } \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
939 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
940
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
941
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
942 /* Macros for looping over external alists.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
943
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
944 *** ALL OF THESE MACROS MUST BE DECLARED INSIDE BRACES -- SEE ABOVE. ***
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
945
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
946 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
947 assumes the elements are aconses (the elements in an alist) and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
948 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
949 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
950 ELT_CDR are automatically declared.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
951
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
952 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
953 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
954 declared.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
955
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
956 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
957 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
958 declared.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
959
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
960 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
961 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
962 manually.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
963 */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
964
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
965 /* Optimized and safe macros for looping over external alists. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
966 #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
967 Lisp_Object elt, elt_car, elt_cdr; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
968 Lisp_Object hare_##elt, tortoise_##elt; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
969 EMACS_INT len_##elt; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
970 PRIVATE_EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
971 len_##elt, hare_##elt, tortoise_##elt, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
972 CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
973
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
974 #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
975 Lisp_Object elt, elt_car, elt_cdr, tail; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
976 Lisp_Object tortoise_##elt; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
977 EMACS_INT len_##elt; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
978 PRIVATE_EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
979 len_##elt, tail, tortoise_##elt, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
980 CIRCULAR_LIST_SUSPICION_LENGTH) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
981
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
982 #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
983 Lisp_Object elt, elt_car, elt_cdr, tail; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
984 EMACS_INT len; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
985 Lisp_Object tortoise_##elt; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
986 PRIVATE_EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
987 len, tail, tortoise_##elt, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
988 CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
989
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
990 #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
991 tail, len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
992 Lisp_Object tortoise_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
993 PRIVATE_EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
994 len, tail, tortoise_##elt, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
995 CIRCULAR_LIST_SUSPICION_LENGTH)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
996
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
997
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
998 #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
999 hare, tortoise, suspicion_length) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1000 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len, hare, tortoise, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1001 suspicion_length) \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1002 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
1003 continue; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1004 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1005
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1006 /* Macros for looping over external property lists.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1007
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1008 *** ALL OF THESE MACROS MUST BE DECLARED INSIDE BRACES -- SEE ABOVE. ***
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1009
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1010 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
1011 be a property list, consisting of alternating pairs of keys
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1012 (typically symbols or keywords) and values. Each iteration
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1013 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
1014 KEY and VALUE respectively. Malformed lists and circularities are
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1015 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
1016 of elements also signal an error.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1017
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1018 EXTERNAL_PROPERTY_LIST_LOOP_4 adds a TAIL argument to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1019 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
1020 and again TAIL is automatically declared.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1021
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1022 EXTERNAL_PROPERTY_LIST_LOOP_5 adds a LEN argument to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1023 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
1024 and again LEN is automatically declared. Note that in this case,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1025 LEN counts the iterations, NOT the total number of list elements
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1026 processed, which is 2 * LEN.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1027
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1028 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
1029 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
1030 must be declared manually. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1031
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1032 /* Optimized and safe macros for looping over external property lists. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1033 #define EXTERNAL_PROPERTY_LIST_LOOP_3(key, value, list) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1034 Lisp_Object key, value, hare_##key, tortoise_##key; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1035 EMACS_INT len_##key; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1036 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len_##key, hare_##key, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1037 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1038
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1039 #define EXTERNAL_PROPERTY_LIST_LOOP_4(key, value, list, tail) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1040 Lisp_Object key, value, tail, tortoise_##key; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1041 EMACS_INT len_##key; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1042 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len_##key, tail, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1043 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1044
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1045 #define EXTERNAL_PROPERTY_LIST_LOOP_5(key, value, list, tail, len) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1046 Lisp_Object key, value, tail, tortoise_##key; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1047 EMACS_INT len; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1048 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len, tail, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1049 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1050
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1051 #define EXTERNAL_PROPERTY_LIST_LOOP_5_NO_DECLARE(key, value, list, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1052 tail, len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1053 Lisp_Object tortoise_##key; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1054 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len, tail, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1055 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1056
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1057
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1058 #define EXTERNAL_PROPERTY_LIST_LOOP_7(key, value, list, len, hare, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1059 tortoise, suspicion_length) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1060 for (tortoise = hare = list, len = 0; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1061 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1062 ((CONSP (hare) && \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1063 (key = XCAR (hare), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1064 hare = XCDR (hare), \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1065 (CONSP (hare) ? 1 : \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1066 (signal_malformed_property_list_error (list), 0)))) ? \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1067 (value = XCAR (hare), 1) : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1068 (NILP (hare) ? 0 : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1069 (signal_malformed_property_list_error (list), 0))); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1070 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1071 hare = XCDR (hare), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1072 ((++len < suspicion_length) ? \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1073 ((void) 0) : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1074 (((len & 1) ? \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1075 ((void) (tortoise = XCDR (XCDR (tortoise)))) : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1076 ((void) 0)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1077 , \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1078 (EQ (hare, tortoise) ? \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1079 ((void) signal_circular_property_list_error (list)) : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1080 ((void) 0)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1081
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1082 /* For a property list (alternating keywords/values) that may not be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1083 in valid list format -- will signal an error if the list is not in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1084 valid format. CONSVAR is used to keep track of the iterations
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1085 without modifying PLIST.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1086
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1087 We have to be tricky to still keep the same C format.*/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1088 #define EXTERNAL_PROPERTY_LIST_LOOP(tail, key, value, plist) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1089 for (tail = plist; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1090 (CONSP (tail) && CONSP (XCDR (tail)) ? \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1091 (key = XCAR (tail), value = XCAR (XCDR (tail))) : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1092 (key = Qunbound, value = Qunbound)), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1093 !NILP (tail); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1094 tail = XCDR (XCDR (tail))) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1095 if (UNBOUNDP (key)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1096 Fsignal (Qmalformed_property_list, list1 (plist)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1097 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1098
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1099 #define PROPERTY_LIST_LOOP(tail, key, value, plist) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1100 for (tail = plist; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1101 NILP (tail) ? 0 : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1102 (key = XCAR (tail), tail = XCDR (tail), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1103 value = XCAR (tail), tail = XCDR (tail), 1); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1104 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1105
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1106 /* Return 1 if LIST is properly acyclic and nil-terminated, else 0. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1107 INLINE_HEADER int TRUE_LIST_P (Lisp_Object object);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1108 INLINE_HEADER int
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1109 TRUE_LIST_P (Lisp_Object object)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1110 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1111 Lisp_Object hare, tortoise;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1112 EMACS_INT len;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1113
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1114 for (hare = tortoise = object, len = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1115 CONSP (hare);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1116 hare = XCDR (hare), len++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1117 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1118 if (len < CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1119 continue;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1120
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1121 if (len & 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1122 tortoise = XCDR (tortoise);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1123 else if (EQ (hare, tortoise))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1124 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1125 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1126
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1127 return NILP (hare);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1128 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1129
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1130 /* Signal an error if LIST is not properly acyclic and nil-terminated. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1131 #define CHECK_TRUE_LIST(list) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1132 Lisp_Object CTL_list = (list); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1133 Lisp_Object CTL_hare, CTL_tortoise; \
436
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
1134 EMACS_INT CTL_len; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1135 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1136 for (CTL_hare = CTL_tortoise = CTL_list, CTL_len = 0; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1137 CONSP (CTL_hare); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1138 CTL_hare = XCDR (CTL_hare), CTL_len++) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1139 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1140 if (CTL_len < CIRCULAR_LIST_SUSPICION_LENGTH) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1141 continue; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1142 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1143 if (CTL_len & 1) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1144 CTL_tortoise = XCDR (CTL_tortoise); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1145 else if (EQ (CTL_hare, CTL_tortoise)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1146 Fsignal (Qcircular_list, list1 (CTL_list)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1147 } \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1148 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1149 if (! NILP (CTL_hare)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1150 signal_malformed_list_error (CTL_list); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1151 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1152
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1153 /*------------------------------ string --------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1154
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1155 struct Lisp_String
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1156 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1157 struct lrecord_header lheader;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1158 Bytecount size;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1159 Intbyte *data;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1160 Lisp_Object plist;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1161 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1162 typedef struct Lisp_String Lisp_String;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1163
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1164 DECLARE_LRECORD (string, Lisp_String);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1165 #define XSTRING(x) XRECORD (x, string, Lisp_String)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1166 #define XSETSTRING(x, p) XSETRECORD (x, p, string)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
1167 #define wrap_string(p) wrap_record (p, string)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1168 #define STRINGP(x) RECORDP (x, string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1169 #define CHECK_STRING(x) CHECK_RECORD (x, string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1170 #define CONCHECK_STRING(x) CONCHECK_RECORD (x, string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1171
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1172 #ifdef MULE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1173
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1174 Charcount bytecount_to_charcount (const Intbyte *ptr, Bytecount len);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1175 Bytecount charcount_to_bytecount (const Intbyte *ptr, Charcount len);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1176
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1177 #else /* not MULE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1178
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1179 # define bytecount_to_charcount(ptr, len) (len)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1180 # define charcount_to_bytecount(ptr, len) (len)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1181
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1182 #endif /* not MULE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1183
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1184 #define string_length(s) ((s)->size)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1185 #define XSTRING_LENGTH(s) string_length (XSTRING (s))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1186 #define XSTRING_CHAR_LENGTH(s) string_char_length (XSTRING (s))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1187 #define string_data(s) ((s)->data + 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1188 #define XSTRING_DATA(s) string_data (XSTRING (s))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1189 #define string_byte(s, i) ((s)->data[i] + 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1190 #define XSTRING_BYTE(s, i) string_byte (XSTRING (s), i)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1191 #define string_byte_addr(s, i) (&((s)->data[i]))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1192 #define set_string_length(s, len) ((void) ((s)->size = (len)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1193 #define set_string_data(s, ptr) ((void) ((s)->data = (ptr)))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1194 #define set_string_byte(s, i, b) ((void) ((s)->data[i] = (b)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1195
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1196 void resize_string (Lisp_String *s, Bytecount pos, Bytecount delta);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1197
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1198 #ifdef MULE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1199
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1200 INLINE_HEADER Charcount string_char_length (Lisp_String *s);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1201 INLINE_HEADER Charcount
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1202 string_char_length (Lisp_String *s)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1203 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1204 return bytecount_to_charcount (string_data (s), string_length (s));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1205 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1206
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1207 # define string_char(s, i) charptr_emchar_n (string_data (s), i)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1208 # define string_char_addr(s, i) charptr_n_addr (string_data (s), i)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1209 void set_string_char (Lisp_String *s, Charcount i, Emchar c);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1210
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1211 #else /* not MULE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1212
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1213 # define string_char_length(s) string_length (s)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1214 # define string_char(s, i) ((Emchar) string_byte (s, i))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1215 # define string_char_addr(s, i) string_byte_addr (s, i)
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1216 # define set_string_char(s, i, c) set_string_byte (s, i, (Intbyte)c)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1217
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1218 #endif /* not MULE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1219
456
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1220 /* 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
1221 variable-length array field. (this is known as the "struct hack") */
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1222 /* Implementation: in practice, structtype and fieldtype usually have
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1223 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
1224 ALIGN_SIZE to be absolutely sure of getting the correct alignment.
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1225 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
1226 only a very stupid compiler would fail to correctly simplify. */
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1227 #define FLEXIBLE_ARRAY_STRUCT_SIZEOF(structtype, \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1228 fieldtype, \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1229 fieldname, \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1230 array_length) \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1231 (ALIGNOF (structtype) == ALIGNOF (fieldtype) \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1232 ? (offsetof (structtype, fieldname) + \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1233 (offsetof (structtype, fieldname[1]) - \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1234 offsetof (structtype, fieldname[0])) * \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1235 (array_length)) \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1236 : (ALIGN_SIZE \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1237 ((offsetof (structtype, fieldname) + \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1238 (offsetof (structtype, fieldname[1]) - \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1239 offsetof (structtype, fieldname[0])) * \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1240 (array_length)), \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1241 ALIGNOF (structtype))))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1242
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1243 /*------------------------------ vector --------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1244
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1245 struct Lisp_Vector
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1246 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1247 struct lcrecord_header header;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1248 long size;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1249 /* next is now chained through v->contents[size], terminated by Qzero.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1250 This means that pure vectors don't need a "next" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1251 /* struct Lisp_Vector *next; */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1252 Lisp_Object contents[1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1253 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1254 typedef struct Lisp_Vector Lisp_Vector;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1255
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1256 DECLARE_LRECORD (vector, Lisp_Vector);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1257 #define XVECTOR(x) XRECORD (x, vector, Lisp_Vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1258 #define XSETVECTOR(x, p) XSETRECORD (x, p, vector)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
1259 #define wrap_vector(p) wrap_record (p, vector)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1260 #define VECTORP(x) RECORDP (x, vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1261 #define CHECK_VECTOR(x) CHECK_RECORD (x, vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1262 #define CONCHECK_VECTOR(x) CONCHECK_RECORD (x, vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1263
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1264 #define vector_length(v) ((v)->size)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1265 #define XVECTOR_LENGTH(s) vector_length (XVECTOR (s))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1266 #define vector_data(v) ((v)->contents)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1267 #define XVECTOR_DATA(s) vector_data (XVECTOR (s))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1268
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1269 /*---------------------------- bit vectors -----------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1270
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1271 #if (LONGBITS < 16)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1272 #error What the hell?!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1273 #elif (LONGBITS < 32)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1274 # define LONGBITS_LOG2 4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1275 # define LONGBITS_POWER_OF_2 16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1276 #elif (LONGBITS < 64)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1277 # define LONGBITS_LOG2 5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1278 # define LONGBITS_POWER_OF_2 32
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1279 #elif (LONGBITS < 128)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1280 # define LONGBITS_LOG2 6
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1281 # define LONGBITS_POWER_OF_2 64
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1282 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1283 #error You really have 128-bit integers?!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1284 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1285
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1286 struct Lisp_Bit_Vector
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1287 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1288 struct lrecord_header lheader;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1289 Lisp_Object next;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1290 Elemcount size;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1291 unsigned long bits[1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1292 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1293 typedef struct Lisp_Bit_Vector Lisp_Bit_Vector;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1294
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1295 DECLARE_LRECORD (bit_vector, Lisp_Bit_Vector);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1296 #define XBIT_VECTOR(x) XRECORD (x, bit_vector, Lisp_Bit_Vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1297 #define XSETBIT_VECTOR(x, p) XSETRECORD (x, p, bit_vector)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
1298 #define wrap_bit_vector(p) wrap_record (p, bit_vector)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1299 #define BIT_VECTORP(x) RECORDP (x, bit_vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1300 #define CHECK_BIT_VECTOR(x) CHECK_RECORD (x, bit_vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1301 #define CONCHECK_BIT_VECTOR(x) CONCHECK_RECORD (x, bit_vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1302
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1303 #define BITP(x) (INTP (x) && (XINT (x) == 0 || XINT (x) == 1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1304
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1305 #define CHECK_BIT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1306 if (!BITP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1307 dead_wrong_type_argument (Qbitp, x);\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1308 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1309
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1310 #define CONCHECK_BIT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1311 if (!BITP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1312 x = wrong_type_argument (Qbitp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1313 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1314
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1315 #define bit_vector_length(v) ((v)->size)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1316 #define bit_vector_next(v) ((v)->next)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1317
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1318 INLINE_HEADER int bit_vector_bit (Lisp_Bit_Vector *v, Elemcount n);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1319 INLINE_HEADER int
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1320 bit_vector_bit (Lisp_Bit_Vector *v, Elemcount n)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1321 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1322 return ((v->bits[n >> LONGBITS_LOG2] >> (n & (LONGBITS_POWER_OF_2 - 1)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1323 & 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1324 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1325
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1326 INLINE_HEADER void set_bit_vector_bit (Lisp_Bit_Vector *v, Elemcount n, int value);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1327 INLINE_HEADER void
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1328 set_bit_vector_bit (Lisp_Bit_Vector *v, Elemcount n, int value)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1329 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1330 if (value)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1331 v->bits[n >> LONGBITS_LOG2] |= (1UL << (n & (LONGBITS_POWER_OF_2 - 1)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1332 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1333 v->bits[n >> LONGBITS_LOG2] &= ~(1UL << (n & (LONGBITS_POWER_OF_2 - 1)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1334 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1335
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1336 /* Number of longs required to hold LEN bits */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1337 #define BIT_VECTOR_LONG_STORAGE(len) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1338 (((len) + LONGBITS_POWER_OF_2 - 1) >> LONGBITS_LOG2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1339
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1340 /*------------------------------ symbol --------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1341
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1342 typedef struct Lisp_Symbol Lisp_Symbol;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1343 struct Lisp_Symbol
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1344 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1345 struct lrecord_header lheader;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1346 /* next symbol in this obarray bucket */
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1347 Lisp_Symbol *next;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1348 Lisp_String *name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1349 Lisp_Object value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1350 Lisp_Object function;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1351 Lisp_Object plist;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1352 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1353
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1354 #define SYMBOL_IS_KEYWORD(sym) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1355 ((string_byte (symbol_name (XSYMBOL (sym)), 0) == ':') \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1356 && EQ (sym, oblookup (Vobarray, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1357 string_data (symbol_name (XSYMBOL (sym))), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1358 string_length (symbol_name (XSYMBOL (sym))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1359 #define KEYWORDP(obj) (SYMBOLP (obj) && SYMBOL_IS_KEYWORD (obj))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1360
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1361 DECLARE_LRECORD (symbol, Lisp_Symbol);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1362 #define XSYMBOL(x) XRECORD (x, symbol, Lisp_Symbol)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1363 #define XSETSYMBOL(x, p) XSETRECORD (x, p, symbol)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
1364 #define wrap_symbol(p) wrap_record (p, symbol)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1365 #define SYMBOLP(x) RECORDP (x, symbol)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1366 #define CHECK_SYMBOL(x) CHECK_RECORD (x, symbol)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1367 #define CONCHECK_SYMBOL(x) CONCHECK_RECORD (x, symbol)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1368
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1369 #define symbol_next(s) ((s)->next)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1370 #define symbol_name(s) ((s)->name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1371 #define symbol_value(s) ((s)->value)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1372 #define symbol_function(s) ((s)->function)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1373 #define symbol_plist(s) ((s)->plist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1374
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1375 /*------------------------------- subr ---------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1376
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1377 typedef Lisp_Object (*lisp_fn_t) (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1378
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1379 struct Lisp_Subr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1380 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1381 struct lrecord_header lheader;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1382 short min_args;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1383 short max_args;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1384 const char *prompt;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1385 const char *doc;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1386 const char *name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1387 lisp_fn_t subr_fn;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1388 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1389 typedef struct Lisp_Subr Lisp_Subr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1390
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1391 DECLARE_LRECORD (subr, Lisp_Subr);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1392 #define XSUBR(x) XRECORD (x, subr, Lisp_Subr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1393 #define XSETSUBR(x, p) XSETRECORD (x, p, subr)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
1394 #define wrap_subr(p) wrap_record (p, subr)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1395 #define SUBRP(x) RECORDP (x, subr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1396 #define CHECK_SUBR(x) CHECK_RECORD (x, subr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1397 #define CONCHECK_SUBR(x) CONCHECK_RECORD (x, subr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1398
436
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
1399 #define subr_function(subr) ((subr)->subr_fn)
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
1400 #define SUBR_FUNCTION(subr,max_args) \
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
1401 ((Lisp_Object (*) (EXFUN_##max_args)) (subr)->subr_fn)
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
1402 #define subr_name(subr) ((subr)->name)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1403
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1404 /*------------------------------ marker --------------------------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1405
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1406
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1407 typedef struct Lisp_Marker Lisp_Marker;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1408 struct Lisp_Marker
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1409 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1410 struct lrecord_header lheader;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1411 Lisp_Marker *next;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1412 Lisp_Marker *prev;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1413 struct buffer *buffer;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1414 Membpos membpos;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1415 char insertion_type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1416 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1417
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1418 DECLARE_LRECORD (marker, Lisp_Marker);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1419 #define XMARKER(x) XRECORD (x, marker, Lisp_Marker)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1420 #define XSETMARKER(x, p) XSETRECORD (x, p, marker)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
1421 #define wrap_marker(p) wrap_record (p, marker)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1422 #define MARKERP(x) RECORDP (x, marker)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1423 #define CHECK_MARKER(x) CHECK_RECORD (x, marker)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1424 #define CONCHECK_MARKER(x) CONCHECK_RECORD (x, marker)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1425
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1426 /* The second check was looking for GCed markers still in use */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1427 /* if (INTP (XMARKER (x)->lheader.next.v)) abort (); */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1429 #define marker_next(m) ((m)->next)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1430 #define marker_prev(m) ((m)->prev)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1431
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1432 /*------------------------------- char ---------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1433
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1434 #define CHARP(x) (XTYPE (x) == Lisp_Type_Char)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1435
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1436 #ifdef ERROR_CHECK_TYPECHECK
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1437
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1438 INLINE_HEADER Emchar XCHAR (Lisp_Object obj);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1439 INLINE_HEADER Emchar
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1440 XCHAR (Lisp_Object obj)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1441 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1442 assert (CHARP (obj));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1443 return XCHARVAL (obj);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1444 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1445
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1446 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1447
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1448 #define XCHAR(x) ((Emchar)XCHARVAL (x))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1449
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1450 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1451
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1452 #define CHECK_CHAR(x) CHECK_NONRECORD (x, Lisp_Type_Char, Qcharacterp)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1453 #define CONCHECK_CHAR(x) CONCHECK_NONRECORD (x, Lisp_Type_Char, Qcharacterp)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1454
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1455
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1456 /*------------------------------ float ---------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1457
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1458 #ifdef LISP_FLOAT_TYPE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1459
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1460 /* Note: the 'unused_next_' field exists only to ensure that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1461 `next' pointer fits within the structure, for the purposes of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1462 free list. This makes a difference in the unlikely case of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1463 sizeof(double) being smaller than sizeof(void *). */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1464
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1465 struct Lisp_Float
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1466 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1467 struct lrecord_header lheader;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1468 union { double d; struct Lisp_Float *unused_next_; } data;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1469 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1470 typedef struct Lisp_Float Lisp_Float;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1471
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1472 DECLARE_LRECORD (float, Lisp_Float);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1473 #define XFLOAT(x) XRECORD (x, float, Lisp_Float)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1474 #define XSETFLOAT(x, p) XSETRECORD (x, p, float)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
1475 #define wrap_float(p) wrap_record (p, float)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1476 #define FLOATP(x) RECORDP (x, float)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1477 #define CHECK_FLOAT(x) CHECK_RECORD (x, float)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1478 #define CONCHECK_FLOAT(x) CONCHECK_RECORD (x, float)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1479
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1480 #define float_data(f) ((f)->data.d)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1481 #define XFLOAT_DATA(x) float_data (XFLOAT (x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1482
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1483 #define XFLOATINT(n) extract_float (n)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1484
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1485 #define CHECK_INT_OR_FLOAT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1486 if (!INT_OR_FLOATP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1487 dead_wrong_type_argument (Qnumberp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1488 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1489
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1490 #define CONCHECK_INT_OR_FLOAT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1491 if (!INT_OR_FLOATP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1492 x = wrong_type_argument (Qnumberp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1493 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1494
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1495 # define INT_OR_FLOATP(x) (INTP (x) || FLOATP (x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1496
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1497 #else /* not LISP_FLOAT_TYPE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1498
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1499 #define XFLOAT(x) --- error! No float support. ---
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1500 #define XSETFLOAT(x, p) --- error! No float support. ---
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1501 #define FLOATP(x) 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1502 #define CHECK_FLOAT(x) --- error! No float support. ---
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1503 #define CONCHECK_FLOAT(x) --- error! No float support. ---
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1504
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1505 #define XFLOATINT(n) XINT(n)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1506 #define CHECK_INT_OR_FLOAT CHECK_INT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1507 #define CONCHECK_INT_OR_FLOAT CONCHECK_INT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1508 #define INT_OR_FLOATP(x) INTP (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1509
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1510 #endif /* not LISP_FLOAT_TYPE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1511
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1512 /*-------------------------------- int ---------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1513
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1514 #define ZEROP(x) EQ (x, Qzero)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1515
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1516 #ifdef ERROR_CHECK_TYPECHECK
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1517
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1518 INLINE_HEADER EMACS_INT XINT (Lisp_Object obj);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1519 INLINE_HEADER EMACS_INT
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1520 XINT (Lisp_Object obj)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1521 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1522 assert (INTP (obj));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1523 return XREALINT (obj);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1524 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1525
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1526 INLINE_HEADER EMACS_INT XCHAR_OR_INT (Lisp_Object obj);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1527 INLINE_HEADER EMACS_INT
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1528 XCHAR_OR_INT (Lisp_Object obj)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1529 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1530 assert (INTP (obj) || CHARP (obj));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1531 return CHARP (obj) ? XCHAR (obj) : XINT (obj);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1532 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1533
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1534 #else /* no error checking */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1535
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1536 #define XINT(obj) XREALINT (obj)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1537 #define XCHAR_OR_INT(obj) (CHARP (obj) ? XCHAR (obj) : XINT (obj))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1538
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1539 #endif /* no error checking */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1540
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1541 #define CHECK_INT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1542 if (!INTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1543 dead_wrong_type_argument (Qintegerp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1544 } while (0)
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 #define CONCHECK_INT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1547 if (!INTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1548 x = wrong_type_argument (Qintegerp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1549 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1550
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1551 #define NATNUMP(x) (INTP (x) && XINT (x) >= 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1552
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1553 #define CHECK_NATNUM(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1554 if (!NATNUMP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1555 dead_wrong_type_argument (Qnatnump, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1556 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1557
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1558 #define CONCHECK_NATNUM(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1559 if (!NATNUMP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1560 x = wrong_type_argument (Qnatnump, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1561 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1562
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1563 /* next three always continuable because they coerce their arguments. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1564 #define CHECK_INT_COERCE_CHAR(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1565 if (INTP (x)) \
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 else if (CHARP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1568 x = make_int (XCHAR (x)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1569 else \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1570 x = wrong_type_argument (Qinteger_or_char_p, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1571 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1572
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1573 #define CHECK_INT_COERCE_MARKER(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1574 if (INTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1575 ; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1576 else if (MARKERP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1577 x = make_int (marker_position (x)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1578 else \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1579 x = wrong_type_argument (Qinteger_or_marker_p, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1580 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1581
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1582 #define CHECK_INT_COERCE_CHAR_OR_MARKER(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1583 if (INTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1584 ; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1585 else if (CHARP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1586 x = make_int (XCHAR (x)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1587 else if (MARKERP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1588 x = make_int (marker_position (x)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1589 else \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1590 x = wrong_type_argument (Qinteger_char_or_marker_p, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1591 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1592
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1593
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1594 /*--------------------------- readonly objects -------------------------*/
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1595
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1596 #define CHECK_C_WRITEABLE(obj) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1597 do { if (c_readonly (obj)) c_write_error (obj); } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1598
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1599 #define CHECK_LISP_WRITEABLE(obj) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1600 do { if (lisp_readonly (obj)) lisp_write_error (obj); } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1601
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1602 #define C_READONLY(obj) (C_READONLY_RECORD_HEADER_P(XRECORD_LHEADER (obj)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1603 #define LISP_READONLY(obj) (LISP_READONLY_RECORD_HEADER_P(XRECORD_LHEADER (obj)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1604
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1605 /*----------------------------- structrures ----------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1606
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1607 typedef struct structure_keyword_entry structure_keyword_entry;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1608 struct structure_keyword_entry
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1609 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1610 Lisp_Object keyword;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1611 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
1612 Error_Behavior errb);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1613 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1614
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1615 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1616 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1617 Dynarr_declare (structure_keyword_entry);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1618 } structure_keyword_entry_dynarr;
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 typedef struct structure_type structure_type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1621 struct structure_type
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 Lisp_Object type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1624 structure_keyword_entry_dynarr *keywords;
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
1625 int (*validate) (Lisp_Object data, Error_Behavior errb);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1626 Lisp_Object (*instantiate) (Lisp_Object data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1627 };
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 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1630 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1631 Dynarr_declare (structure_type);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1632 } structure_type_dynarr;
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 struct structure_type *define_structure_type (Lisp_Object type,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1635 int (*validate)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1636 (Lisp_Object data,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
1637 Error_Behavior errb),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1638 Lisp_Object (*instantiate)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1639 (Lisp_Object data));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1640 void define_structure_type_keyword (struct structure_type *st,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1641 Lisp_Object keyword,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1642 int (*validate) (Lisp_Object keyword,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1643 Lisp_Object value,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
1644 Error_Behavior errb));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1645
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1646 /*---------------------------- weak lists ------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1647
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1648 enum weak_list_type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1649 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1650 /* element disappears if it's unmarked. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1651 WEAK_LIST_SIMPLE,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1652 /* element disappears if it's a cons and either its car or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1653 cdr is unmarked. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1654 WEAK_LIST_ASSOC,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1655 /* element disappears if it's a cons and its car is unmarked. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1656 WEAK_LIST_KEY_ASSOC,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1657 /* 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
1658 WEAK_LIST_VALUE_ASSOC,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1659 /* 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
1660 its cdr is marked. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1661 WEAK_LIST_FULL_ASSOC
428
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1664 struct weak_list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1665 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1666 struct lcrecord_header header;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1667 Lisp_Object list; /* don't mark through this! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1668 enum weak_list_type type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1669 Lisp_Object next_weak; /* don't mark through this! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1670 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1671
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1672 DECLARE_LRECORD (weak_list, struct weak_list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1673 #define XWEAK_LIST(x) XRECORD (x, weak_list, struct weak_list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1674 #define XSETWEAK_LIST(x, p) XSETRECORD (x, p, weak_list)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
1675 #define wrap_weak_list(p) wrap_record (p, weak_list)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1676 #define WEAK_LISTP(x) RECORDP (x, weak_list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1677 #define CHECK_WEAK_LIST(x) CHECK_RECORD (x, weak_list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1678 #define CONCHECK_WEAK_LIST(x) CONCHECK_RECORD (x, weak_list)
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 #define weak_list_list(w) ((w)->list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1681 #define XWEAK_LIST_LIST(w) (XWEAK_LIST (w)->list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1682
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1683 Lisp_Object make_weak_list (enum weak_list_type type);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1684 /* The following two are only called by the garbage collector */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1685 int finish_marking_weak_lists (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1686 void prune_weak_lists (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1687
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1688 /*-------------------------- lcrecord-list -----------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1689
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1690 struct lcrecord_list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1691 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1692 struct lcrecord_header header;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1693 Lisp_Object free;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1694 Elemcount size;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1695 const struct lrecord_implementation *implementation;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1696 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1697
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1698 DECLARE_LRECORD (lcrecord_list, struct lcrecord_list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1699 #define XLCRECORD_LIST(x) XRECORD (x, lcrecord_list, struct lcrecord_list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1700 #define XSETLCRECORD_LIST(x, p) XSETRECORD (x, p, lcrecord_list)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
1701 #define wrap_lcrecord_list(p) wrap_record (p, lcrecord_list)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1702 #define LCRECORD_LISTP(x) RECORDP (x, lcrecord_list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1703 /* #define CHECK_LCRECORD_LIST(x) CHECK_RECORD (x, lcrecord_list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1704 Lcrecord lists should never escape to the Lisp level, so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1705 functions should not be doing this. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1706
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1707 Lisp_Object make_lcrecord_list (Elemcount size,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1708 const struct lrecord_implementation
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1709 *implementation);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1710 Lisp_Object allocate_managed_lcrecord (Lisp_Object lcrecord_list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1711 void free_managed_lcrecord (Lisp_Object lcrecord_list, Lisp_Object lcrecord);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1712
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1713
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1714 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1715 /* Definitions of primitive Lisp functions and variables */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1716 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1717
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1718
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1719 /* DEFUN - Define a built-in Lisp-visible C function or `subr'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1720 `lname' should be the name to give the function in Lisp,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1721 as a null-terminated C string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1722 `Fname' should be the C equivalent of `lname', using only characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1723 valid in a C identifier, with an "F" prepended.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1724 The name of the C constant structure that records information
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1725 on this function for internal use is "S" concatenated with Fname.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1726 `min_args' should be a number, the minimum number of arguments allowed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1727 `max_args' should be a number, the maximum number of arguments allowed,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1728 or else MANY or UNEVALLED.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1729 MANY means pass a vector of evaluated arguments,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1730 in the form of an integer number-of-arguments
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1731 followed by the address of a vector of Lisp_Objects
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1732 which contains the argument values.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1733 UNEVALLED means pass the list of unevaluated arguments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1734 `prompt' says how to read arguments for an interactive call.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1735 See the doc string for `interactive'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1736 A null string means call interactively with no arguments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1737 `arglist' are the comma-separated arguments (always Lisp_Objects) for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1738 the function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1739 The docstring for the function is placed as a "C" comment between
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1740 the prompt and the `args' argument. make-docfile reads the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1741 comment and creates the DOC file from it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1742 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1743
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1744 #define EXFUN_0 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1745 #define EXFUN_1 Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1746 #define EXFUN_2 Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1747 #define EXFUN_3 Lisp_Object,Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1748 #define EXFUN_4 Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1749 #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
1750 #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
1751 Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1752 #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
1753 Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1754 #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
1755 Lisp_Object,Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1756 #define EXFUN_MANY int, Lisp_Object*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1757 #define EXFUN_UNEVALLED Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1758 #define EXFUN(sym, max_args) Lisp_Object sym (EXFUN_##max_args)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1759
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1760 #define SUBR_MAX_ARGS 8
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1761 #define MANY -2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1762 #define UNEVALLED -1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1763
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1764 /* Can't be const, because then subr->doc is read-only and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1765 Snarf_documentation chokes */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1766
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1767 #define DEFUN(lname, Fname, min_args, max_args, prompt, arglist) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1768 Lisp_Object Fname (EXFUN_##max_args); \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1769 static struct Lisp_Subr S##Fname = \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1770 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1771 { /* struct lrecord_header */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1772 lrecord_type_subr, /* lrecord_type_index */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1773 1, /* mark bit */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1774 1, /* c_readonly bit */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1775 1 /* lisp_readonly bit */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1776 }, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1777 min_args, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1778 max_args, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1779 prompt, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1780 0, /* doc string */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1781 lname, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1782 (lisp_fn_t) Fname \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1783 }; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1784 Lisp_Object Fname (DEFUN_##max_args arglist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1785
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1786 /* Heavy ANSI C preprocessor hackery to get DEFUN to declare a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1787 prototype that matches max_args, and add the obligatory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1788 `Lisp_Object' type declaration to the formal C arguments. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1789
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1790 #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
1791 #define DEFUN_UNEVALLED(args) Lisp_Object args
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1792 #define DEFUN_0() void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1793 #define DEFUN_1(a) Lisp_Object a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1794 #define DEFUN_2(a,b) DEFUN_1(a), Lisp_Object b
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1795 #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
1796 #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
1797 #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
1798 #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
1799 #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
1800 #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
1801
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1802 /* WARNING: If you add defines here for higher values of max_args,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1803 make sure to also fix the clauses in PRIMITIVE_FUNCALL(),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1804 and change the define of SUBR_MAX_ARGS above. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1805
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1806 #include "symeval.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1807
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1808 /* `specpdl' is the special binding/unwind-protect stack.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1809
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1810 Knuth says (see the Jargon File):
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1811 At MIT, `pdl' [abbreviation for `Push Down List'] used to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1812 be a more common synonym for `stack'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1813 Everywhere else `stack' seems to be the preferred term.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1814
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1815 specpdl_depth is the current depth of `specpdl'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1816 Save this for use later as arg to `unbind_to'. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1817 extern int specpdl_depth_counter;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1818 #define specpdl_depth() specpdl_depth_counter
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1819
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1820
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1821 #define CHECK_FUNCTION(fun) do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1822 while (NILP (Ffunctionp (fun))) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1823 signal_invalid_function_error (fun); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1824 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1825
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1826
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1827 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1828 /* Checking for QUIT */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1829 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1830
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1831 /* Asynchronous events set something_happened, and then are processed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1832 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
1833 any sensitive code. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1834
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1835 extern volatile int something_happened;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1836 int check_what_happened (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1837
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1838 extern volatile int quit_check_signal_happened;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1839 extern volatile int quit_check_signal_tick_count;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1840 int check_quit (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1841
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1842 void signal_quit (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1843
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1844 /* Nonzero if ought to quit now. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1845 #define QUITP \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1846 ((quit_check_signal_happened ? check_quit () : 0), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1847 (!NILP (Vquit_flag) && (NILP (Vinhibit_quit) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1848 || EQ (Vquit_flag, Qcritical))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1849
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1850 /* QUIT used to call QUITP, but there are some places where QUITP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1851 is called directly, and check_what_happened() should only be called
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1852 when Emacs is actually ready to quit because it could do things
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1853 like switch threads. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1854 #define INTERNAL_QUITP \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1855 ((something_happened ? check_what_happened () : 0), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1856 (!NILP (Vquit_flag) && \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1857 (NILP (Vinhibit_quit) || EQ (Vquit_flag, Qcritical))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1858
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1859 #define INTERNAL_REALLY_QUITP \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1860 (check_what_happened (), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1861 (!NILP (Vquit_flag) && \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1862 (NILP (Vinhibit_quit) || EQ (Vquit_flag, Qcritical))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1863
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1864 /* Check quit-flag and quit if it is non-nil. Also do any other things
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1865 that might have gotten queued until it was safe. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1866 #define QUIT do { if (INTERNAL_QUITP) signal_quit (); } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1867
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1868 #define REALLY_QUIT do { if (INTERNAL_REALLY_QUITP) signal_quit (); } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1869
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1870
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1871 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1872 /* hashing */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1873 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1874
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1875 /* #### 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
1876 #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
1877 #define HASH2(a,b) (GOOD_HASH * (a) + (b))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1878 #define HASH3(a,b,c) (GOOD_HASH * HASH2 (a,b) + (c))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1879 #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
1880 #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
1881 #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
1882 #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
1883 #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
1884 #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
1885
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1886 #define LISP_HASH(obj) ((unsigned long) LISP_TO_VOID (obj))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1887 unsigned long string_hash (const char *xv);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1888 unsigned long memory_hash (const void *xv, Bytecount size);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1889 unsigned long internal_hash (Lisp_Object obj, int depth);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1890 unsigned long internal_array_hash (Lisp_Object *arr, int size, int depth);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1891
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1892
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1893 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1894 /* String translation */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1895 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1896
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1897 #ifdef I18N3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1898 #ifdef HAVE_LIBINTL_H
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1899 #include <libintl.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1900 #else
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1901 char *dgettext (const char *, const char *);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1902 char *gettext (const char *);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1903 char *textdomain (const char *);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1904 char *bindtextdomain (const char *, const char *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1905 #endif /* HAVE_LIBINTL_H */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1906
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1907 #define GETTEXT(x) gettext(x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1908 #define LISP_GETTEXT(x) Fgettext (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1909 #else /* !I18N3 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1910 #define GETTEXT(x) (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1911 #define LISP_GETTEXT(x) (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1912 #endif /* !I18N3 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1913
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1914 /* DEFER_GETTEXT is used to identify strings which are translated when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1915 they are referenced instead of when they are defined.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1916 These include Qerror_messages and initialized arrays of strings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1917 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1918 #define DEFER_GETTEXT(x) (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1919
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1920
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1921 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1922 /* Garbage collection / GC-protection */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1923 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1924
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1925 /* number of bytes of structure consed since last GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1926
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1927 extern EMACS_INT consing_since_gc;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1928
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1929 /* threshold for doing another gc */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1930
458
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
1931 extern Fixnum gc_cons_threshold;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1932
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1933 /* Structure for recording stack slots that need marking */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1934
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1935 /* 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
1936 variable whose value should be marked in garbage collection.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1937 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
1938 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
1939 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
1940 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
1941 containing the link disappears.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1942
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1943 Every function that can call Feval must protect in this fashion all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1944 Lisp_Object variables whose contents will be used again. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1945
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1946 extern struct gcpro *gcprolist;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1947
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1948 struct gcpro
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1949 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1950 struct gcpro *next;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1951 Lisp_Object *var; /* Address of first protected variable */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1952 int nvars; /* Number of consecutive protected variables */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1953 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1954
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1955 /* Normally, you declare variables gcpro1, gcpro2, ... and use the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1956 GCPROn() macros. However, if you need to have nested gcpro's,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1957 declare ngcpro1, ngcpro2, ... and use NGCPROn(). If you need
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1958 to nest another level, use nngcpro1, nngcpro2, ... and use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1959 NNGCPROn(). If you need to nest yet another level, create
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1960 the appropriate macros. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1961
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1962 #ifdef DEBUG_GCPRO
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1963
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1964 void debug_gcpro1 (char *, int, struct gcpro *, Lisp_Object *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1965 void debug_gcpro2 (char *, int, struct gcpro *, struct gcpro *,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1966 Lisp_Object *, Lisp_Object *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1967 void debug_gcpro3 (char *, int, struct gcpro *, struct gcpro *, struct gcpro *,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1968 Lisp_Object *, Lisp_Object *, Lisp_Object *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1969 void debug_gcpro4 (char *, int, struct gcpro *, struct gcpro *, struct gcpro *,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1970 struct gcpro *, Lisp_Object *, Lisp_Object *, Lisp_Object *,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1971 Lisp_Object *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1972 void debug_gcpro5 (char *, int, struct gcpro *, struct gcpro *, struct gcpro *,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1973 struct gcpro *, struct gcpro *, Lisp_Object *, Lisp_Object *,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1974 Lisp_Object *, Lisp_Object *, Lisp_Object *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1975 void debug_ungcpro(char *, int, struct gcpro *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1976
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1977 #define GCPRO1(v) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1978 debug_gcpro1 (__FILE__, __LINE__,&gcpro1,&v)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1979 #define GCPRO2(v1,v2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1980 debug_gcpro2 (__FILE__, __LINE__,&gcpro1,&gcpro2,&v1,&v2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1981 #define GCPRO3(v1,v2,v3) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1982 debug_gcpro3 (__FILE__, __LINE__,&gcpro1,&gcpro2,&gcpro3,&v1,&v2,&v3)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1983 #define GCPRO4(v1,v2,v3,v4) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1984 debug_gcpro4 (__FILE__, __LINE__,&gcpro1,&gcpro2,&gcpro3,&gcpro4,\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1985 &v1,&v2,&v3,&v4)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1986 #define GCPRO5(v1,v2,v3,v4,v5) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1987 debug_gcpro5 (__FILE__, __LINE__,&gcpro1,&gcpro2,&gcpro3,&gcpro4,&gcpro5,\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1988 &v1,&v2,&v3,&v4,&v5)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1989 #define UNGCPRO \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1990 debug_ungcpro(__FILE__, __LINE__,&gcpro1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1991
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1992 #define NGCPRO1(v) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1993 debug_gcpro1 (__FILE__, __LINE__,&ngcpro1,&v)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1994 #define NGCPRO2(v1,v2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1995 debug_gcpro2 (__FILE__, __LINE__,&ngcpro1,&ngcpro2,&v1,&v2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1996 #define NGCPRO3(v1,v2,v3) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1997 debug_gcpro3 (__FILE__, __LINE__,&ngcpro1,&ngcpro2,&ngcpro3,&v1,&v2,&v3)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1998 #define NGCPRO4(v1,v2,v3,v4) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1999 debug_gcpro4 (__FILE__, __LINE__,&ngcpro1,&ngcpro2,&ngcpro3,&ngcpro4,\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2000 &v1,&v2,&v3,&v4)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2001 #define NGCPRO5(v1,v2,v3,v4,v5) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2002 debug_gcpro5 (__FILE__, __LINE__,&ngcpro1,&ngcpro2,&ngcpro3,&ngcpro4,\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2003 &ngcpro5,&v1,&v2,&v3,&v4,&v5)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2004 #define NUNGCPRO \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2005 debug_ungcpro(__FILE__, __LINE__,&ngcpro1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2006
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2007 #define NNGCPRO1(v) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2008 debug_gcpro1 (__FILE__, __LINE__,&nngcpro1,&v)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2009 #define NNGCPRO2(v1,v2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2010 debug_gcpro2 (__FILE__, __LINE__,&nngcpro1,&nngcpro2,&v1,&v2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2011 #define NNGCPRO3(v1,v2,v3) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2012 debug_gcpro3 (__FILE__, __LINE__,&nngcpro1,&nngcpro2,&nngcpro3,&v1,&v2,&v3)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2013 #define NNGCPRO4(v1,v2,v3,v4) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2014 debug_gcpro4 (__FILE__, __LINE__,&nngcpro1,&nngcpro2,&nngcpro3,&nngcpro4,\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2015 &v1,&v2,&v3,&v4)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2016 #define NNGCPRO5(v1,v2,v3,v4,v5) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2017 debug_gcpro5 (__FILE__, __LINE__,&nngcpro1,&nngcpro2,&nngcpro3,&nngcpro4,\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2018 &nngcpro5,&v1,&v2,&v3,&v4,&v5)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2019 #define NNUNGCPRO \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2020 debug_ungcpro(__FILE__, __LINE__,&nngcpro1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2021
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2022 #else /* ! DEBUG_GCPRO */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2023
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2024 #define GCPRO1(var1) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2025 gcpro1.next = gcprolist, gcpro1.var = &var1, gcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2026 gcprolist = &gcpro1 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2027
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2028 #define GCPRO2(var1, var2) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2029 gcpro1.next = gcprolist, gcpro1.var = &var1, gcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2030 gcpro2.next = &gcpro1, gcpro2.var = &var2, gcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2031 gcprolist = &gcpro2 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2032
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2033 #define GCPRO3(var1, var2, var3) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2034 gcpro1.next = gcprolist, gcpro1.var = &var1, gcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2035 gcpro2.next = &gcpro1, gcpro2.var = &var2, gcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2036 gcpro3.next = &gcpro2, gcpro3.var = &var3, gcpro3.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2037 gcprolist = &gcpro3 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2038
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2039 #define GCPRO4(var1, var2, var3, var4) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2040 gcpro1.next = gcprolist, gcpro1.var = &var1, gcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2041 gcpro2.next = &gcpro1, gcpro2.var = &var2, gcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2042 gcpro3.next = &gcpro2, gcpro3.var = &var3, gcpro3.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2043 gcpro4.next = &gcpro3, gcpro4.var = &var4, gcpro4.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2044 gcprolist = &gcpro4 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2045
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2046 #define GCPRO5(var1, var2, var3, var4, var5) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2047 gcpro1.next = gcprolist, gcpro1.var = &var1, gcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2048 gcpro2.next = &gcpro1, gcpro2.var = &var2, gcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2049 gcpro3.next = &gcpro2, gcpro3.var = &var3, gcpro3.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2050 gcpro4.next = &gcpro3, gcpro4.var = &var4, gcpro4.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2051 gcpro5.next = &gcpro4, gcpro5.var = &var5, gcpro5.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2052 gcprolist = &gcpro5 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2053
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2054 #define UNGCPRO ((void) (gcprolist = gcpro1.next))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2055
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2056 #define NGCPRO1(var1) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2057 ngcpro1.next = gcprolist, ngcpro1.var = &var1, ngcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2058 gcprolist = &ngcpro1 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2059
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2060 #define NGCPRO2(var1, var2) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2061 ngcpro1.next = gcprolist, ngcpro1.var = &var1, ngcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2062 ngcpro2.next = &ngcpro1, ngcpro2.var = &var2, ngcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2063 gcprolist = &ngcpro2 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2064
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2065 #define NGCPRO3(var1, var2, var3) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2066 ngcpro1.next = gcprolist, ngcpro1.var = &var1, ngcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2067 ngcpro2.next = &ngcpro1, ngcpro2.var = &var2, ngcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2068 ngcpro3.next = &ngcpro2, ngcpro3.var = &var3, ngcpro3.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2069 gcprolist = &ngcpro3 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2070
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2071 #define NGCPRO4(var1, var2, var3, var4) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2072 ngcpro1.next = gcprolist, ngcpro1.var = &var1, ngcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2073 ngcpro2.next = &ngcpro1, ngcpro2.var = &var2, ngcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2074 ngcpro3.next = &ngcpro2, ngcpro3.var = &var3, ngcpro3.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2075 ngcpro4.next = &ngcpro3, ngcpro4.var = &var4, ngcpro4.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2076 gcprolist = &ngcpro4 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2077
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2078 #define NGCPRO5(var1, var2, var3, var4, var5) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2079 ngcpro1.next = gcprolist, ngcpro1.var = &var1, ngcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2080 ngcpro2.next = &ngcpro1, ngcpro2.var = &var2, ngcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2081 ngcpro3.next = &ngcpro2, ngcpro3.var = &var3, ngcpro3.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2082 ngcpro4.next = &ngcpro3, ngcpro4.var = &var4, ngcpro4.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2083 ngcpro5.next = &ngcpro4, ngcpro5.var = &var5, ngcpro5.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2084 gcprolist = &ngcpro5 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2085
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2086 #define NUNGCPRO ((void) (gcprolist = ngcpro1.next))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2087
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2088 #define NNGCPRO1(var1) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2089 nngcpro1.next = gcprolist, nngcpro1.var = &var1, nngcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2090 gcprolist = &nngcpro1 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2091
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2092 #define NNGCPRO2(var1, var2) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2093 nngcpro1.next = gcprolist, nngcpro1.var = &var1, nngcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2094 nngcpro2.next = &nngcpro1, nngcpro2.var = &var2, nngcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2095 gcprolist = &nngcpro2 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2096
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2097 #define NNGCPRO3(var1, var2, var3) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2098 nngcpro1.next = gcprolist, nngcpro1.var = &var1, nngcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2099 nngcpro2.next = &nngcpro1, nngcpro2.var = &var2, nngcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2100 nngcpro3.next = &nngcpro2, nngcpro3.var = &var3, nngcpro3.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2101 gcprolist = &nngcpro3 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2102
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2103 #define NNGCPRO4(var1, var2, var3, var4) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2104 nngcpro1.next = gcprolist, nngcpro1.var = &var1, nngcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2105 nngcpro2.next = &nngcpro1, nngcpro2.var = &var2, nngcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2106 nngcpro3.next = &nngcpro2, nngcpro3.var = &var3, nngcpro3.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2107 nngcpro4.next = &nngcpro3, nngcpro4.var = &var4, nngcpro4.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2108 gcprolist = &nngcpro4 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2109
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2110 #define NNGCPRO5(var1, var2, var3, var4, var5) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2111 nngcpro1.next = gcprolist, nngcpro1.var = &var1, nngcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2112 nngcpro2.next = &nngcpro1, nngcpro2.var = &var2, nngcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2113 nngcpro3.next = &nngcpro2, nngcpro3.var = &var3, nngcpro3.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2114 nngcpro4.next = &nngcpro3, nngcpro4.var = &var4, nngcpro4.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2115 nngcpro5.next = &nngcpro4, nngcpro5.var = &var5, nngcpro5.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2116 gcprolist = &nngcpro5 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2117
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2118 #define NNUNGCPRO ((void) (gcprolist = nngcpro1.next))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2119
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2120 #endif /* ! DEBUG_GCPRO */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2121
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2122 /* Another try to fix SunPro C compiler warnings */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2123 /* "end-of-loop code not reached" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2124 /* "statement not reached */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2125 #if defined __SUNPRO_C || defined __USLC__
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2126 #define RETURN_SANS_WARNINGS if (1) return
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2127 #define RETURN_NOT_REACHED(value)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2128 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2129 #define RETURN_SANS_WARNINGS return
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2130 #define RETURN_NOT_REACHED(value) return value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2131 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2132
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2133 /* Evaluate expr, UNGCPRO, and then return the value of expr. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2134 #define RETURN_UNGCPRO(expr) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2135 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2136 Lisp_Object ret_ungc_val = (expr); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2137 UNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2138 RETURN_SANS_WARNINGS ret_ungc_val; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2139 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2140
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2141 /* Evaluate expr, NUNGCPRO, UNGCPRO, and then return the value of expr. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2142 #define RETURN_NUNGCPRO(expr) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2143 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2144 Lisp_Object ret_ungc_val = (expr); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2145 NUNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2146 UNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2147 RETURN_SANS_WARNINGS ret_ungc_val; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2148 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2149
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2150 /* Evaluate expr, NNUNGCPRO, NUNGCPRO, UNGCPRO, and then return the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2151 value of expr. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2152 #define RETURN_NNUNGCPRO(expr) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2153 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2154 Lisp_Object ret_ungc_val = (expr); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2155 NNUNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2156 NUNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2157 UNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2158 RETURN_SANS_WARNINGS ret_ungc_val; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2159 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2160
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2161 /* Evaluate expr, return it if it's not Qunbound. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2162 #define RETURN_IF_NOT_UNBOUND(expr) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2163 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2164 Lisp_Object ret_nunb_val = (expr); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2165 if (!UNBOUNDP (ret_nunb_val)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2166 RETURN_SANS_WARNINGS ret_nunb_val; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2167 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2168
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2169 extern Lisp_Object_ptr_dynarr *staticpros;
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2170
611
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 609
diff changeset
2171 void register_post_gc_action (void (*fun) (void *), void *arg);
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 609
diff changeset
2172
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2173 /* Call staticpro (&var) to protect static variable `var'. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2174 void staticpro (Lisp_Object *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2175
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2176 /* Call staticpro_nodump (&var) to protect static variable `var'. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2177 /* var will not be saved at dump time */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2178 void staticpro_nodump (Lisp_Object *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2179
458
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2180 /* dump_add_root_struct_ptr (&var, &desc) dumps the structure pointed to by `var'. */
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2181 #ifdef PDUMP
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2182 void dump_add_root_struct_ptr (void *, const struct struct_description *);
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2183 #else
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2184 #define dump_add_root_struct_ptr(varaddr,descaddr) DO_NOTHING
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2185 #endif
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2186
458
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2187 /* dump_add_opaque (&var, size) dumps the opaque static structure `var'. */
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2188 #ifdef PDUMP
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2189 void dump_add_opaque (const void *, Bytecount);
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2190 #else
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2191 #define dump_add_opaque(varaddr,size) DO_NOTHING
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2192 #endif
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2193
458
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2194 /* Call dump_add_opaque_int (&int_var) to dump `int_var', of type `int'. */
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2195 #ifdef PDUMP
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2196 #define dump_add_opaque_int(int_varaddr) do { \
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2197 int *dao_ = (int_varaddr); /* type check */ \
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2198 dump_add_opaque (dao_, sizeof (*dao_)); \
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2199 } while (0)
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2200 #else
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2201 #define dump_add_opaque_int(int_varaddr) DO_NOTHING
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2202 #endif
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2203
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2204 /* Call dump_add_opaque_fixnum (&fixnum_var) to dump `fixnum_var', of type `Fixnum'. */
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2205 #ifdef PDUMP
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2206 #define dump_add_opaque_fixnum(fixnum_varaddr) do { \
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2207 Fixnum *dao_ = (fixnum_varaddr); /* type check */ \
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2208 dump_add_opaque (dao_, sizeof (*dao_)); \
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2209 } while (0)
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2210 #else
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2211 #define dump_add_opaque_fixnum(fixnum_varaddr) DO_NOTHING
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2212 #endif
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2213
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2214 /* Call dump_add_root_object (&var) to ensure that var is properly updated after pdump. */
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2215 #ifdef PDUMP
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2216 void dump_add_root_object (Lisp_Object *);
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2217 #else
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2218 #define dump_add_root_object(varaddr) DO_NOTHING
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2219 #endif
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2220
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2221 /* Call dump_add_root_object (&var) to ensure that var is properly updated after
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2222 pdump. var must point to a linked list of objects out of which
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2223 some may not be dumped */
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2224 #ifdef PDUMP
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2225 void dump_add_weak_object_chain (Lisp_Object *);
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2226 #else
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2227 #define dump_add_weak_object_chain(varaddr) DO_NOTHING
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2228 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2229
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2230 /* Nonzero means Emacs has already been initialized.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2231 Used during startup to detect startup of dumped Emacs. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2232 extern int initialized;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2233
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2234 #ifdef MEMORY_USAGE_STATS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2235
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2236 /* This structure is used to keep statistics on the amount of memory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2237 in use.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2238
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2239 WAS_REQUESTED stores the actual amount of memory that was requested
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2240 of the allocation function. The *_OVERHEAD fields store the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2241 additional amount of memory that was grabbed by the functions to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2242 facilitate allocation, reallocation, etc. MALLOC_OVERHEAD is for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2243 memory allocated with malloc(); DYNARR_OVERHEAD is for dynamic
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2244 arrays; GAP_OVERHEAD is for gap arrays. Note that for (e.g.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2245 dynamic arrays, there is both MALLOC_OVERHEAD and DYNARR_OVERHEAD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2246 memory: The dynamic array allocates memory above and beyond what
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2247 was asked of it, and when it in turns allocates memory using
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2248 malloc(), malloc() allocates memory beyond what it was asked
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2249 to allocate.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2250
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2251 Functions that accept a structure of this sort do not initialize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2252 the fields to 0, and add any existing values to whatever was there
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2253 before; this way, you can get a cumulative effect. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2254
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2255 struct overhead_stats
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2256 {
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2257 Bytecount was_requested;
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2258 Bytecount malloc_overhead;
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2259 Bytecount dynarr_overhead;
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2260 Bytecount gap_overhead;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2261 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2262
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2263 #endif /* MEMORY_USAGE_STATS */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2264
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2265 #ifndef DIRECTORY_SEP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2266 #define DIRECTORY_SEP '/'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2267 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2268 #ifndef IS_DIRECTORY_SEP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2269 #define IS_DIRECTORY_SEP(c) ((c) == DIRECTORY_SEP)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2270 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2271 #ifndef IS_DEVICE_SEP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2272 #ifndef DEVICE_SEP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2273 #define IS_DEVICE_SEP(c) 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2274 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2275 #define IS_DEVICE_SEP(c) ((c) == DEVICE_SEP)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2276 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2277 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2278 #ifndef IS_ANY_SEP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2279 #define IS_ANY_SEP(c) IS_DIRECTORY_SEP (c)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2280 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2281
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2282 #ifdef HAVE_INTTYPES_H
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2283 #include <inttypes.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2284 #elif SIZEOF_VOID_P == SIZEOF_INT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2285 typedef int intptr_t;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2286 typedef unsigned int uintptr_t;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2287 #elif SIZEOF_VOID_P == SIZEOF_LONG
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2288 typedef long intptr_t;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2289 typedef unsigned long uintptr_t;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2290 #elif defined(SIZEOF_LONG_LONG) && SIZEOF_VOID_P == SIZEOF_LONG_LONG
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2291 typedef long long intptr_t;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2292 typedef unsigned long long uintptr_t;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2293 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2294 /* Just pray. May break, may not. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2295 typedef long intptr_t;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2296 typedef unsigned long uintptr_t;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2297 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2298
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2299
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2300 /************************************************************************/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2301 /* prototypes */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2302 /************************************************************************/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2303
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2304 /* NOTE: Prototypes should go HERE, not in various header files, unless
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2305 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
2306 (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
2307
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2308 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
2309 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
2310 the specifics of such objects. Putting prototypes here minimizes the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2311 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
2312 of reasons. --ben */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2313
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2314 /*--------------- prototypes for various public c functions ------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2315
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2316 /* Prototypes for all init/syms_of/vars_of initialization functions. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2317 #include "symsinit.h"
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2318
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2319 /* Defined in alloc.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2320 void release_breathing_space (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2321 Lisp_Object noseeum_cons (Lisp_Object, Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2322 Lisp_Object make_vector (Elemcount, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2323 Lisp_Object vector1 (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2324 Lisp_Object vector2 (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2325 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
2326 Lisp_Object make_bit_vector (Elemcount, Lisp_Object);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2327 Lisp_Object make_bit_vector_from_byte_vector (unsigned char *, Elemcount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2328 Lisp_Object noseeum_make_marker (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2329 void garbage_collect_1 (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2330 Lisp_Object acons (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2331 Lisp_Object cons3 (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2332 Lisp_Object list1 (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2333 Lisp_Object list2 (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2334 Lisp_Object list3 (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2335 Lisp_Object list4 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2336 Lisp_Object list5 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2337 Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2338 Lisp_Object list6 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2339 Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2340 DECLARE_DOESNT_RETURN (memory_full (void));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2341 void disksave_object_finalization (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2342 extern int purify_flag;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2343 extern int gc_currently_forbidden;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2344 Lisp_Object restore_gc_inhibit (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2345 extern EMACS_INT gc_generation_number[1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2346 int c_readonly (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2347 int lisp_readonly (Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2348 Lisp_Object build_string (const CIntbyte *);
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
2349 Lisp_Object build_ext_string (const Extbyte *, Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2350 Lisp_Object build_translated_string (const CIntbyte *);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2351 Lisp_Object make_string (const Intbyte *, Bytecount);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2352 Lisp_Object make_ext_string (const Extbyte *, EMACS_INT, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2353 Lisp_Object make_uninit_string (Bytecount);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2354 Lisp_Object make_float (double);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2355 Lisp_Object make_string_nocopy (const Intbyte *, Bytecount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2356 void free_cons (Lisp_Cons *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2357 void free_list (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2358 void free_alist (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2359 void mark_conses_in_list (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2360 void free_marker (Lisp_Marker *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2361 int object_dead_p (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2362 void mark_object (Lisp_Object obj);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2363 int marked_p (Lisp_Object obj);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2364
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2365 #ifdef MEMORY_USAGE_STATS
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2366 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
2367 Bytecount fixed_type_block_overhead (Bytecount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2368 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2369 #ifdef PDUMP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2370 void pdump (void);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2371 int pdump_load (const char *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2372
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2373 extern char *pdump_start, *pdump_end;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2374 #define DUMPEDP(adr) ((((char *)(adr)) < pdump_end) && (((char *)(adr)) >= pdump_start))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2375 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2376 #define DUMPEDP(adr) 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2377 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2378
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2379 /* Defined in buffer.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2380 Lisp_Object make_buffer (struct buffer *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2381 Lisp_Object get_truename_buffer (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2382 void switch_to_buffer (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2383 extern int find_file_compare_truenames;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2384 extern int find_file_use_truenames;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2385
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2386 /* Defined in bytecode.c */
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 578
diff changeset
2387 DECLARE_DOESNT_RETURN (invalid_byte_code
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2388 (const CIntbyte *reason, Lisp_Object frob));
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2389
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2390 /* Defined in callproc.c */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2391 char *egetenv (const char *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2392
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2393 /* Defined in console.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2394 void stuff_buffered_input (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2395
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2396 /* Defined in console-msw.c */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2397 EXFUN (Fmswindows_message_box, 3);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2398 extern int mswindows_message_outputted;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2399
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2400 /* Defined in data.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2401 DECLARE_DOESNT_RETURN (c_write_error (Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2402 DECLARE_DOESNT_RETURN (lisp_write_error (Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2403 DECLARE_DOESNT_RETURN (args_out_of_range (Lisp_Object, Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2404 DECLARE_DOESNT_RETURN (args_out_of_range_3 (Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2405 Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2406 Lisp_Object wrong_type_argument (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2407 DECLARE_DOESNT_RETURN (dead_wrong_type_argument (Lisp_Object, Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2408 void check_int_range (EMACS_INT, EMACS_INT, EMACS_INT);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2409
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2410 enum arith_comparison {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2411 arith_equal,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2412 arith_notequal,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2413 arith_less,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2414 arith_grtr,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2415 arith_less_or_equal,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2416 arith_grtr_or_equal };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2417 Lisp_Object arithcompare (Lisp_Object, Lisp_Object, enum arith_comparison);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2418
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2419 Lisp_Object word_to_lisp (unsigned int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2420 unsigned int lisp_to_word (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2421
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2422 /* Defined in dired.c */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2423 Lisp_Object make_directory_hash_table (const char *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2424 Lisp_Object wasteful_word_to_lisp (unsigned int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2425
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2426 /* Defined in doc.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2427 Lisp_Object unparesseuxify_doc_string (int, EMACS_INT, char *, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2428 Lisp_Object read_doc_string (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2429
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2430 /* Defined in doprnt.c */
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2431 Bytecount emacs_doprnt_c (Lisp_Object, const Intbyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2432 Bytecount, ...);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2433 Bytecount emacs_doprnt_va (Lisp_Object, const Intbyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2434 Bytecount, va_list);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2435 Bytecount emacs_doprnt_lisp (Lisp_Object, const Intbyte *, Lisp_Object,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2436 Bytecount, int, const Lisp_Object *);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2437 Bytecount emacs_doprnt_lisp_2 (Lisp_Object, const Intbyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2438 Bytecount, int, ...);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2439 Lisp_Object emacs_doprnt_string_c (const Intbyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2440 Bytecount, ...);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2441 Lisp_Object emacs_doprnt_string_va (const Intbyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2442 Bytecount, va_list);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2443 Lisp_Object emacs_doprnt_string_lisp (const Intbyte *, Lisp_Object,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2444 Bytecount, int, const Lisp_Object *);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2445 Lisp_Object emacs_doprnt_string_lisp_2 (const Intbyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2446 Bytecount, int, ...);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2447
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2448 /* Defined in editfns.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2449 void uncache_home_directory (void);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2450 Extbyte *get_home_directory (void);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2451 char *user_login_name (uid_t *);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2452 Charbpos charbpos_clip_to_bounds (Charbpos, Charbpos, Charbpos);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2453 Bytebpos bytebpos_clip_to_bounds (Bytebpos, Bytebpos, Bytebpos);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2454 void buffer_insert1 (struct buffer *, Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2455 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
2456 Lisp_Object make_string_from_buffer_no_extents (struct buffer *, Charbpos, Charcount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2457 Lisp_Object save_excursion_save (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2458 Lisp_Object save_restriction_save (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2459 Lisp_Object save_excursion_restore (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2460 Lisp_Object save_restriction_restore (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2461
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2462 /* Defined in emacsfns.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2463 Lisp_Object save_current_buffer_restore (Lisp_Object);
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 /* Defined in emacs.c */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2466 DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS (fatal (const char *,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2467 ...), 1, 2);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2468 int stderr_out (const char *, ...) PRINTF_ARGS (1, 2);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2469 int stdout_out (const char *, ...) PRINTF_ARGS (1, 2);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2470 SIGTYPE fatal_error_signal (int);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2471 Lisp_Object make_arg_list (int, Extbyte **);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2472 void make_argc_argv (Lisp_Object, int *, Extbyte ***);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2473 void free_argc_argv (Extbyte **);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2474 Lisp_Object decode_env_path (const char *, const char *);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2475 Lisp_Object decode_path (const char *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2476 /* 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
2477 extern int noninteractive, noninteractive1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2478 extern int fatal_error_in_progress;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2479 extern int preparing_for_armageddon;
458
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2480 extern Fixnum emacs_priority;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2481 extern int running_asynch_code;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2482 extern int suppress_early_error_handler_backtrace;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2483
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2484 /* Defined in eval.c */
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2485 DECLARE_DOESNT_RETURN (signal_error_1 (Lisp_Object, Lisp_Object));
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2486 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
2487 Error_Behavior);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2488 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
2489 Lisp_Object, Error_Behavior);
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
2490 DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS (signal_ferror
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
2491 (Lisp_Object,
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2492 const CIntbyte *,
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
2493 ...), 2, 3);
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2494 void maybe_signal_ferror (Lisp_Object, Lisp_Object, Error_Behavior,
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2495 const CIntbyte *, ...) PRINTF_ARGS (4, 5);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2496 Lisp_Object signal_continuable_ferror (Lisp_Object, const CIntbyte *, ...)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2497 PRINTF_ARGS (2, 3);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2498 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
2499 Error_Behavior,
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2500 const CIntbyte *, ...)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2501 PRINTF_ARGS (4, 5);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2502
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2503 Lisp_Object build_error_data (const CIntbyte *reason, Lisp_Object frob);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2504 DECLARE_DOESNT_RETURN (signal_error (Lisp_Object, const CIntbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2505 Lisp_Object));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2506 void maybe_signal_error (Lisp_Object, const CIntbyte *, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2507 Lisp_Object, Error_Behavior);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2508 Lisp_Object signal_continuable_error (Lisp_Object, const CIntbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2509 Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2510 Lisp_Object maybe_signal_continuable_error (Lisp_Object, const CIntbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2511 Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2512 Lisp_Object, Error_Behavior);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2513 DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS (signal_ferror_with_frob
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2514 (Lisp_Object, Lisp_Object,
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2515 const CIntbyte *,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2516 ...), 3, 4);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2517 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
2518 Error_Behavior,
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2519 const CIntbyte *, ...) PRINTF_ARGS (5, 6);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2520 Lisp_Object signal_continuable_ferror_with_frob (Lisp_Object, Lisp_Object,
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2521 const CIntbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2522 ...) PRINTF_ARGS (3, 4);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2523 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
2524 Lisp_Object,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2525 Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2526 Error_Behavior,
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2527 const CIntbyte *, ...)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2528 PRINTF_ARGS (5, 6);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2529 DECLARE_DOESNT_RETURN (signal_error_2 (Lisp_Object, const CIntbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2530 Lisp_Object, Lisp_Object));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2531 void maybe_signal_error_2 (Lisp_Object, const CIntbyte *, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2532 Lisp_Object, Lisp_Object, Error_Behavior);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2533 Lisp_Object signal_continuable_error_2 (Lisp_Object, const CIntbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2534 Lisp_Object, Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2535 Lisp_Object maybe_signal_continuable_error_2 (Lisp_Object, const CIntbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2536 Lisp_Object, Lisp_Object,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2537 Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2538 Error_Behavior);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2539
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2540
436
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2541 DECLARE_DOESNT_RETURN (signal_malformed_list_error (Lisp_Object));
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2542 DECLARE_DOESNT_RETURN (signal_malformed_property_list_error (Lisp_Object));
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2543 DECLARE_DOESNT_RETURN (signal_circular_list_error (Lisp_Object));
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2544 DECLARE_DOESNT_RETURN (signal_circular_property_list_error (Lisp_Object));
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2545
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2546 DECLARE_DOESNT_RETURN (syntax_error (const CIntbyte *reason,
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
2547 Lisp_Object frob));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2548 DECLARE_DOESNT_RETURN (syntax_error_2 (const CIntbyte *reason,
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
2549 Lisp_Object frob1,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2550 Lisp_Object frob2));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2551 void maybe_syntax_error (const CIntbyte *, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2552 Error_Behavior);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2553 DECLARE_DOESNT_RETURN (sferror (const CIntbyte *reason, Lisp_Object frob));
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2554 DECLARE_DOESNT_RETURN (sferror_2 (const CIntbyte *reason, Lisp_Object frob1,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2555 Lisp_Object frob2));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2556 void maybe_sferror (const CIntbyte *, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2557 Error_Behavior);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2558 DECLARE_DOESNT_RETURN (invalid_argument (const CIntbyte *reason,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2559 Lisp_Object frob));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2560 DECLARE_DOESNT_RETURN (invalid_argument_2 (const CIntbyte *reason,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2561 Lisp_Object frob1,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2562 Lisp_Object frob2));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2563 void maybe_invalid_argument (const CIntbyte *, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2564 Error_Behavior);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2565 DECLARE_DOESNT_RETURN (invalid_operation (const CIntbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2566 Lisp_Object frob));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2567 DECLARE_DOESNT_RETURN (invalid_operation_2 (const CIntbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2568 Lisp_Object frob1,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2569 Lisp_Object frob2));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2570 void maybe_invalid_operation (const CIntbyte *, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2571 Error_Behavior);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2572 DECLARE_DOESNT_RETURN (invalid_state (const CIntbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2573 Lisp_Object frob));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2574 DECLARE_DOESNT_RETURN (invalid_state_2 (const CIntbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2575 Lisp_Object frob1,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2576 Lisp_Object frob2));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2577 void maybe_invalid_state (const CIntbyte *, Lisp_Object, Lisp_Object,
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
2578 Error_Behavior);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2579 DECLARE_DOESNT_RETURN (invalid_change (const CIntbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2580 Lisp_Object frob));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2581 DECLARE_DOESNT_RETURN (invalid_change_2 (const CIntbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2582 Lisp_Object frob1,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2583 Lisp_Object frob2));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2584 void maybe_invalid_change (const CIntbyte *, Lisp_Object, Lisp_Object,
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
2585 Error_Behavior);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2586 DECLARE_DOESNT_RETURN (invalid_constant (const CIntbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2587 Lisp_Object frob));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2588 DECLARE_DOESNT_RETURN (invalid_constant_2 (const CIntbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2589 Lisp_Object frob1,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2590 Lisp_Object frob2));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2591 void maybe_invalid_constant (const CIntbyte *, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2592 Error_Behavior);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2593 DECLARE_DOESNT_RETURN (wtaerror (const CIntbyte *reason, Lisp_Object frob));
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2594 DECLARE_DOESNT_RETURN (out_of_memory (const CIntbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2595 Lisp_Object frob));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2596 DECLARE_DOESNT_RETURN (stack_overflow (const CIntbyte *reason,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2597 Lisp_Object frob));
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2598 DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS (printing_unreadable_object
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2599 (const CIntbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2600 ...), 1, 2);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2601
436
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2602 Lisp_Object signal_void_function_error (Lisp_Object);
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2603 Lisp_Object signal_invalid_function_error (Lisp_Object);
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2604 Lisp_Object signal_wrong_number_of_arguments_error (Lisp_Object, int);
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2605
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2606 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
2607 enum run_hooks_condition);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2608 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
2609 void va_run_hook_with_args (Lisp_Object, int, ...);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2610 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
2611 Lisp_Object run_hook (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2612 Lisp_Object apply1 (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2613 Lisp_Object call0 (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2614 Lisp_Object call1 (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2615 Lisp_Object call2 (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2616 Lisp_Object call3 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2617 Lisp_Object call4 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2618 Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2619 Lisp_Object call5 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2620 Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2621 Lisp_Object call6 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2622 Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2623 Lisp_Object call7 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2624 Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2625 Lisp_Object call8 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2626 Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2627 Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2628 Lisp_Object call0_in_buffer (struct buffer *, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2629 Lisp_Object call1_in_buffer (struct buffer *, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2630 Lisp_Object call2_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2631 Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2632 Lisp_Object call3_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2633 Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2634 Lisp_Object call4_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2635 Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2636 Lisp_Object call5_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2637 Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2638 Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2639 Lisp_Object call6_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2640 Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2641 Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2642 Lisp_Object eval_in_buffer (struct buffer *, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2643 Lisp_Object call0_with_handler (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2644 Lisp_Object call1_with_handler (Lisp_Object, Lisp_Object, Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2645 Lisp_Object eval_in_buffer_trapping_errors (const CIntbyte *, struct buffer *,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2646 Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2647 Lisp_Object run_hook_trapping_errors (const CIntbyte *, Lisp_Object);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2648 Lisp_Object safe_run_hook_trapping_errors (const CIntbyte *, Lisp_Object, int);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2649 Lisp_Object call0_trapping_errors (const CIntbyte *, Lisp_Object);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2650 Lisp_Object call1_trapping_errors (const CIntbyte *, Lisp_Object, Lisp_Object);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2651 Lisp_Object call2_trapping_errors (const CIntbyte *,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2652 Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2653 Lisp_Object call_with_suspended_errors (lisp_fn_t, volatile Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2654 Error_Behavior, int, ...);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2655 /* C Code should be using internal_catch, record_unwind_p, condition_case_1 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2656 Lisp_Object internal_catch (Lisp_Object, Lisp_Object (*) (Lisp_Object),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2657 Lisp_Object, int * volatile);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2658 Lisp_Object condition_case_1 (Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2659 Lisp_Object (*) (Lisp_Object),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2660 Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2661 Lisp_Object (*) (Lisp_Object, Lisp_Object),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2662 Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2663 Lisp_Object condition_case_3 (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2664 Lisp_Object unbind_to (int, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2665 void specbind (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2666 void record_unwind_protect (Lisp_Object (*) (Lisp_Object), Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2667 void do_autoload (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2668 Lisp_Object un_autoload (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2669 void warn_when_safe_lispobj (Lisp_Object, Lisp_Object, Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2670 void warn_when_safe (Lisp_Object, Lisp_Object, const CIntbyte *,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2671 ...) PRINTF_ARGS (3, 4);
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2674 /* Defined in event-stream.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2675 void wait_delaying_user_input (int (*) (void *), void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2676 int detect_input_pending (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2677 void reset_this_command_keys (Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2678 Lisp_Object enqueue_misc_user_event (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2679 Lisp_Object enqueue_misc_user_event_pos (Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2680 Lisp_Object, int, int, int, int);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2681 extern int modifier_keys_are_sticky;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2682
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2683 /* Defined in event-Xt.c */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2684 void enqueue_Xt_dispatch_event (Lisp_Object event);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2685 void signal_special_Xt_user_event (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2686
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2687
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2688 /* Defined in events.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2689 void clear_event_resource (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2690 Lisp_Object allocate_event (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2691
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2692 /* Defined in fileio.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2693 void record_auto_save (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2694 void force_auto_save_soon (void);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2695 DECLARE_DOESNT_RETURN (report_error_with_errno (Lisp_Object errtype,
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2696 const CIntbyte *string,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2697 Lisp_Object data));
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2698 DECLARE_DOESNT_RETURN (report_file_type_error (Lisp_Object errtype,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2699 Lisp_Object oserrmess,
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2700 const CIntbyte *string,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2701 Lisp_Object data));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2702 DECLARE_DOESNT_RETURN (report_file_error (const CIntbyte *, Lisp_Object));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2703 Lisp_Object lisp_strerror (int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2704 Lisp_Object expand_and_dir_to_file (Lisp_Object, Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2705 Bytecount read_allowing_quit (int fildes, void *buf, Bytecount size);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2706 Bytecount write_allowing_quit (int fildes, const void *buf,
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2707 Bytecount size);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2708 int internal_delete_file (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2709
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2710 /* Defined in filelock.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2711 void lock_file (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2712 void unlock_file (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2713 void unlock_all_files (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2714 void unlock_buffer (struct buffer *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2715
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2716 /* Defined in filemode.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2717 void filemodestring (struct stat *, char *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2718
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2719 /* Defined in floatfns.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2720 double extract_float (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2721
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2722 /* Defined in fns.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2723 Lisp_Object list_sort (Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2724 int (*) (Lisp_Object, Lisp_Object, Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2725 Lisp_Object merge (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2726
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2727 void bump_string_modiff (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2728 Lisp_Object memq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2729 Lisp_Object assoc_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2730 Lisp_Object assq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2731 Lisp_Object rassq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2732 Lisp_Object delq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2733 Lisp_Object delq_no_quit_and_free_cons (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2734 Lisp_Object remassoc_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2735 Lisp_Object remassq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2736 Lisp_Object remrassq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2737
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2738 int plists_differ (Lisp_Object, Lisp_Object, int, int, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2739 Lisp_Object internal_plist_get (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2740 void internal_plist_put (Lisp_Object *, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2741 int internal_remprop (Lisp_Object *, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2742 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
2743 int, Error_Behavior);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2744 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
2745 Lisp_Object, int, Error_Behavior);
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2746 int external_remprop (Lisp_Object *, Lisp_Object, int, Error_Behavior);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2747 int internal_equal (Lisp_Object, Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2748 Lisp_Object concat2 (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2749 Lisp_Object concat3 (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2750 Lisp_Object vconcat2 (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2751 Lisp_Object vconcat3 (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2752 Lisp_Object nconc2 (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2753 Lisp_Object bytecode_nconc2 (Lisp_Object *);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2754 void check_losing_bytecode (const char *, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2755
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2756 /* Defined in glyphs.c */
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2757 Error_Behavior decode_error_behavior_flag (Lisp_Object);
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2758 Lisp_Object encode_error_behavior_flag (Error_Behavior);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2759
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2760 /* Defined in glyphs-shared.c */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2761 void shared_resource_validate (Lisp_Object instantiator);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2762 Lisp_Object shared_resource_normalize (Lisp_Object inst,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2763 Lisp_Object console_type,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2764 Lisp_Object dest_mask,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2765 Lisp_Object tag);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2766 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
2767
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2768 /* Defined in gui.c */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2769 DECLARE_DOESNT_RETURN (gui_error (const char *reason,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2770 Lisp_Object frob));
569
9cdcb214753f [xemacs-hg @ 2001-05-24 12:20:33 by yoshiki]
yoshiki
parents: 563
diff changeset
2771 DECLARE_DOESNT_RETURN (gui_error_2 (const char *reason,
9cdcb214753f [xemacs-hg @ 2001-05-24 12:20:33 by yoshiki]
yoshiki
parents: 563
diff changeset
2772 Lisp_Object frob0, Lisp_Object frob1));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2773 /* Defined in indent.c */
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2774 int bi_spaces_at_point (struct buffer *, Bytebpos);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2775 int column_at_point (struct buffer *, Charbpos, int);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2776 int string_column_at_point (Lisp_String *, Charbpos, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2777 int current_column (struct buffer *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2778 void invalidate_current_column (void);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2779 Charbpos vmotion (struct window *, Charbpos, int, int *);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2780 Charbpos vmotion_pixels (Lisp_Object, Charbpos, int, int, int *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2781
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2782 /* Defined in keymap.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2783 void where_is_to_char (Lisp_Object, char *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2784
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2785 /* Defined in lread.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2786 void ebolify_bytecode_constants (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2787 void close_load_descs (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2788 int locate_file (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object *, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2789 EXFUN (Flocate_file_clear_hashing, 1);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2790 int isfloat_string (const char *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2791
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2792 /* Well, I've decided to enable this. -- ben */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2793 /* And I've decided to make it work right. -- sb */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2794 #define LOADHIST
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2795 /* Define the following symbol to enable load history of dumped files */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2796 #define LOADHIST_DUMPED
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2797 /* Define the following symbol to enable load history of C source */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2798 #define LOADHIST_BUILTIN
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2799
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2800 #ifdef LOADHIST /* this is just a stupid idea */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2801 #define LOADHIST_ATTACH(x) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2802 do { if (initialized) Vcurrent_load_list = Fcons (x, Vcurrent_load_list); } \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2803 while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2804 #else /*! LOADHIST */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2805 # define LOADHIST_ATTACH(x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2806 #endif /*! LOADHIST */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2807
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2808 /* Defined in marker.c */
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2809 Bytebpos bi_marker_position (Lisp_Object);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2810 Charbpos marker_position (Lisp_Object);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2811 void set_bi_marker_position (Lisp_Object, Bytebpos);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2812 void set_marker_position (Lisp_Object, Charbpos);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2813 void unchain_marker (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2814 Lisp_Object noseeum_copy_marker (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2815 Lisp_Object set_marker_restricted (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2816 #ifdef MEMORY_USAGE_STATS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2817 int compute_buffer_marker_usage (struct buffer *, struct overhead_stats *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2818 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2819
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2820 /* Defined in menubar.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2821 extern int popup_menu_up_p;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2822 extern int menubar_show_keybindings;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2823 extern int popup_menu_titles;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2824
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2825 /* Defined in minibuf.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2826 extern int minibuf_level;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2827 Charcount scmp_1 (const Intbyte *, const Intbyte *, Charcount, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2828 #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
2829 extern int completion_ignore_case;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2830 int regexp_ignore_completion_p (const Intbyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2831 Bytecount, Bytecount);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2832 Lisp_Object clear_echo_area (struct frame *, Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2833 Lisp_Object clear_echo_area_from_print (struct frame *, Lisp_Object, int);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2834 void echo_area_append (struct frame *, const Intbyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2835 Bytecount, Bytecount, Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2836 void echo_area_message (struct frame *, const Intbyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2837 Bytecount, Bytecount, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2838 Lisp_Object echo_area_status (struct frame *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2839 int echo_area_active (struct frame *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2840 Lisp_Object echo_area_contents (struct frame *);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2841 void message_internal (const Intbyte *, Lisp_Object, Bytecount, Bytecount);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2842 void message_append_internal (const Intbyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2843 Bytecount, Bytecount);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2844 void message (const char *, ...) PRINTF_ARGS (1, 2);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2845 void message_append (const char *, ...) PRINTF_ARGS (1, 2);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2846 void message_no_translate (const char *, ...) PRINTF_ARGS (1, 2);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2847 void clear_message (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2848
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2849 /* Defined in print.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2850 void write_string_to_stdio_stream (FILE *, struct console *,
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2851 const Intbyte *, Bytecount, Bytecount,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2852 Lisp_Object, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2853 void debug_print (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2854 void debug_short_backtrace (int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2855 void temp_output_buffer_setup (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2856 void temp_output_buffer_show (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2857 /* 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
2858 * Note: stream should be defaulted before calling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2859 * (eg Qnil means stdout, not Vstandard_output, etc) */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2860 void write_c_string (const char *, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2861 /* Same goes for this function. */
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2862 void write_string_1 (const Intbyte *, Bytecount, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2863 void print_cons (Lisp_Object, Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2864 void print_vector (Lisp_Object, Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2865 void print_string (Lisp_Object, Lisp_Object, int);
603
1c880911c386 [xemacs-hg @ 2001-06-01 08:23:09 by martinb]
martinb
parents: 593
diff changeset
2866
1c880911c386 [xemacs-hg @ 2001-06-01 08:23:09 by martinb]
martinb
parents: 593
diff changeset
2867 /* 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
2868 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
2869 optional sign prefix, and null byte terminator.
614
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
2870 2.40824 == log (256) / log (10).
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
2871
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
2872 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
2873 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
2874 constant. */
603
1c880911c386 [xemacs-hg @ 2001-06-01 08:23:09 by martinb]
martinb
parents: 593
diff changeset
2875 #define DECIMAL_PRINT_SIZE(integral_type) \
614
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
2876 (((2410824 * sizeof (integral_type)) / 1000000) + 3)
577
910449c92002 [xemacs-hg @ 2001-05-25 10:04:26 by hrvojen]
hrvojen
parents: 569
diff changeset
2877 void long_to_string (char *, long);
603
1c880911c386 [xemacs-hg @ 2001-06-01 08:23:09 by martinb]
martinb
parents: 593
diff changeset
2878
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2879 void print_internal (Lisp_Object, Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2880 void print_symbol (Lisp_Object, Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2881 void print_float (Lisp_Object, Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2882 extern int print_escape_newlines;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2883 extern int print_readably;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2884 Lisp_Object internal_with_output_to_temp_buffer (Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2885 Lisp_Object (*) (Lisp_Object),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2886 Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2887 void float_to_string (char *, double);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2888 void internal_object_printer (Lisp_Object, Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2889
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2890 /* Defined in process.c */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2891 DECLARE_DOESNT_RETURN (report_process_error (const char *, Lisp_Object));
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2892 DECLARE_DOESNT_RETURN (report_network_error (const char *, Lisp_Object));
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2893
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2894 /* Defined in profile.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2895 void mark_profiling_info (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2896 void profile_increase_call_count (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2897 extern int profiling_active;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2898 extern int profiling_redisplay_flag;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2899
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2900 /* Defined in rangetab.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2901 void put_range_table (Lisp_Object, EMACS_INT, EMACS_INT, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2902 int unified_range_table_bytes_needed (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2903 int unified_range_table_bytes_used (void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2904 void unified_range_table_copy_data (Lisp_Object, void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2905 Lisp_Object unified_range_table_lookup (void *, EMACS_INT, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2906 int unified_range_table_nentries (void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2907 void unified_range_table_get_range (void *, int, EMACS_INT *, EMACS_INT *,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2908 Lisp_Object *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2909
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2910 /* Defined in search.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2911 struct re_pattern_buffer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2912 struct re_registers;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2913 Charbpos scan_buffer (struct buffer *, Emchar, Charbpos, Charbpos, EMACS_INT, EMACS_INT *, int);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2914 Charbpos find_next_newline (struct buffer *, Charbpos, int);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2915 Charbpos find_next_newline_no_quit (struct buffer *, Charbpos, int);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2916 Bytebpos bi_find_next_newline_no_quit (struct buffer *, Bytebpos, int);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2917 Bytebpos bi_find_next_emchar_in_string (Lisp_String*, Emchar, Bytebpos, EMACS_INT);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2918 Charbpos find_before_next_newline (struct buffer *, Charbpos, Charbpos, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2919 struct re_pattern_buffer *compile_pattern (Lisp_Object, struct re_registers *,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2920 Lisp_Object, int, Error_Behavior);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2921 Bytecount fast_string_match (Lisp_Object, const Intbyte *,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2922 Lisp_Object, Bytecount,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2923 Bytecount, int, Error_Behavior, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2924 Bytecount fast_lisp_string_match (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2925 void restore_match_data (void);
507
167135c7a7ae [xemacs-hg @ 2001-05-05 10:10:36 by martinb]
martinb
parents: 502
diff changeset
2926 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
2927
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2928
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2929 /* Defined in signal.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2930 void init_interrupts_late (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2931 extern int dont_check_for_quit;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2932 void begin_dont_check_for_quit (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2933 void emacs_sleep (int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2934
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2935 /* Defined in sound.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2936 void init_device_sound (struct device *);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2937 DECLARE_DOESNT_RETURN (report_sound_error (const Char_ASCII *, Lisp_Object));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2938
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2939 /* Defined in specifier.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2940 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
2941 Error_Behavior, int, int, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2942 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
2943 Error_Behavior, int, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2944
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2945 /* Defined in symbols.c */
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2946 unsigned int hash_string (const Intbyte *, Bytecount);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2947 Lisp_Object intern (const char *);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2948 Lisp_Object oblookup (Lisp_Object, const Intbyte *, Bytecount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2949 void map_obarray (Lisp_Object, int (*) (Lisp_Object, void *), void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2950 Lisp_Object indirect_function (Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2951 Lisp_Object symbol_value_in_buffer (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2952 void kill_buffer_local_variables (struct buffer *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2953 int symbol_value_buffer_local_info (Lisp_Object, struct buffer *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2954 Lisp_Object find_symbol_value (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2955 Lisp_Object find_symbol_value_quickly (Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2956 Lisp_Object top_level_value (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2957 void reject_constant_symbols (Lisp_Object sym, Lisp_Object newval,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2958 int function_p,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2959 Lisp_Object follow_past_lisp_magic);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2960
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2961 /* Defined in syntax.c */
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2962 Charbpos scan_words (struct buffer *, Charbpos, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2963
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2964 /* Defined in undo.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2965 Lisp_Object truncate_undo_list (Lisp_Object, int, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2966 void record_extent (Lisp_Object, int);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2967 void record_insert (struct buffer *, Charbpos, Charcount);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2968 void record_delete (struct buffer *, Charbpos, Charcount);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2969 void record_change (struct buffer *, Charbpos, Charcount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2970
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2971 /* Defined in unex*.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2972 int unexec (char *, char *, uintptr_t, uintptr_t, uintptr_t);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2973 #ifdef RUN_TIME_REMAP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2974 int run_time_remap (char *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2975 #endif
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 /* Defined in vm-limit.c */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2978 void memory_warnings (void *, void (*) (const char *));
428
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 /* Defined in window.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2981 Lisp_Object save_window_excursion_unwind (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2982 Lisp_Object display_buffer (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2983
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2984 /*--------------- prototypes for Lisp primitives in C ------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2985
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2986 /* The following were machine generated 19980312 */
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 EXFUN (Faccept_process_output, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2989 EXFUN (Fadd1, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2990 EXFUN (Fadd_spec_to_specifier, 5);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2991 EXFUN (Fadd_timeout, 4);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2992 EXFUN (Fappend, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2993 EXFUN (Fapply, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2994 EXFUN (Faref, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2995 EXFUN (Faset, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2996 EXFUN (Fassoc, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2997 EXFUN (Fassq, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2998 EXFUN (Fbacktrace, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2999 EXFUN (Fbeginning_of_line, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3000 EXFUN (Fbobp, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3001 EXFUN (Fbolp, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3002 EXFUN (Fboundp, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3003 EXFUN (Fbuffer_substring, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3004 EXFUN (Fbuilt_in_variable_type, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3005 EXFUN (Fbyte_code, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3006 EXFUN (Fcall_interactively, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3007 EXFUN (Fcanonicalize_lax_plist, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3008 EXFUN (Fcanonicalize_plist, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3009 EXFUN (Fcar, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3010 EXFUN (Fcar_safe, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3011 EXFUN (Fcdr, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3012 EXFUN (Fchar_after, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3013 EXFUN (Fchar_to_string, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3014 EXFUN (Fcheck_valid_plist, 1);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3015 EXFUN (Fvalid_plist_p, 1);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3016 EXFUN (Fclear_range_table, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3017 EXFUN (Fcoding_category_list, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3018 EXFUN (Fcoding_category_system, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3019 EXFUN (Fcoding_priority_list, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3020 EXFUN (Fcoding_system_doc_string, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3021 EXFUN (Fcoding_system_list, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3022 EXFUN (Fcoding_system_name, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3023 EXFUN (Fcoding_system_p, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3024 EXFUN (Fcoding_system_property, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3025 EXFUN (Fcoding_system_type, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3026 EXFUN (Fcommand_execute, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3027 EXFUN (Fcommandp, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3028 EXFUN (Fconcat, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3029 EXFUN (Fcons, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3030 EXFUN (Fcopy_alist, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3031 EXFUN (Fcopy_coding_system, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3032 EXFUN (Fcopy_event, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3033 EXFUN (Fcopy_list, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3034 EXFUN (Fcopy_marker, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3035 EXFUN (Fcopy_sequence, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3036 EXFUN (Fcopy_tree, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3037 EXFUN (Fcurrent_window_configuration, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3038 EXFUN (Fdecode_big5_char, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3039 EXFUN (Fdecode_coding_region, 4);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3040 EXFUN (Fdecode_shift_jis_char, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3041 EXFUN (Fdefault_boundp, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3042 EXFUN (Fdefault_value, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3043 EXFUN (Fdefine_key, 3);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3044 EXFUN (Fdelete, 2);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3045 EXFUN (Fdelete_region, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3046 EXFUN (Fdelete_process, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3047 EXFUN (Fdelq, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3048 EXFUN (Fdestructive_alist_to_plist, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3049 EXFUN (Fdetect_coding_region, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3050 EXFUN (Fdgettext, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3051 EXFUN (Fding, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3052 EXFUN (Fdirectory_file_name, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3053 EXFUN (Fdisable_timeout, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3054 EXFUN (Fdiscard_input, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3055 EXFUN (Fdispatch_event, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3056 EXFUN (Fdisplay_error, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3057 EXFUN (Fdo_auto_save, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3058 EXFUN (Fdowncase, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3059 EXFUN (Felt, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3060 EXFUN (Fencode_big5_char, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3061 EXFUN (Fencode_coding_region, 4);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3062 EXFUN (Fencode_shift_jis_char, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3063 EXFUN (Fend_of_line, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3064 EXFUN (Fenqueue_eval_event, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3065 EXFUN (Feobp, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3066 EXFUN (Feolp, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3067 EXFUN (Fequal, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3068 EXFUN (Ferror_message_string, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3069 EXFUN (Feval, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3070 EXFUN (Fevent_to_character, 4);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3071 EXFUN (Fexecute_kbd_macro, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3072 EXFUN (Fexpand_abbrev, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3073 EXFUN (Fexpand_file_name, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3074 EXFUN (Fextent_at, 5);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3075 EXFUN (Fextent_property, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3076 EXFUN (Ffboundp, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3077 EXFUN (Ffile_accessible_directory_p, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3078 EXFUN (Ffile_directory_p, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3079 EXFUN (Ffile_executable_p, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3080 EXFUN (Ffile_exists_p, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3081 EXFUN (Ffile_name_absolute_p, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3082 EXFUN (Ffile_name_as_directory, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3083 EXFUN (Ffile_name_directory, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3084 EXFUN (Ffile_name_nondirectory, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3085 EXFUN (Ffile_readable_p, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3086 EXFUN (Ffile_symlink_p, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3087 EXFUN (Ffile_truename, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3088 EXFUN (Ffind_coding_system, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3089 EXFUN (Ffind_file_name_handler, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3090 EXFUN (Ffollowing_char, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3091 EXFUN (Fformat, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3092 EXFUN (Fforward_char, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3093 EXFUN (Fforward_line, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3094 EXFUN (Ffset, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3095 EXFUN (Ffuncall, MANY);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3096 EXFUN (Ffunctionp, 1);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3097 EXFUN (Fgeq, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3098 EXFUN (Fget, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3099 EXFUN (Fget_buffer_process, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3100 EXFUN (Fget_coding_system, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3101 EXFUN (Fget_process, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3102 EXFUN (Fget_range_table, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3103 EXFUN (Fgettext, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3104 EXFUN (Fgoto_char, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3105 EXFUN (Fgtr, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3106 EXFUN (Findent_to, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3107 EXFUN (Findirect_function, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3108 EXFUN (Finsert, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3109 EXFUN (Finsert_buffer_substring, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3110 EXFUN (Finsert_char, 4);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3111 EXFUN (Finsert_file_contents_internal, 7);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3112 EXFUN (Finteractive_p, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3113 EXFUN (Fintern, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3114 EXFUN (Fintern_soft, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3115 EXFUN (Fkey_description, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3116 EXFUN (Fkill_emacs, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3117 EXFUN (Fkill_local_variable, 1);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3118 EXFUN (Flast, 2);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3119 EXFUN (Flax_plist_get, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3120 EXFUN (Flax_plist_remprop, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3121 EXFUN (Flength, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3122 EXFUN (Fleq, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3123 EXFUN (Flist, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3124 EXFUN (Flistp, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3125 EXFUN (Flist_modules, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3126 EXFUN (Fload_module, 3);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3127 EXFUN (Flookup_key, 3);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3128 EXFUN (Flss, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3129 EXFUN (Fmake_byte_code, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3130 EXFUN (Fmake_coding_system, 4);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3131 EXFUN (Fmake_glyph_internal, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3132 EXFUN (Fmake_list, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3133 EXFUN (Fmake_marker, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3134 EXFUN (Fmake_range_table, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3135 EXFUN (Fmake_sparse_keymap, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3136 EXFUN (Fmake_string, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3137 EXFUN (Fmake_symbol, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3138 EXFUN (Fmake_vector, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3139 EXFUN (Fmapcar, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3140 EXFUN (Fmarker_buffer, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3141 EXFUN (Fmarker_position, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3142 EXFUN (Fmatch_beginning, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3143 EXFUN (Fmatch_end, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3144 EXFUN (Fmax, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3145 EXFUN (Fmember, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3146 EXFUN (Fmemq, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3147 EXFUN (Fmin, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3148 EXFUN (Fminus, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3149 EXFUN (Fnarrow_to_region, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3150 EXFUN (Fnconc, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3151 EXFUN (Fnext_event, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3152 EXFUN (Fnreverse, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3153 EXFUN (Fnthcdr, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3154 EXFUN (Fnumber_to_string, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3155 EXFUN (Fold_assq, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3156 EXFUN (Fold_equal, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3157 EXFUN (Fold_member, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3158 EXFUN (Fold_memq, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3159 EXFUN (Fplist_get, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3160 EXFUN (Fplist_member, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3161 EXFUN (Fplist_put, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3162 EXFUN (Fplus, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3163 EXFUN (Fpoint, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3164 EXFUN (Fpoint_marker, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3165 EXFUN (Fpoint_max, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3166 EXFUN (Fpoint_min, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3167 EXFUN (Fpreceding_char, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3168 EXFUN (Fprefix_numeric_value, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3169 EXFUN (Fprin1, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3170 EXFUN (Fprin1_to_string, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3171 EXFUN (Fprinc, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3172 EXFUN (Fprint, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3173 EXFUN (Fprocess_status, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3174 EXFUN (Fprogn, UNEVALLED);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3175 EXFUN (Fprovide, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3176 EXFUN (Fput, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3177 EXFUN (Fput_range_table, 4);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3178 EXFUN (Fput_text_property, 5);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3179 EXFUN (Fquo, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3180 EXFUN (Frassq, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3181 EXFUN (Fread, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3182 EXFUN (Fread_key_sequence, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3183 EXFUN (Freally_free, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3184 EXFUN (Frem, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3185 EXFUN (Fremassq, 2);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3186 EXFUN (Freplace_list, 2);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3187 EXFUN (Fselected_frame, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3188 EXFUN (Fset, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3189 EXFUN (Fset_coding_category_system, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3190 EXFUN (Fset_coding_priority_list, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3191 EXFUN (Fset_default, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3192 EXFUN (Fset_marker, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3193 EXFUN (Fset_standard_case_table, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3194 EXFUN (Fsetcar, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3195 EXFUN (Fsetcdr, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3196 EXFUN (Fsignal, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3197 EXFUN (Fsit_for, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3198 EXFUN (Fskip_chars_backward, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3199 EXFUN (Fskip_chars_forward, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3200 EXFUN (Fsleep_for, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3201 EXFUN (Fsort, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3202 EXFUN (Fspecifier_spec_list, 4);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3203 EXFUN (Fstring_equal, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3204 EXFUN (Fstring_lessp, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3205 EXFUN (Fstring_match, 4);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3206 EXFUN (Fsub1, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3207 EXFUN (Fsubr_max_args, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3208 EXFUN (Fsubr_min_args, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3209 EXFUN (Fsubsidiary_coding_system, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3210 EXFUN (Fsubstitute_command_keys, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3211 EXFUN (Fsubstitute_in_file_name, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3212 EXFUN (Fsubstring, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3213 EXFUN (Fsymbol_function, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3214 EXFUN (Fsymbol_name, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3215 EXFUN (Fsymbol_plist, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3216 EXFUN (Fsymbol_value, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3217 EXFUN (Fsystem_name, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3218 EXFUN (Fthrow, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3219 EXFUN (Ftimes, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3220 EXFUN (Ftruncate, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3221 EXFUN (Fundo_boundary, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3222 EXFUN (Funhandled_file_name_directory, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3223 EXFUN (Funlock_buffer, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3224 EXFUN (Fupcase, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3225 EXFUN (Fupcase_initials, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3226 EXFUN (Fupcase_initials_region, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3227 EXFUN (Fupcase_region, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3228 EXFUN (Fuser_home_directory, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3229 EXFUN (Fuser_login_name, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3230 EXFUN (Fvector, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3231 EXFUN (Fverify_visited_file_modtime, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3232 EXFUN (Fvertical_motion, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3233 EXFUN (Fwiden, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3234
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3235 /*--------------- prototypes for constant symbols ------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3236
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3237 extern Lisp_Object Q_style;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3238 extern Lisp_Object Qactivate_menubar_hook;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3239 extern Lisp_Object Qarith_error;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3240 extern Lisp_Object Qarrayp, Qautoload;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3241 extern Lisp_Object Qbackground, Qbackground_pixmap;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3242 extern Lisp_Object Qbeginning_of_buffer, Qbig5;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3243 extern Lisp_Object Qbitp, Qblinking;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3244 extern Lisp_Object Qbuffer_glyph_p, Qbuffer_live_p, Qbuffer_read_only;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3245 extern Lisp_Object Qbyte_code, Qcall_interactively;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3246 extern Lisp_Object Qcategory_designator_p, Qcategory_table_value_p, Qccl, Qcdr;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3247 extern Lisp_Object Qchar_or_string_p, Qcharacterp;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3248 extern Lisp_Object Qcharset_g0, Qcharset_g1, Qcharset_g2, Qcharset_g3;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3249 extern Lisp_Object Qcircular_list, Qcircular_property_list;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3250 extern Lisp_Object Qcolor_pixmap_image_instance_p;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3251 extern Lisp_Object Qcommandp, Qcompletion_ignore_case;
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3252 extern Lisp_Object Qconsole_live_p, Qconst_specifier, Qconversion_error, Qcr;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3253 extern Lisp_Object Qcrlf, Qcurrent_menubar, Qctext;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3254 extern Lisp_Object Qcyclic_variable_indirection, Qdecode;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3255 extern Lisp_Object Qdefun, Qdevice_live_p;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3256 extern Lisp_Object Qdim, Qdisabled, Qdisplay_table;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3257 extern Lisp_Object Qdomain_error;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3258 extern Lisp_Object Qediting_error;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3259 extern Lisp_Object Qencode, Qend_of_buffer, Qend_of_file, Qend_open;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3260 extern Lisp_Object Qeol_cr, Qeol_crlf, Qeol_lf, Qeol_type;
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3261 extern Lisp_Object Qerror, Qerror_conditions, Qerror_lacks_explanatory_string;
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3262 extern Lisp_Object Qerror_message, Qescape_quoted;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3263 extern Lisp_Object Qevent_live_p, Qexit, Qextent_live_p;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3264 extern Lisp_Object Qexternal_debugging_output, Qfeaturep;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3265 extern Lisp_Object Qfile_error;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3266 extern Lisp_Object Qforce_g0_on_output, Qforce_g1_on_output;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3267 extern Lisp_Object Qforce_g2_on_output, Qforce_g3_on_output, Qforeground;
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3268 extern Lisp_Object Qformat, Qframe_live_p, Qgui_error;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3269 extern Lisp_Object Qicon_glyph_p, Qidentity;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3270 extern Lisp_Object Qinhibit_quit, Qinhibit_read_only;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3271 extern Lisp_Object Qinput_charset_conversion;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3272 extern Lisp_Object Qinteger_char_or_marker_p, Qinteger_or_char_p;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3273 extern Lisp_Object Qinteger_or_marker_p, Qintegerp, Qinteractive;
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3274 extern Lisp_Object Qinternal_error, Qinvalid_argument, Qinvalid_byte_code;
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3275 extern Lisp_Object Qinvalid_change, Qinvalid_constant, Qinvalid_function;
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3276 extern Lisp_Object Qinvalid_operation;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3277 extern Lisp_Object Qinvalid_read_syntax, Qinvalid_state;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3278 extern Lisp_Object Qio_error;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3279 extern Lisp_Object Qiso2022;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3280 extern Lisp_Object Qlambda, Qlayout;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3281 extern Lisp_Object Qlf;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3282 extern Lisp_Object Qlist_formation_error;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3283 extern Lisp_Object Qlistp, Qload, Qlock_shift, Qmacro;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3284 extern Lisp_Object Qmakunbound, Qmalformed_list, Qmalformed_property_list;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3285 extern Lisp_Object Qmark;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3286 extern Lisp_Object Qmnemonic;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3287 extern Lisp_Object Qmono_pixmap_image_instance_p;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3288 extern Lisp_Object Qmouse_leave_buffer_hook;
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3289 extern Lisp_Object Qnatnump, Qnative_layout, Qnetwork_error;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3290 extern Lisp_Object Qno_ascii_cntl, Qno_ascii_eol, Qno_catch;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3291 extern Lisp_Object Qno_conversion, Qno_iso6429;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3292 extern Lisp_Object Qnothing_image_instance_p;
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3293 extern Lisp_Object Qnumber_char_or_marker_p, Qnumberp, Qout_of_memory;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3294 extern Lisp_Object Qoutput_charset_conversion;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3295 extern Lisp_Object Qoverflow_error, Qpoint, Qpointer_glyph_p;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3296 extern Lisp_Object Qpointer_image_instance_p, Qpost_read_conversion;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3297 extern Lisp_Object Qpre_write_conversion, Qprint_length;
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3298 extern Lisp_Object Qprint_string_length, Qprinting_unreadable_object;
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3299 extern Lisp_Object Qprogn, Qprocess_error, Qquit;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3300 extern Lisp_Object Qquote, Qrange_error, Qread_char;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3301 extern Lisp_Object Qread_from_minibuffer, Qreally_early_error_handler;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3302 extern Lisp_Object Qregion_beginning, Qregion_end;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3303 extern Lisp_Object Qrun_hooks, Qsans_modifiers;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3304 extern Lisp_Object Qsave_buffers_kill_emacs;
430
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
3305 extern Lisp_Object Qself_insert_command, Qself_insert_defer_undo;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3306 extern Lisp_Object Qsequencep, Qset, Qsetting_constant;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3307 extern Lisp_Object Qseven, Qshift_jis, Qshort;
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3308 extern Lisp_Object Qsingularity_error, Qsound_error, Qstack_overflow;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3309 extern Lisp_Object Qstandard_input, Qstandard_output;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3310 extern Lisp_Object Qstart_open;
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3311 extern Lisp_Object Qstring_lessp, Qstructure_formation_error, Qsubwindow;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3312 extern Lisp_Object Qsubwindow_image_instance_p;
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3313 extern Lisp_Object Qsyntax_error, Qt, Qtext_conversion_error;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3314 extern Lisp_Object Qtext_image_instance_p;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3315 extern Lisp_Object Qtop_level;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3316 extern Lisp_Object Qtrue_list_p;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3317 extern Lisp_Object Qunbound, Qunderflow_error;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3318 extern Lisp_Object Qunderline, Quser_files_and_directories;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3319 extern Lisp_Object Qvalues;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3320 extern Lisp_Object Qvariable_documentation, Qvariable_domain;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3321 extern Lisp_Object Qvoid_function, Qvoid_variable;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3322 extern Lisp_Object Qwindow_live_p, Qwrong_number_of_arguments;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3323 extern Lisp_Object Qwrong_type_argument, Qyes_or_no_p;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 458
diff changeset
3324 extern Lisp_Object Qgtk;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3325
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3326 #define SYMBOL(fou) extern Lisp_Object fou
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3327 #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
3328 #define SYMBOL_GENERAL(tout_le_monde, est_fou) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3329 extern Lisp_Object tout_le_monde
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3330
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3331 #include "general-slots.h"
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3332
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3333 #undef SYMBOL
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3334 #undef SYMBOL_KEYWORD
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3335 #undef SYMBOL_GENERAL
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3336
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3337 /*--------------- prototypes for variables of type Lisp_Object ------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3338
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
3339 extern Lisp_Object Vactivate_menubar_hook;
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
3340 extern Lisp_Object Vautoload_queue, Vblank_menubar;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3341 extern Lisp_Object Vcharset_ascii, Vcharset_composite, Vcharset_control_1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3342 extern Lisp_Object Vcoding_system_for_read, Vcoding_system_for_write;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3343 extern Lisp_Object Vcoding_system_hash_table, Vcommand_history;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3344 extern Lisp_Object Vcommand_line_args, Vconfigure_info_directory;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3345 extern Lisp_Object Vconfigure_site_directory, Vconfigure_site_module_directory;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3346 extern Lisp_Object Vconsole_list, Vcontrolling_terminal;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3347 extern Lisp_Object Vcurrent_compiled_function_annotation, Vcurrent_load_list;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3348 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
3349 extern Lisp_Object Vdirectory_sep_char, Vdisabled_command_hook;
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
3350 extern Lisp_Object Vdoc_directory, Vinternal_doc_file_name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3351 extern Lisp_Object Vecho_area_buffer, Vemacs_major_version;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3352 extern Lisp_Object Vemacs_minor_version, Vexec_directory, Vexec_path;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3353 extern Lisp_Object Vexecuting_macro, Vfeatures, Vfile_domain;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3354 extern Lisp_Object Vfile_name_coding_system, Vinhibit_quit;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3355 extern Lisp_Object Vinvocation_directory, Vinvocation_name;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3356 extern Lisp_Object Vkeyboard_coding_system, Vlast_command, Vlast_command_char;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3357 extern Lisp_Object Vlast_command_event, Vlast_input_event;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3358 extern Lisp_Object Vload_file_name_internal;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3359 extern Lisp_Object Vload_file_name_internal_the_purecopy, Vload_history;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3360 extern Lisp_Object Vload_path, Vmark_even_if_inactive, Vmenubar_configuration;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3361 extern Lisp_Object Vminibuf_preprompt, Vminibuf_prompt, Vminibuffer_zero;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3362 extern Lisp_Object Vmodule_directory, Vmswindows_downcase_file_names;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3363 extern Lisp_Object Vmswindows_get_true_file_attributes, Vobarray;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3364 extern Lisp_Object Vprint_length, Vprint_level, Vprocess_environment;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3365 extern Lisp_Object Vquit_flag;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3366 extern Lisp_Object Vrecent_keys_ring, Vshell_file_name, Vsite_directory;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3367 extern Lisp_Object Vsite_module_directory;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3368 extern Lisp_Object Vstandard_input, Vstandard_output, Vstdio_str;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3369 extern Lisp_Object Vsynchronous_sounds, Vsystem_name, Vterminal_coding_system;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3370 extern Lisp_Object Vthis_command_keys, Vunread_command_event;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3371 extern Lisp_Object Vx_initial_argv_list;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3372
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3373 #endif /* INCLUDED_lisp_h_ */