Changeset 12017


Ignore:
Timestamp:
06/14/09 15:32:51 (14 years ago)
Author:
ehuelsmann
Message:

Performance improvement for non-recursive #= and ##:

In the non-recursive case it's not required to
recurse into each of the branches of the structure.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/src/org/armedbear/lisp/boot.lisp

    r11749 r12017  
    252252           :format-arguments (list label)))
    253253  (let* ((tag (gensym))
    254          (*sharp-sharp-alist* (acons label tag *sharp-sharp-alist*))
     254         (*sharp-sharp-alist* (cons (list label tag nil) *sharp-sharp-alist*))
    255255         (obj (read stream t nil t)))
    256256    (when (eq obj tag)
     
    260260             :format-arguments (list label)))
    261261    (push (list label tag obj) *sharp-equal-alist*)
    262     (let ((*sharp-equal-circle-table* (make-hash-table :test 'eq :size 20)))
    263       (circle-subst *sharp-equal-alist* obj))))
     262    (when (third (car *sharp-sharp-alist*)) ;; set to T on circularity
     263      (let ((*sharp-equal-circle-table* (make-hash-table :test 'eq :size 20)))
     264        (circle-subst *sharp-equal-alist* obj)))
     265    obj))
    264266
    265267(defun sharp-sharp (stream ignore label)
     
    277279                   :format-control "Object is not labelled #~S#"
    278280                   :format-arguments (list label)))
    279           (cdr pair)))))
     281          (setf (third pair) t)
     282          (second pair)))))
    280283
    281284(set-dispatch-macro-character #\# #\= #'sharp-equal +standard-readtable+)
Note: See TracChangeset for help on using the changeset viewer.