Changeset 6739
- Timestamp:
- Jun 15, 2007, 5:57:39 PM (17 years ago)
- File:
-
- 1 edited
-
trunk/ccl/lib/read.lisp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ccl/lib/read.lisp
r6636 r6739 203 203 nil 204 204 (if arg 205 (let ((pair (assoc arg %read-objects%))) ;Not assq, could be bignum! 205 (let ((pair 206 (if (listp %read-objects%) 207 (assoc arg %read-objects%) ;Not assq, could be bignum! 208 (gethash arg %read-objects%)))) 206 209 (if pair 207 210 (cdr pair) 208 211 (%err-disp $xnordlbl arg))) 209 212 (%err-disp $xrdndarg char))))) 213 214 (defparameter *alist-hash-table-cutoff* 32) 210 215 211 216 (set-dispatch-macro-character … … 215 220 (cond (*read-suppress* (values)) 216 221 ((null arg) (%err-disp $xrdndarg char)) 217 ((assoc arg %read-objects%) ;Not assq, could be bignum! 222 ((if (listp %read-objects%) 223 (assoc arg %read-objects%) ;Not assq, could be bignum! 224 (gethash arg %read-objects%)) 218 225 (%err-disp $xduprdlbl arg)) 219 226 (t (setq lab (cons arg nil)) 220 (push (%rplacd lab lab) %read-objects%) 227 (%rplacd lab lab) 228 (if (listp %read-objects%) 229 (if (< (length %read-objects%) *alist-hash-table-cutoff*) 230 (push lab %read-objects%) 231 (let* ((new (make-hash-table :shared nil))) 232 (dolist (pair %read-objects%) 233 (setf (gethash (car pair) new) pair)) 234 (setf (gethash arg new) lab) 235 (setq %read-objects% new))) 236 (setf (gethash arg %read-objects%) lab)) 221 237 (setq form (read stream t nil t)) 222 238 (when (eq form lab) ;#n= #n#. No can do. … … 225 241 (let ((scanned nil)) 226 242 (labels ((circle-subst (tree) 227 (if (memq tree %read-objects%) 243 (if (if (listp %read-objects%) 244 (assoc tree %read-objects%) 245 (gethash tree %read-objects%)) 228 246 (progn 229 247 (unless (memq tree scanned)
Note:
See TracChangeset
for help on using the changeset viewer.
