annotate lisp/cl.el @ 5104:868a5349acee

add documentation to frame.c, rearrange some functions to consolidate in related areas -------------------- ChangeLog entries follow: -------------------- src/ChangeLog addition: 2010-03-05 Ben Wing <ben@xemacs.org> * frame.c: * frame.c (frame_live_p): * frame.c (Fframep): * frame.c (Fdisable_frame): * frame.c (Fenable_frame): * frame.c (Fraise_frame): * frame.c (Fframe_name): * frame.c (Fset_frame_height): * frame.c (internal_set_frame_size): * frame.c (adjust_frame_size): Add documentation on the different types of units used to measure frame size. Add section headers to the various sections. Rearrange the location of some functions in the file to keep related functions together. This especially goes for frame-sizing functions (internal_set_frame_size() and adjust_frame_size()), which have been moved so that they form a group with change_frame_size() and change_frame_size_1(). No functionality should change.
author Ben Wing <ben@xemacs.org>
date Fri, 05 Mar 2010 22:50:27 -0600
parents 545ec923b4eb
children 2d0937dc83cf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 446
diff changeset
1 ;;; cl.el --- Common Lisp extensions for XEmacs Lisp
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 ;; Copyright (C) 1993, 1997 Free Software Foundation, Inc.
5066
545ec923b4eb add documentation on keywords to cl*.el
Ben Wing <ben@xemacs.org>
parents: 4995
diff changeset
4 ;; Copyright (C) 2010 Ben Wing.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 ;; Author: Dave Gillespie <daveg@synaptics.com>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 ;; Maintainer: XEmacs Development Team
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 ;; Version: 2.02
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 ;; Keywords: extensions, dumped, lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 ;; This file is part of XEmacs.
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 free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 ;; under the terms of the GNU General Public License as published by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 ;; the Free Software Foundation; either version 2, or (at your option)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 ;; any later version.
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 ;; XEmacs is distributed in the hope that it will be useful, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 ;; General Public License for more details.
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 ;; You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 ;; along with XEmacs; see the file COPYING. If not, write to the Free
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 ;; 02111-1307, USA.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27
2153
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
28 ;;; Synched up with: FSF 21.3.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 ;;; Commentary:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 ;; This file is dumped with XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 ;; These are extensions to Emacs Lisp that provide a degree of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 ;; Common Lisp compatibility, beyond what is already built-in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 ;; in Emacs Lisp.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 ;; This package was written by Dave Gillespie; it is a complete
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 ;; rewrite of Cesar Quiroz's original cl.el package of December 1986.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 ;; Bug reports, comments, and suggestions are welcome!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 ;; This file contains the portions of the Common Lisp extensions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 ;; package which should always be present.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 ;;; Future notes:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 ;; Once Emacs 19 becomes standard, many things in this package which are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 ;; messy for reasons of compatibility can be greatly simplified. For now,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 ;; I prefer to maintain one unified version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 ;;; Change Log:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 ;; Version 2.02 (30 Jul 93):
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 ;; * Added "cl-compat.el" file, extra compatibility with old package.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 ;; * Added `lexical-let' and `lexical-let*'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 ;; * Added `define-modify-macro', `callf', and `callf2'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 ;; * Added `ignore-errors'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 ;; * Changed `(setf (nthcdr N PLACE) X)' to work when N is zero.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 ;; * Merged `*gentemp-counter*' into `*gensym-counter*'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 ;; * Extended `subseq' to allow negative START and END like `substring'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 ;; * Added `in-ref', `across-ref', `elements of-ref' loop clauses.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 ;; * Added `concat', `vconcat' loop clauses.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 ;; * Cleaned up a number of compiler warnings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 ;; Version 2.01 (7 Jul 93):
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 ;; * Added support for FSF version of Emacs 19.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 ;; * Added `add-hook' for Emacs 18 users.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 ;; * Added `defsubst*' and `symbol-macrolet'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 ;; * Added `maplist', `mapc', `mapl', `mapcan', `mapcon'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 ;; * Added `map', `concatenate', `reduce', `merge'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 ;; * Added `revappend', `nreconc', `tailp', `tree-equal'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 ;; * Added `assert', `check-type', `typecase', `typep', and `deftype'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 ;; * Added destructuring and `&environment' support to `defmacro*'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 ;; * Added destructuring to `loop', and added the following clauses:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 ;; `elements', `frames', `overlays', `intervals', `buffers', `key-seqs'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 ;; * Renamed `delete' to `delete*' and `remove' to `remove*'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 ;; * Completed support for all keywords in `remove*', `substitute', etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 ;; * Added `most-positive-float' and company.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 ;; * Fixed hash tables to work with latest Lucid Emacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 ;; * `proclaim' forms are no longer compile-time-evaluating; use `declaim'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 ;; * Syntax for `warn' declarations has changed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 ;; * Improved implementation of `random*'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 ;; * Moved most sequence functions to a new file, cl-seq.el.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 ;; * Moved `eval-when' into cl-macs.el.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 ;; * Moved `pushnew' and `adjoin' to cl.el for most common cases.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 ;; * Moved `provide' forms down to ends of files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 ;; * Changed expansion of `pop' to something that compiles to better code.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 ;; * Changed so that no patch is required for Emacs 19 byte compiler.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 ;; * Made more things dependent on `optimize' declarations.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 ;; * Added a partial implementation of struct print functions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 ;; * Miscellaneous minor changes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 ;; Version 2.00:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 ;; * First public release of this package.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 ;;; Code:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 (defvar cl-emacs-type (cond ((or (and (fboundp 'epoch::version)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 (symbol-value 'epoch::version))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 (string-lessp emacs-version "19")) 18)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 ((string-match "XEmacs" emacs-version)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 'lucid)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 (t 19)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 (defvar cl-optimize-speed 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 (defvar cl-optimize-safety 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 (defvar custom-print-functions nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 "This is a list of functions that format user objects for printing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 Each function is called in turn with three arguments: the object, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 stream, and the print level (currently ignored). If it is able to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 print the object it returns true; otherwise it returns nil and the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 printer proceeds to the next function on the list.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 This variable is not used at present, but it is defined in hopes that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 a future Emacs interpreter will be able to use it.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 ;;; Predicates.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 (defun eql (a b) ; See compiler macro in cl-macs.el
4885
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4783
diff changeset
127 "Return t if the arguments are the same Lisp object, or numerically equal.
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4783
diff changeset
128
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4783
diff changeset
129 They must be of the same type; the difference between `eq' and `eql' is most
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4783
diff changeset
130 relevant when it comes to the non-fixnum number types. In this
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4783
diff changeset
131 implementation, fixnums of the same numeric value are always `eq', but this
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4783
diff changeset
132 is not true for other numeric types, among them floats, bignums and ratios,
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4783
diff changeset
133 if available.
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4783
diff changeset
134
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4783
diff changeset
135 See also `=' (which doesn't require that its arguments be of the same type,
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4783
diff changeset
136 but only accepts numeric arguments, characters and markers) and `equal'."
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4783
diff changeset
137 (or (eq a b) (and (numberp a) (equal a b))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 ;;; Generalized variables. These macros are defined here so that they
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 ;;; can safely be used in .emacs files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 (defmacro incf (place &optional x)
3343
29234c1a76c7 [xemacs-hg @ 2006-04-16 15:54:16 by aidan]
aidan
parents: 2509
diff changeset
143 "Increment PLACE by X (1 by default).
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 PLACE may be a symbol, or any generalized variable allowed by `setf'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 The return value is the incremented value of PLACE."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 (if (symbolp place)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 (list 'setq place (if x (list '+ place x) (list '1+ place)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 ;; XEmacs byte-compiler optimizes (+ FOO 1) to (1+ FOO), so this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 ;; is OK.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 (list 'callf '+ place (or x 1))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 (defmacro decf (place &optional x)
3343
29234c1a76c7 [xemacs-hg @ 2006-04-16 15:54:16 by aidan]
aidan
parents: 2509
diff changeset
153 "Decrement PLACE by X (1 by default).
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 PLACE may be a symbol, or any generalized variable allowed by `setf'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 The return value is the decremented value of PLACE."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 (if (symbolp place)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 (list 'setq place (if x (list '- place x) (list '1- place)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 (list 'callf '- place (or x 1))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 (defmacro pop (place)
3343
29234c1a76c7 [xemacs-hg @ 2006-04-16 15:54:16 by aidan]
aidan
parents: 2509
diff changeset
161 "Remove and return the head of the list stored in PLACE.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 Analogous to (prog1 (car PLACE) (setf PLACE (cdr PLACE))), though more
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 careful about evaluating each argument only once and in the right order.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 PLACE may be a symbol, or any generalized variable allowed by `setf'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 (if (symbolp place)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 `(car (prog1 ,place (setq ,place (cdr ,place))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 (cl-do-pop place)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168
3343
29234c1a76c7 [xemacs-hg @ 2006-04-16 15:54:16 by aidan]
aidan
parents: 2509
diff changeset
169 (defmacro push (newelt listname)
3355
721daee0fcd8 [xemacs-hg @ 2006-04-23 20:12:25 by aidan]
aidan
parents: 3343
diff changeset
170 "Add NEWELT at the beginning of the list stored in LISTNAME.
721daee0fcd8 [xemacs-hg @ 2006-04-23 20:12:25 by aidan]
aidan
parents: 3343
diff changeset
171 Analogous to (setf LISTNAME (cons NEWELT LISTNAME)), though more careful
721daee0fcd8 [xemacs-hg @ 2006-04-23 20:12:25 by aidan]
aidan
parents: 3343
diff changeset
172 about evaluating each argument only once and in the right order. LISTNAME
721daee0fcd8 [xemacs-hg @ 2006-04-23 20:12:25 by aidan]
aidan
parents: 3343
diff changeset
173 may be a symbol, or any generalized variable allowed by `setf'; that is, it
721daee0fcd8 [xemacs-hg @ 2006-04-23 20:12:25 by aidan]
aidan
parents: 3343
diff changeset
174 does not necessarily have to be a list, though `push' is most often used on
721daee0fcd8 [xemacs-hg @ 2006-04-23 20:12:25 by aidan]
aidan
parents: 3343
diff changeset
175 lists. "
3343
29234c1a76c7 [xemacs-hg @ 2006-04-16 15:54:16 by aidan]
aidan
parents: 2509
diff changeset
176 (if (symbolp listname) `(setq ,listname (cons ,newelt ,listname))
29234c1a76c7 [xemacs-hg @ 2006-04-16 15:54:16 by aidan]
aidan
parents: 2509
diff changeset
177 (list 'callf2 'cons newelt listname)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178
3343
29234c1a76c7 [xemacs-hg @ 2006-04-16 15:54:16 by aidan]
aidan
parents: 2509
diff changeset
179 (defmacro pushnew (newelt listname &rest keys)
3355
721daee0fcd8 [xemacs-hg @ 2006-04-23 20:12:25 by aidan]
aidan
parents: 3343
diff changeset
180 "Add NEWELT at the beginning of LISTNAME, unless it's already in LISTNAME.
3343
29234c1a76c7 [xemacs-hg @ 2006-04-16 15:54:16 by aidan]
aidan
parents: 2509
diff changeset
181 Like (push NEWELT LISTNAME), except that the list is unmodified if NEWELT is
29234c1a76c7 [xemacs-hg @ 2006-04-16 15:54:16 by aidan]
aidan
parents: 2509
diff changeset
182 `eql' to an element already on the list.
5066
545ec923b4eb add documentation on keywords to cl*.el
Ben Wing <ben@xemacs.org>
parents: 4995
diff changeset
183 Keywords supported: :test :test-not :key
545ec923b4eb add documentation on keywords to cl*.el
Ben Wing <ben@xemacs.org>
parents: 4995
diff changeset
184 See `member*' for the meaning of :test, :test-not and :key."
3343
29234c1a76c7 [xemacs-hg @ 2006-04-16 15:54:16 by aidan]
aidan
parents: 2509
diff changeset
185 (if (symbolp listname) (list 'setq listname
29234c1a76c7 [xemacs-hg @ 2006-04-16 15:54:16 by aidan]
aidan
parents: 2509
diff changeset
186 (list* 'adjoin newelt listname keys))
29234c1a76c7 [xemacs-hg @ 2006-04-16 15:54:16 by aidan]
aidan
parents: 2509
diff changeset
187 (list* 'callf2 'adjoin newelt listname keys)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 (defun cl-set-elt (seq n val)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 (if (listp seq) (setcar (nthcdr n seq) val) (aset seq n val)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 (defun cl-set-nthcdr (n list x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 (if (<= n 0) x (setcdr (nthcdr (1- n) list) x) list))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 (defun cl-set-buffer-substring (start end val)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 (save-excursion (delete-region start end)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 (goto-char start)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 (insert val)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 val))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 (defun cl-set-substring (str start end val)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 (if end (if (< end 0) (incf end (length str)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 (setq end (length str)))
2136
9d6ec778e1e8 [xemacs-hg @ 2004-06-17 03:08:28 by james]
james
parents: 2092
diff changeset
204 (if (< start 0) (incf start (length str)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 (concat (and (> start 0) (substring str 0 start))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 val
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 (and (< end (length str)) (substring str end))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 ;;; Control structures.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 ;; The macros `when' and `unless' are so useful that we want them to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 ;; ALWAYS be available. So they've been moved from cl.el to eval.c.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 ;; Note: FSF Emacs moved them to subr.el in FSF 20.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215
2153
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
216 (defalias 'cl-map-extents 'map-extents)
428
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 ;;; Blocks and exits.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220
4677
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 3355
diff changeset
221 ;; This used to be #'identity, but that didn't preserve multiple values in
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 3355
diff changeset
222 ;; interpreted code. #'and isn't great either, there's no error on too many
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 3355
diff changeset
223 ;; arguments passed to it when interpreted. Fortunately most of the places
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 3355
diff changeset
224 ;; where cl-block-wrapper is called are generated from old, established
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 3355
diff changeset
225 ;; macros, so too many arguments resulting from human error is unlikely; and
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 3355
diff changeset
226 ;; the byte compile handler in cl-macs.el warns if more than one arg is
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 3355
diff changeset
227 ;; passed to it.
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 3355
diff changeset
228 (defalias 'cl-block-wrapper 'and)
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 3355
diff changeset
229
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 (defalias 'cl-block-throw 'throw)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231
4677
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 3355
diff changeset
232 ;;; XEmacs; multiple values are in eval.c and cl-macs.el.
2153
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
233
4677
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 3355
diff changeset
234 ;;; We no longer support `multiple-value-apply', which was ill-conceived to
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 3355
diff changeset
235 ;;; start with, is not specified by Common Lisp, and which nothing uses,
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 3355
diff changeset
236 ;;; according to Google Code Search, as of Sat Mar 14 23:31:35 GMT 2009.
2153
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
237
4677
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 3355
diff changeset
238 (make-obsolete 'multiple-value-apply 'multiple-value-call)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 ;;; Macros.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 (defvar cl-macro-environment nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 ;; XEmacs: we renamed the internal function to macroexpand-internal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 ;; to avoid doc-file problems.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 (defvar cl-old-macroexpand (prog1 (symbol-function 'macroexpand-internal)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 (defalias 'macroexpand 'cl-macroexpand)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 (defun cl-macroexpand (cl-macro &optional cl-env)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 "Return result of expanding macros at top level of FORM.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 If FORM is not a macro call, it is returned unchanged.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 Otherwise, the macro is expanded and the expansion is considered
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 in place of FORM. When a non-macro-call results, it is returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
254 The second optional arg ENVIRONMENT specifies an environment of macro
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 definitions to shadow the loaded ones for use in file byte-compilation."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 (let ((cl-macro-environment cl-env))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 (while (progn (setq cl-macro (funcall cl-old-macroexpand cl-macro cl-env))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 (and (symbolp cl-macro)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 (cdr (assq (symbol-name cl-macro) cl-env))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 (setq cl-macro (cadr (assq (symbol-name cl-macro) cl-env))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 cl-macro))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262
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 ;;; Declarations.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 (defvar cl-compiling-file nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 (defun cl-compiling-file ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 (or cl-compiling-file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 ;; XEmacs change
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 ; (and (boundp 'outbuffer) (bufferp (symbol-value 'outbuffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 ; (equal (buffer-name (symbol-value 'outbuffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 ; " *Compiler Output*"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 (and (boundp 'byte-compile-outbuffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 (bufferp (symbol-value 'byte-compile-outbuffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 (equal (buffer-name (symbol-value 'byte-compile-outbuffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 " *Compiler Output*"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 (defvar cl-proclaims-deferred nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 (defun proclaim (spec)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 (if (fboundp 'cl-do-proclaim) (cl-do-proclaim spec t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 (push spec cl-proclaims-deferred))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 (defmacro declaim (&rest specs)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 (let ((body (mapcar (function (lambda (x) (list 'proclaim (list 'quote x))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 specs)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 (if (cl-compiling-file) (list* 'eval-when '(compile load eval) body)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 (cons 'progn body)))) ; avoid loading cl-macs.el for eval-when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 ;;; Symbols.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 (defun cl-random-time ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 (let* ((time (copy-sequence (current-time-string))) (i (length time)) (v 0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 (while (>= (decf i) 0) (setq v (+ (* v 3) (aref time i))))
2509
6a9afa282c8e [xemacs-hg @ 2005-01-26 09:53:28 by ben]
ben
parents: 2367
diff changeset
298 (if-fboundp 'coerce-number
6a9afa282c8e [xemacs-hg @ 2005-01-26 09:53:28 by ben]
ben
parents: 2367
diff changeset
299 (coerce-number v 'fixnum)
1983
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 613
diff changeset
300 v)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 (defvar *gensym-counter* (* (logand (cl-random-time) 1023) 100))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303
2153
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
304 ;; XEmacs change: gensym and gentemp moved here from cl-macs.el
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
305 (defun gensym (&optional arg)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
306 "Generate a new uninterned symbol.
2071
0f60caa73962 [xemacs-hg @ 2004-05-11 11:33:08 by stephent]
stephent
parents: 1983
diff changeset
307 The name is made by appending a number to a prefix. If ARG is a string, it
0f60caa73962 [xemacs-hg @ 2004-05-11 11:33:08 by stephent]
stephent
parents: 1983
diff changeset
308 is the prefix, otherwise the prefix defaults to \"G\". If ARG is an integer,
0f60caa73962 [xemacs-hg @ 2004-05-11 11:33:08 by stephent]
stephent
parents: 1983
diff changeset
309 the internal counter is reset to that number before creating the name.
0f60caa73962 [xemacs-hg @ 2004-05-11 11:33:08 by stephent]
stephent
parents: 1983
diff changeset
310 There is no way to specify both using this function."
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
311 (let ((prefix (if (stringp arg) arg "G"))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
312 (num (if (integerp arg) arg
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
313 (prog1 *gensym-counter*
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
314 (setq *gensym-counter* (1+ *gensym-counter*))))))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
315 (make-symbol (format "%s%d" prefix num))))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
316
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
317 (defun gentemp (&optional arg)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
318 "Generate a new interned symbol with a unique name.
2071
0f60caa73962 [xemacs-hg @ 2004-05-11 11:33:08 by stephent]
stephent
parents: 1983
diff changeset
319 The name is made by appending a number to ARG, default \"G\".
0f60caa73962 [xemacs-hg @ 2004-05-11 11:33:08 by stephent]
stephent
parents: 1983
diff changeset
320 If ARG is not a string, it is ignored."
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
321 (let ((prefix (if (stringp arg) arg "G"))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
322 name)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
323 (while (intern-soft (setq name (format "%s%d" prefix *gensym-counter*)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
324 (setq *gensym-counter* (1+ *gensym-counter*)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
325 (intern name)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 ;;; Numbers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328
4885
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4783
diff changeset
329 ;; XEmacs change: ditch floatp-safe.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 442
diff changeset
331 (defun plusp (number)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 "Return t if NUMBER is positive."
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 442
diff changeset
333 (> number 0))
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 442
diff changeset
334
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 442
diff changeset
335 (defun minusp (number)
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 442
diff changeset
336 "Return t if NUMBER is negative."
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 442
diff changeset
337 (< number 0))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 442
diff changeset
339 (defun oddp (integer)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 "Return t if INTEGER is odd."
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 442
diff changeset
341 (eq (logand integer 1) 1))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 442
diff changeset
343 (defun evenp (integer)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 "Return t if INTEGER is even."
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 442
diff changeset
345 (eq (logand integer 1) 0))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346
2153
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
347 ;; XEmacs addition
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
348 (defalias 'cl-abs 'abs)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 (defvar *random-state* (vector 'cl-random-state-tag -1 30 (cl-random-time)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 ;;; The following are set by code in cl-extra.el
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 (defconst most-positive-float nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 "The float closest in value to positive infinity.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 (defconst most-negative-float nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 "The float closest in value to negative infinity.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 (defconst least-positive-float nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 "The positive float closest in value to 0.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 (defconst least-negative-float nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 "The negative float closest in value to 0.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 (defconst least-positive-normalized-float nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 (defconst least-negative-normalized-float nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 (defconst float-epsilon nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 (defconst float-negative-epsilon nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 ;;; Sequence functions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 (defalias 'copy-seq 'copy-sequence)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370
2153
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
371 (defalias 'svref 'aref)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 ;;; List functions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 ;; These functions are made known to the byte-compiler by cl-macs.el
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 ;; and turned into efficient car and cdr bytecodes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 (defalias 'first 'car)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 (defalias 'rest 'cdr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 (defalias 'endp 'null)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381
2153
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
382 ;; XEmacs change: make it a real function
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 (defun second (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 "Return the second element of the list LIST."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 (car (cdr x)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 (defun third (x)
2153
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
388 "Return the third element of the list X."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 (car (cdr (cdr x))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 (defun fourth (x)
2153
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
392 "Return the fourth element of the list X."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 (nth 3 x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 (defun fifth (x)
2153
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
396 "Return the fifth element of the list X."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 (nth 4 x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 (defun sixth (x)
2153
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
400 "Return the sixth element of the list X."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 (nth 5 x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 (defun seventh (x)
2153
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
404 "Return the seventh element of the list X."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 (nth 6 x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 (defun eighth (x)
2153
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
408 "Return the eighth element of the list X."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 (nth 7 x))
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 (defun ninth (x)
2153
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
412 "Return the ninth element of the list X."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 (nth 8 x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 (defun tenth (x)
2153
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
416 "Return the tenth element of the list X."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 (nth 9 x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418
2153
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
419 ;; XEmacs change: Emacs defines caar, cadr, cdar, and cddr in subr.el.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 (defun caar (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 "Return the `car' of the `car' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 (car (car x)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 (defun cadr (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 "Return the `car' of the `cdr' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 (car (cdr x)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 (defun cdar (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 "Return the `cdr' of the `car' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 (cdr (car x)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 (defun cddr (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 "Return the `cdr' of the `cdr' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 (cdr (cdr x)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 (defun caaar (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437 "Return the `car' of the `car' of the `car' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 (car (car (car x))))
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 (defun caadr (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 "Return the `car' of the `car' of the `cdr' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 (car (car (cdr x))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 (defun cadar (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 "Return the `car' of the `cdr' of the `car' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 (car (cdr (car x))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 (defun caddr (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 "Return the `car' of the `cdr' of the `cdr' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 (car (cdr (cdr x))))
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 (defun cdaar (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 "Return the `cdr' of the `car' of the `car' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 (cdr (car (car x))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 (defun cdadr (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 "Return the `cdr' of the `car' of the `cdr' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 (cdr (car (cdr x))))
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 (defun cddar (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 "Return the `cdr' of the `cdr' of the `car' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 (cdr (cdr (car x))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464 (defun cdddr (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 "Return the `cdr' of the `cdr' of the `cdr' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 (cdr (cdr (cdr x))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 (defun caaaar (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 "Return the `car' of the `car' of the `car' of the `car' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 (car (car (car (car x)))))
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 (defun caaadr (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 "Return the `car' of the `car' of the `car' of the `cdr' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 (car (car (car (cdr x)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 (defun caadar (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 "Return the `car' of the `car' of the `cdr' of the `car' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 (car (car (cdr (car x)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 (defun caaddr (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 "Return the `car' of the `car' of the `cdr' of the `cdr' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 (car (car (cdr (cdr x)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 (defun cadaar (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 "Return the `car' of the `cdr' of the `car' of the `car' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 (car (cdr (car (car x)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 (defun cadadr (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 "Return the `car' of the `cdr' of the `car' of the `cdr' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 (car (cdr (car (cdr x)))))
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 (defun caddar (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 "Return the `car' of the `cdr' of the `cdr' of the `car' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 (car (cdr (cdr (car x)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 (defun cadddr (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 "Return the `car' of the `cdr' of the `cdr' of the `cdr' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 (car (cdr (cdr (cdr x)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 (defun cdaaar (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 "Return the `cdr' of the `car' of the `car' of the `car' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 (cdr (car (car (car x)))))
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 (defun cdaadr (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 "Return the `cdr' of the `car' of the `car' of the `cdr' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 (cdr (car (car (cdr x)))))
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 (defun cdadar (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 "Return the `cdr' of the `car' of the `cdr' of the `car' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 (cdr (car (cdr (car x)))))
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 (defun cdaddr (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 "Return the `cdr' of the `car' of the `cdr' of the `cdr' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 (cdr (car (cdr (cdr x)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 (defun cddaar (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 "Return the `cdr' of the `cdr' of the `car' of the `car' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518 (cdr (cdr (car (car x)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 (defun cddadr (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 "Return the `cdr' of the `cdr' of the `car' of the `cdr' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522 (cdr (cdr (car (cdr x)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524 (defun cdddar (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525 "Return the `cdr' of the `cdr' of the `cdr' of the `car' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 (cdr (cdr (cdr (car x)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 (defun cddddr (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 "Return the `cdr' of the `cdr' of the `cdr' of the `cdr' of X."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530 (cdr (cdr (cdr (cdr x)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532 ;;; `last' is implemented as a C primitive, as of 1998-11
2153
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
533 ;;(defun last* (x &optional n)
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
534 ;; "Returns the last link in the list LIST.
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
535 ;;With optional argument N, returns Nth-to-last link (default 1)."
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
536 ;; (if n
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
537 ;; (let ((m 0) (p x))
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
538 ;; (while (consp p) (incf m) (pop p))
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
539 ;; (if (<= n 0) p
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
540 ;; (if (< n m) (nthcdr (- m n) x) x)))
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
541 ;; (while (consp (cdr x)) (pop x))
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
542 ;; x))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 (defun list* (arg &rest rest) ; See compiler macro in cl-macs.el
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 "Return a new list with specified args as elements, cons'd to last arg.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546 Thus, `(list* A B C D)' is equivalent to `(nconc (list A B C) D)', or to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547 `(cons A (cons B (cons C D)))'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
548 (cond ((not rest) arg)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
549 ((not (cdr rest)) (cons arg (car rest)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
550 (t (let* ((n (length rest))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
551 (copy (copy-sequence rest))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
552 (last (nthcdr (- n 2) copy)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553 (setcdr last (car (cdr last)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
554 (cons arg copy)))))
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 (defun ldiff (list sublist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557 "Return a copy of LIST with the tail SUBLIST removed."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 (let ((res nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 (while (and (consp list) (not (eq list sublist)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 (push (pop list) res))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561 (nreverse res)))
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 ;;; `copy-list' is implemented as a C primitive, as of 1998-11
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 ;(defun copy-list (list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566 ; "Return a copy of a list, which may be a dotted list.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567 ;The elements of the list are not copied, just the list structure itself."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568 ; (if (consp list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 ; (let ((res nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
570 ; (while (consp list) (push (pop list) res))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571 ; (prog1 (nreverse res) (setcdr res list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572 ; (car list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574 (defun cl-maclisp-member (item list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
575 (while (and list (not (equal item (car list)))) (setq list (cdr list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
576 list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578 (defalias 'cl-member 'memq) ; for compatibility with old CL package
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 (defalias 'cl-floor 'floor*)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580 (defalias 'cl-ceiling 'ceiling*)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 (defalias 'cl-truncate 'truncate*)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582 (defalias 'cl-round 'round*)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583 (defalias 'cl-mod 'mod*)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585 (defun adjoin (cl-item cl-list &rest cl-keys) ; See compiler macro in cl-macs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586 "Return ITEM consed onto the front of LIST only if it's not already there.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587 Otherwise, return LIST unmodified.
5066
545ec923b4eb add documentation on keywords to cl*.el
Ben Wing <ben@xemacs.org>
parents: 4995
diff changeset
588 Keywords supported: :test :test-not :key
545ec923b4eb add documentation on keywords to cl*.el
Ben Wing <ben@xemacs.org>
parents: 4995
diff changeset
589 See `member*' for the meaning of :test, :test-not and :key."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 (cond ((or (equal cl-keys '(:test eq))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 (and (null cl-keys) (not (numberp cl-item))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592 (if (memq cl-item cl-list) cl-list (cons cl-item cl-list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
593 ((or (equal cl-keys '(:test equal)) (null cl-keys))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594 (if (member cl-item cl-list) cl-list (cons cl-item cl-list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595 (t (apply 'cl-adjoin cl-item cl-list cl-keys))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597 (defun subst (cl-new cl-old cl-tree &rest cl-keys)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598 "Substitute NEW for OLD everywhere in TREE (non-destructively).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599 Return a copy of TREE with all elements `eql' to OLD replaced by NEW.
5066
545ec923b4eb add documentation on keywords to cl*.el
Ben Wing <ben@xemacs.org>
parents: 4995
diff changeset
600 Keywords supported: :test :test-not :key
545ec923b4eb add documentation on keywords to cl*.el
Ben Wing <ben@xemacs.org>
parents: 4995
diff changeset
601 See `member*' for the meaning of :test, :test-not and :key."
4885
6772ce4d982b Fix hash tables, #'member*, #'assoc*, #'eql compiler macros if bignums
Aidan Kehoe <kehoea@parhasard.net>
parents: 4783
diff changeset
602 (if (or cl-keys (and (numberp cl-old) (not (fixnump cl-old))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603 (apply 'sublis (list (cons cl-old cl-new)) cl-tree cl-keys)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 (cl-do-subst cl-new cl-old cl-tree)))
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 (defun cl-do-subst (cl-new cl-old cl-tree)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607 (cond ((eq cl-tree cl-old) cl-new)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608 ((consp cl-tree)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609 (let ((a (cl-do-subst cl-new cl-old (car cl-tree)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 (d (cl-do-subst cl-new cl-old (cdr cl-tree))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 (if (and (eq a (car cl-tree)) (eq d (cdr cl-tree)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612 cl-tree (cons a d))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
613 (t cl-tree)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
615 (defun acons (a b c)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
616 "Return a new alist created by adding (KEY . VALUE) to ALIST."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
617 (cons (cons a b) c))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
618
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
619 (defun pairlis (a b &optional c) (nconc (mapcar* 'cons a b) c))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
620
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
621
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622 ;;; Miscellaneous.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624 ;; XEmacs change
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
625 (define-error 'cl-assertion-failed "Assertion failed")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
626
2153
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
627 ;; XEmacs change: omit the autoload rules; we handle those a different way
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629 ;;; Define data for indentation and edebug.
4995
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4885
diff changeset
630 (mapc
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631 #'(lambda (entry)
4995
8431b52e43b1 Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4885
diff changeset
632 (mapc
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633 #'(lambda (func)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 (put func 'lisp-indent-function (nth 1 entry))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 (put func 'lisp-indent-hook (nth 1 entry))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 (or (get func 'edebug-form-spec)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 (put func 'edebug-form-spec (nth 2 entry))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 (car entry)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 '(((defun* defmacro*) defun)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 ((function*) nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641 (&or symbolp ([&optional 'macro] 'lambda (&rest sexp) &rest form)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 ((eval-when) 1 (sexp &rest form))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643 ((when unless) 1 (&rest form))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644 ((declare) nil (&rest sexp))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 ((the) 1 (sexp &rest form))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646 ((case ecase typecase etypecase) 1 (form &rest (sexp &rest form)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 ((block return-from) 1 (sexp &rest form))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648 ((return) nil (&optional form))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 ((do do*) 2 ((&rest &or symbolp (symbolp &optional form form))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650 (form &rest form)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 &rest form))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652 ((dolist dotimes) 1 ((symbolp form &rest form) &rest form))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 ((do-symbols) 1 ((symbolp form &optional form form) &rest form))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 ((do-all-symbols) 1 ((symbolp form &optional form) &rest form))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655 ((psetq setf psetf) nil edebug-setq-form)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 ((progv) 2 (&rest form))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657 ((flet labels macrolet) 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658 ((&rest (sexp sexp &rest form)) &rest form))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 ((symbol-macrolet lexical-let lexical-let*) 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660 ((&rest &or symbolp (symbolp form)) &rest form))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661 ((multiple-value-bind) 2 ((&rest symbolp) &rest form))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662 ((multiple-value-setq) 1 ((&rest symbolp) &rest form))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 ((incf decf remf pop push pushnew shiftf rotatef) nil (&rest form))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 ((letf letf*) 1 ((&rest (&rest form)) &rest form))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 ((callf destructuring-bind) 2 (sexp form &rest form))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666 ((callf2) 3 (sexp form form &rest form))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667 ((loop) defun (&rest &or symbolp form))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 ((ignore-errors) 0 (&rest form))))
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 ;;; This goes here so that cl-macs can find it if it loads right now.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
672 (provide 'cl-19) ; usage: (require 'cl-19 "cl")
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675 ;;; Things to do after byte-compiler is loaded.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676 ;;; As a side effect, we cause cl-macs to be loaded when compiling, so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
677 ;;; that the compiler-macros defined there will be present.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
679 (defvar cl-hacked-flag nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680 (defun cl-hack-byte-compiler ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681 (if (and (not cl-hacked-flag) (fboundp 'byte-compile-file-form))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682 (progn
2153
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
683 (setq cl-hacked-flag t) ; Do it first, to prevent recursion.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
684 (when (not (fboundp 'cl-compile-time-init))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
685 (load "cl-macs" nil t))
2153
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
686 (cl-compile-time-init)))) ; In cl-macs.el.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
688 ;;; Try it now in case the compiler has already been loaded.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
689 (cl-hack-byte-compiler)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
690
4683
0cc9d22c3732 Be more reliable about loading cl-macs at byte-compile time, cl.el.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4677
diff changeset
691 ;;; Also make a hook in case compiler is loaded after this file.
0cc9d22c3732 Be more reliable about loading cl-macs at byte-compile time, cl.el.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4677
diff changeset
692 (add-hook 'bytecomp-load-hook 'cl-hack-byte-compiler)
428
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 ;;; The following ensures that packages which expect the old-style cl.el
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695 ;;; will be happy with this one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
697 (provide 'cl)
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 (run-hooks 'cl-load-hook)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700
2153
393039450288 [xemacs-hg @ 2004-06-26 21:25:23 by james]
james
parents: 2136
diff changeset
701 ;;; arch-tag: 5f07fa74-f153-4524-9303-21f5be125851
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702 ;;; cl.el ends here