annotate lisp/ilisp/cl-ilisp.lisp @ 164:4e0740e5aab2

Added tag r20-3b8 for changeset 0132846995bd
author cvs
date Mon, 13 Aug 2007 09:43:39 +0200
parents b82b59fe008d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
1 ;;; -*- Mode: Lisp -*-
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
2
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
3 ;;; cl-ilisp.lisp --
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
4
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
5 ;;; This file is part of ILISP.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
6 ;;; Version: 5.8
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
7 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
8 ;;; Copyright (C) 1990, 1991, 1992, 1993 Chris McConnell
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
9 ;;; 1993, 1994 Ivan Vasquez
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
10 ;;; 1994, 1995, 1996 Marco Antoniotti and Rick Busdiecker
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
11 ;;; 1996 Marco Antoniotti and Rick Campbell
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
12 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
13 ;;; Other authors' names for which this Copyright notice also holds
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
14 ;;; may appear later in this file.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
15 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
16 ;;; Send mail to 'ilisp-request@naggum.no' to be included in the
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
17 ;;; ILISP mailing list. 'ilisp@naggum.no' is the general ILISP
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
18 ;;; mailing list were bugs and improvements are discussed.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
19 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
20 ;;; ILISP is freely redistributable under the terms found in the file
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
21 ;;; COPYING.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
22
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
23
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
24
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
25 ;;; Common Lisp initializations
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
26 ;;; Author: Chris McConnell, ccm@cs.cmu.edu
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
27
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
28 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
29 ;;; ange-ftp hack added by ivan Wed Mar 10 12:30:15 1993
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
30 ;;; ilisp-errors *gc-verbose* addition ivan Tue Mar 16 03:21:51 1993
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
31 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
32 ;;; Rcs_Info: clisp.lisp,v 1.26 1993/09/03 02:05:07 ivan Rel $
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
33 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
34 ;;; Revision 1.19 1993/08/24 22:01:52 ivan
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
35 ;;; Use defpackage instead of just IN-PACKAGE.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
36 ;;; Renamed FUNCTION to FUN in ilisp-arglist to get around CMUCL 17b bug.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
37 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
38 ;;; Revision 1.16 1993/06/29 05:51:35 ivan
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
39 ;;; Added Ed Gamble's #'readtable-case fix and Hans Chalupsky's
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
40 ;;; allegro-4.1 addition.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
41 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
42 ;;; Revision 1.8 1993/06/28 00:57:42 ivan
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
43 ;;; Stopped using 'COMPILED-FUNCTION-P for compiled check.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
44 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
45 ;;; Revision 1.3 1993/03/16 23:22:10 ivan
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
46 ;;; Added breakp arg to ilisp-trace.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
47 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
48 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
49
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
50
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
51 #+(or allegro-v4.0 allegro-v4.1)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
52 (eval-when (compile load eval)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
53 (setq excl:*cltl1-in-package-compatibility-p* t))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
54
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
55
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
56 (in-package "ILISP")
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
57
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
58 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
59 ;;; GCL 2.2 doesn't have defpackage (yet) so we need to put the export
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
60 ;;; here. (toy@rtp.ericsson.se)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
61 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
62 ;;; Please note that while the comment and the fix posted by Richard
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
63 ;;; Toy are correct, they are deprecated by at least one of the ILISP
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
64 ;;; maintainers. :) By removing the 'nil' in the following #+, you
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
65 ;;; will fix the problem but will not do a good service to the CL
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
66 ;;; community. The right thing to do is to install DEFPACKAGE in your
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
67 ;;; GCL and to write the GCL maintainers and to ask them to
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
68 ;;; incorporate DEFPACKAGE in their standard builds.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
69 ;;; Marco Antoniotti <marcoxa@icsi.berkeley.edu> 19960715
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
70 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
71
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
72 #+(and nil gcl)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
73 (export '(ilisp-errors
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
74 ilisp-save
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
75 ilisp-restore
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
76 ilisp-symbol-name
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
77 ilisp-find-symbol
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
78 ilisp-find-package
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
79 ilisp-eval
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
80 ilisp-compile
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
81 ilisp-describe
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
82 ilisp-inspect
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
83 ilisp-arglist
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
84 ilisp-documentation
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
85 ilisp-macroexpand
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
86 ilisp-macroexpand-1
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
87 ilisp-trace
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
88 ilisp-untrace
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
89 ilisp-compile-file
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
90 ilisp-casify
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
91 ilisp-matching-symbols))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
92
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
93
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
94 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
95 (defvar *ilisp-old-result* nil "Used for save/restore of top level values.")
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
96
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
97 #+:ANSI-CL
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
98 (defun special-form-p (symbol)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
99 "Backward compatibility for non ANSI CL's."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
100 (special-operator-p symbol))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
101
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
102 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
103 (defmacro ilisp-handler-case (expression &rest handlers)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
104 "Evaluate EXPRESSION using HANDLERS to handle errors."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
105 handlers
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
106 (if (macro-function 'handler-case)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
107 `(handler-case ,expression ,@handlers)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
108 #+allegro `(excl::handler-case ,expression ,@handlers)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
109 #+lucid `(lucid::handler-case ,expression ,@handlers)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
110 #-(or allegro lucid) expression))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
111
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
112 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
113 (defun ilisp-readtable-case (readtable)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
114 (if (fboundp 'readtable-case)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
115 (funcall #'readtable-case readtable)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
116 #+allegro (case excl:*current-case-mode*
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
117 (:case-insensitive-upper :upcase)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
118 (:case-insensitive-lower :downcase)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
119 (otherwise :preserve))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
120 #-allegro :upcase))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
121
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
122 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
123 (defmacro ilisp-errors (form)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
124 "Handle errors when evaluating FORM."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
125 `(let ((*standard-output* *terminal-io*)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
126 (*error-output* *terminal-io*)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
127 #+cmu
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
128 (ext:*gc-verbose* nil) ; cmulisp outputs "[GC ...]" which
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
129 ; doesn't read well...
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
130 #+ecl
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
131 (sys:*gc-verbose* nil) ; ecolisp also outputs "[GC ...]"
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
132 )
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
133 (princ " ") ;Make sure we have output
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
134 (ilisp-handler-case
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
135 ,form
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
136 (error (error)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
137 (with-output-to-string (string)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
138 (format string "ILISP: ~A" error))))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
139
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
140
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
141 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
142 (defun ilisp-save ()
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
143 "Save the current state of the result history."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
144 (declare (special / // /// + ++ +++))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
145 (unless *ilisp-old-result*
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
146 (setq *ilisp-old-result* (list /// // +++ ++ + /))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
147
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
148 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
149 (defun ilisp-restore ()
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
150 "Restore the old result history."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
151 (declare (special / // /// + ++ +++ * ** -))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
152 (setq // (pop *ilisp-old-result*)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
153 ** (first //)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
154 / (pop *ilisp-old-result*)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
155 * (first /)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
156 ++ (pop *ilisp-old-result*)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
157 + (pop *ilisp-old-result*)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
158 - (pop *ilisp-old-result*))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
159 (values-list (pop *ilisp-old-result*)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
160
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
161 ;;; ilisp-symbol-name --
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
162 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
163 ;;; ':capitalize' case added under suggestion by Rich Mallory.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
164 (defun ilisp-symbol-name (symbol-name)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
165 "Return SYMBOL-NAME with the appropriate case as a symbol."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
166 (case (ilisp-readtable-case *readtable*)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
167 (:upcase (string-upcase symbol-name))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
168 (:downcase (string-downcase symbol-name))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
169 (:capitalize (string-capitalize symbol-name))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
170 (:preserve symbol-name)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
171
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
172 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
173 (defun ilisp-find-package (package-name)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
174 "Return package PACKAGE-NAME or the current package."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
175 (if (string-equal package-name "nil")
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
176 *package*
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
177 (or (find-package (ilisp-symbol-name package-name))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
178 (error "Package ~A not found" package-name))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
179
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
180 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
181 (defun ilisp-find-symbol (symbol-name package-name)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
182 "Return the symbol associated with SYMBOL-NAME in PACKAGE-NAME trying to
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
183 handle case issues intelligently."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
184 (find-symbol (ilisp-symbol-name symbol-name)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
185 (ilisp-find-package package-name)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
186
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
187
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
188 ;;; The following two functions were in version 5.5.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
189 ;;; They disappeared in version 5.6. I am putting them back in the
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
190 ;;; distribution in order to make use of them later if the need
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
191 ;;; arises.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
192 ;;; Marco Antoniotti: Jan 2 1995
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
193 #|
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
194 (defun ilisp-filename-hack (filename)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
195 "Strip `/user@machine:' prefix from filename."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
196 ;; Ivan's hack for getting away with dumb /ivan@bu-conx:/foo/bar/baz
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
197 ;; filenames...
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
198 (let ((at-location (position #\@ filename))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
199 (colon-location (position #\: filename)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
200 (if (and at-location colon-location)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
201 (subseq filename (1+ colon-location))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
202 filename)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
203
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
204
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
205 (defun ilisp-read-form (form package)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
206 "Read string FORM in PACKAGE and return the resulting form."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
207 (let ((*package* (ilisp-find-package package)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
208 (read-from-string form)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
209 |#
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
210
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
211 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
212 (defun ilisp-eval (form package filename)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
213 "Evaluate FORM in PACKAGE recording FILENAME as the source file."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
214 (princ " ")
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
215 ;; Ivan's hack for getting away with dumb /ivan@bu-conx:/foo/bar/baz
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
216 ;; filenames...
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
217 (let* ((at-location (position #\@ filename))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
218 (colon-location (position #\: filename))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
219 (filename
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
220 (if (and at-location colon-location)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
221 (subseq filename (1+ colon-location))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
222 filename))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
223 (*package* (ilisp-find-package package))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
224 #+allegro (excl::*source-pathname* filename)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
225 #+allegro (excl::*redefinition-warnings* nil)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
226 #+lucid (lucid::*source-pathname*
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
227 (if (probe-file filename)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
228 (truename filename)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
229 (merge-pathnames filename)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
230 #+lucid (lucid::*redefinition-action* nil)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
231 #+lispworks (compiler::*input-pathname* (merge-pathnames filename))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
232 #+lispworks (compiler::*warn-on-non-top-level-defun* nil)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
233 ;; The LW entries are a mix of Rich Mallory and Jason
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
234 ;; Trenouth suggestions
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
235 ;; Marco Antoniotti: Jan 2 1995.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
236 )
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
237 filename
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
238 (eval (read-from-string form))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
239
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
240 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
241 (defun ilisp-compile (form package filename)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
242 "Compile FORM in PACKAGE recording FILENAME as the source file."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
243 (princ " ")
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
244 ;; This makes sure that function forms are compiled
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
245 ;; NOTE: Rich Mallory proposed a variation of the next piece of
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
246 ;; code. for the time being we stick to the following simpler code.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
247 ;; Marco Antoniotti: Jan 2 1995.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
248 #-lucid
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
249 (ilisp-eval
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
250 (format nil "(funcall (compile nil '(lisp:lambda () ~A)))"
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
251 form)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
252 package
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
253 filename)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
254
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
255 ;; The following piece of conditional code is left in the
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
256 ;; distribution just for historical purposes.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
257 ;; It will disappear in the next release.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
258 ;; Marco Antoniotti: Jan 2 1995.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
259 #+lucid-ilisp-5.6
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
260 (labels ((compiler (form env)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
261 (if (and (consp form)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
262 (eq (first form) 'function)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
263 (consp (second form)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
264 #-LCL3.0
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
265 (evalhook `(compile nil ,form) nil nil env)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
266 #+LCL3.0
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
267 ;; If we have just compiled a named-lambda, and the
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
268 ;; name didn't make it in to the procedure object,
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
269 ;; then stuff the appropriate symbol in to the
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
270 ;; procedure object.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
271 (let* ((proc (evalhook `(compile nil ,form)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
272 nil nil env))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
273 (old-name (and proc (sys:procedure-ref proc 1)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
274 (lambda (second form))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
275 (name (and (eq (first lambda)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
276 'lucid::named-lambda)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
277 (second lambda))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
278 (when (or (null old-name)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
279 (and (listp old-name)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
280 (eq :internal (car old-name))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
281 (setf (sys:procedure-ref proc 1) name))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
282 proc)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
283 (evalhook form #'compiler nil env))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
284 (let ((*evalhook* #'compiler))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
285 (ilisp-eval form package filename)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
286 #+lucid
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
287 ;; Following form is a patch provided by Christopher Hoover
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
288 ;; <ch@lks.csi.com>
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
289 (let ((*package* (ilisp-find-package package))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
290 (lcl:*source-pathname* (if (probe-file filename)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
291 (truename filename)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
292 (merge-pathnames filename)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
293 (lcl:*redefinition-action* nil))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
294 (with-input-from-string (s form)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
295 (lucid::compile-in-core-from-stream s)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
296 (values)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
297 )
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
298
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
299 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
300 (defun ilisp-describe (sexp package)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
301 "Describe SEXP in PACKAGE."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
302 (ilisp-errors
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
303 (let ((*package* (ilisp-find-package package)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
304 (describe (eval (read-from-string sexp))))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
305
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
306 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
307 (defun ilisp-inspect (sexp package)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
308 "Inspect SEXP in PACKAGE."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
309 (ilisp-errors
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
310 (let ((*package* (ilisp-find-package package)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
311 (inspect (eval (read-from-string sexp))))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
312
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
313 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
314 (defun ilisp-arglist (symbol package)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
315 (ilisp-errors
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
316 (let ((fn (ilisp-find-symbol symbol package))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
317 (*print-length* nil)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
318 (*print-pretty* t)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
319 (*package* (ilisp-find-package package)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
320 (cond ((null fn)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
321 (format t "Symbol ~s not present in ~s." symbol package))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
322 ((not (fboundp fn))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
323 (format t "~s: undefined~%" fn))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
324 (t
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
325 (print-function-arglist fn)))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
326 (values))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
327
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
328
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
329 (defun print-function-arglist (fn)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
330 "Pretty arglist printer"
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
331 (let* ((a (get-function-arglist fn))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
332 (arglist (ldiff a (member '&aux a)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
333 (desc (ilisp-function-short-description fn)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
334 (format t "~&~s~a" fn (or desc ""))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
335 (write-string ": ")
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
336 (if arglist
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
337 (write arglist :case :downcase :escape nil)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
338 (write-string "()"))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
339 (terpri)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
340
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
341
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
342
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
343 (defun ilisp-generic-function-p (symbol)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
344 (let ((generic-p
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
345 (find-symbol "GENERIC-FUNCTION-P"
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
346 (or (find-package "PCL")
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
347 *package*))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
348 (and generic-p
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
349 (fboundp generic-p)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
350 (funcall generic-p symbol))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
351
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
352
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
353
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
354 (defun ilisp-function-short-description (symbol)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
355 (cond ((macro-function symbol)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
356 " (Macro)")
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
357 ((special-form-p symbol)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
358 " (Special Form)")
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
359 ((ilisp-generic-function-p symbol)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
360 " (Generic)")))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
361
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
362
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
363
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
364 (defun get-function-arglist (symbol)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
365 (let ((fun (symbol-function symbol)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
366 (cond ((ilisp-generic-function-p symbol)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
367 (funcall
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
368 (find-symbol "GENERIC-FUNCTION-PRETTY-ARGLIST"
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
369 (or (find-package "PCL") *package*))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
370 fun))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
371 (t
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
372 #+allegro
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
373 (excl::arglist symbol)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
374
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
375 #+(or ibcl kcl ecl gcl)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
376 (help symbol)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
377
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
378 #+lucid
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
379 (lucid::arglist symbol)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
380
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
381 #+lispworks
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
382 (system::function-lambda-list symbol)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
383
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
384 #-(or allegro lucid kcl ibcl ecl)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
385 (documentation symbol 'function)))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
386
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
387 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
388 (defun ilisp-documentation (symbol package type)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
389 "Return the TYPE documentation for SYMBOL in PACKAGE. If TYPE is
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
390 \(qualifiers* (class ...)), the appropriate method will be found."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
391 (ilisp-errors
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
392 (let* ((real-symbol (ilisp-find-symbol symbol package))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
393 (type (if (and (not (zerop (length type)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
394 (eq (elt type 0) #\())
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
395 (let ((*package* (ilisp-find-package package)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
396 (read-from-string type))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
397 (ilisp-find-symbol type package))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
398 (when (listp type)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
399 (setq real-symbol
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
400 (funcall
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
401 (find-symbol "FIND-METHOD" (or (find-package "CLOS")
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
402 (find-package "PCL")
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
403 *package*))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
404 (symbol-function real-symbol)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
405 (reverse
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
406 (let ((quals nil))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
407 (dolist (entry type quals)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
408 (if (listp entry)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
409 (return quals)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
410 (setq quals (cons entry quals))))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
411 (reverse
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
412 (let ((types nil))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
413 (dolist (class (first (last type)) types)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
414 (setq types
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
415 (cons (funcall
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
416 (find-symbol "FIND-CLASS"
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
417 (or (find-package "CLOS")
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
418 (find-package "PCL")
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
419 *package*))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
420 class) types))))))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
421 (if real-symbol
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
422 (if (symbolp real-symbol)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
423 (documentation real-symbol type)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
424 ;; Prevent compiler complaints
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
425 (eval `(documentation ,real-symbol)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
426 (format nil "~A has no ~A documentation" symbol type)))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
427
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
428 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
429 (defun ilisp-macroexpand (expression package)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
430 "Macroexpand EXPRESSION as long as the top level function is still a
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
431 macro."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
432 (ilisp-errors
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
433 (let ((*print-length* nil)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
434 (*print-level* nil)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
435 (*package* (ilisp-find-package package)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
436 (pprint (#-allegro macroexpand #+allegro excl::walk
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
437 (read-from-string expression))))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
438
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
439 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
440 (defun ilisp-macroexpand-1 (expression package)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
441 "Macroexpand EXPRESSION once."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
442 (ilisp-errors
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
443 (let ((*print-length* nil)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
444 (*print-level* nil)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
445 (*package* (ilisp-find-package package)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
446 (pprint (macroexpand-1 (read-from-string expression))))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
447
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
448 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
449 #-lispworks
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
450 (defun ilisp-trace (symbol package breakp)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
451 "Trace SYMBOL in PACKAGE."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
452 (declare (ignore breakp)) ; No way to do this in CL.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
453 (ilisp-errors
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
454 (let ((real-symbol (ilisp-find-symbol symbol package)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
455 (when real-symbol (eval `(trace ,real-symbol))))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
456
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
457 ;;; Jason Trenouth: SEP 6 94 -- LispWorks can trace-break
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
458 #+lispworks
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
459 (defun ilisp-trace (symbol package breakp)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
460 "Trace SYMBOL in PACKAGE."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
461 (ilisp-errors
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
462 (let ((real-symbol (ilisp-find-symbol symbol package)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
463 breakp ;; idiom for (declare (ignorable breakp))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
464 (when real-symbol (eval `(trace (,real-symbol :break breakp)))))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
465
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
466
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
467
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
468 (defun ilisp-untrace (symbol package)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
469 "Untrace SYMBOL in PACKAGE."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
470 (ilisp-errors
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
471 (let ((real-symbol (ilisp-find-symbol symbol package)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
472 (when real-symbol (eval `(untrace ,real-symbol))))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
473
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
474 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
475 (defun ilisp-compile-file (file extension)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
476 "Compile FILE putting the result in FILE+EXTENSION."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
477 (ilisp-errors
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
478 (compile-file file
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
479 :output-file
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
480 (merge-pathnames (make-pathname :type extension) file))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
481
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
482 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
483 (defun ilisp-casify (pattern string lower-p upper-p)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
484 "Return STRING with its characters converted to the case of PATTERN,
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
485 continuing with the last case beyond the end."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
486 (cond (lower-p (string-downcase string))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
487 (upper-p (string-upcase string))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
488 (t
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
489 (let (case)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
490 (concatenate
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
491 'string
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
492 (map 'string
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
493 #'(lambda (p s)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
494 (setq case (if (upper-case-p p)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
495 #'char-upcase
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
496 #'char-downcase))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
497 (funcall case s))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
498 pattern string)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
499 (map 'string case (subseq string (length pattern))))))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
500
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
501 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
502 (defun ilisp-words (string)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
503 "Return STRING broken up into words. Each word is (start end
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
504 delimiter)."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
505 (do* ((length (length string))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
506 (start 0)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
507 (end t)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
508 (words nil))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
509 ((null end) (nreverse words))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
510 (if (setq end (position-if-not #'alphanumericp string :start start))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
511 (setq words (cons (list end (1+ end) t)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
512 (if (= start end)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
513 words
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
514 (cons (list start end nil) words)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
515 start (1+ end))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
516 (setq words (cons (list start length nil) words)))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
517
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
518 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
519 (defun ilisp-match-words (string pattern words)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
520 "Match STRING to PATTERN using WORDS."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
521 (do* ((strlen (length string))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
522 (words words (cdr words))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
523 (word (first words) (first words))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
524 (start1 (first word) (first word))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
525 (end1 (second word) (second word))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
526 (delimiter (third word) (third word))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
527 (len (- end1 start1) (and word (- end1 start1)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
528 (start2 0)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
529 (end2 len))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
530 ((or (null word) (null start2)) start2)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
531 (setq end2 (+ start2 len)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
532 start2
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
533 (if delimiter
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
534 (position (elt pattern start1) string :start start2)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
535 (when (and (<= end2 strlen)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
536 (string= pattern string
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
537 :start1 start1 :end1 end1
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
538 :start2 start2 :end2 end2))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
539 (1- end2))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
540 (when start2 (incf start2))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
541
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
542 ;;;
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
543 (defun ilisp-matching-symbols (string package &optional (function-p nil)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
544 (external-p nil)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
545 (prefix-p nil))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
546 "Return a list of the symbols that have STRING as a prefix in
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
547 PACKAGE. FUNCTION-P indicates that only symbols with a function value
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
548 should be considered. EXTERNAL-P indicates that only external symbols
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
549 should be considered. PREFIX-P means that partial matches should not
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
550 be considered. The returned strings have the same case as the
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
551 original string."
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
552 (ilisp-errors
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
553 (let* ((lower-p (notany #'upper-case-p string))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
554 (upper-p (notany #'lower-case-p string))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
555 (no-casify (eq (ilisp-readtable-case *readtable*) :preserve))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
556 (symbol-string (ilisp-symbol-name string))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
557 (length (length string))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
558 (results nil)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
559 (*print-length* nil)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
560 (*package* (ilisp-find-package package)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
561 (labels
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
562 (
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
563 ;; Check SYMBOL against PATTERN
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
564 (check-symbol (symbol pattern)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
565 (let ((name (symbol-name symbol)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
566 (when (and (or (not function-p) (fboundp symbol))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
567 (>= (length name) length)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
568 (string= pattern name :end2 length))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
569 (push (list (if no-casify
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
570 name
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
571 (ilisp-casify pattern name lower-p upper-p)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
572 results))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
573 ;; Check SYMBOL against PATTERN using WORDS
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
574 (check-symbol2 (symbol pattern words)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
575 (let ((name (symbol-name symbol)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
576 (when (and (or (not function-p) (fboundp symbol))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
577 (ilisp-match-words name pattern words))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
578 (push (list (if no-casify
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
579 name
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
580 (ilisp-casify pattern name lower-p upper-p)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
581 results)))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
582 (if external-p
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
583 (do-external-symbols (symbol *package*)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
584 (check-symbol symbol symbol-string))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
585 (progn
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
586 ;; KCL does not go over used symbols.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
587 #+(or kcl ibcl ecl)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
588 (dolist (used-package (package-use-list *package*))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
589 (do-external-symbols (symbol used-package)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
590 (check-symbol symbol symbol-string)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
591 (do-symbols (symbol *package*)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
592 (check-symbol symbol symbol-string))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
593 (unless (or results prefix-p)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
594 (let ((words (ilisp-words symbol-string)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
595 (if external-p
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
596 (do-external-symbols (symbol *package*)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
597 (check-symbol2 symbol symbol-string words))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
598 (progn
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
599 ;; KCL does not go over used symbols.
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
600 #+(or kcl ibcl ecl)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
601 (dolist (used-package (package-use-list *package*))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
602 (do-external-symbols (symbol used-package)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
603 (check-symbol2 symbol symbol-string words)))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
604 (do-symbols (symbol *package*)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
605 (check-symbol2 symbol symbol-string words))))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
606 (prin1 results)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
607 nil))))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
608
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
609
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
610 (eval-when (load eval)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
611 (when
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
612 #+cmu (eval:interpreted-function-p #'ilisp-matching-symbols)
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
613 #-cmu (not (compiled-function-p #'ilisp-matching-symbols))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
614 (format *standard-output*
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
615 "\"ILISP: File is not compiled, use M-x ilisp-compile-inits\"")))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
616
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents:
diff changeset
617 ;;; end of file -- cl-ilisp.lisp --