A discussion on #lisp the other day pointed out that destructively
modifying &rest argument lists is not kosher. format-graph-from-roots
does just that.
Would anyone object to me committing the following patch?
--- graph-formatting.lisp 4 Mar 2007 22:26:22 -0000 1.20
+++ graph-formatting.lisp 16 Sep 2007 16:25:26 -0000
@@ -115,9 +115,11 @@ (define-graph-type :directed-graph digra
(define-graph-type :digraph digraph-graph-output-record)
;;;; Entry
+(defun format-graph-from-root (root-object &rest other-args)
+ (apply #'format-graph-from-roots (list root-object) other-args))
(defun format-graph-from-roots (root-objects object-printer
inferior-producer
- &rest graph-options
+ &rest rest-args
&key stream orientation cutoff-depth
merge-duplicates duplicate-key
duplicate-test
generation-separation
@@ -128,6 +130,9 @@ (defun format-graph-from-roots (root-obj
graph-type (move-cursor t)
&allow-other-keys)
(declare (ignore orientation generation-separation
within-generation-separation center-nodes))
+ ;; we were destructively modifying the &rest arg, which isn't safe,
+ ;; so I introduced the copy-list [2007/09/07:rpg]
+ (let ((graph-options (copy-list rest-args)))
;; Mungle some arguments
(check-type cutoff-depth (or null integer))
(check-type root-objects sequence)
@@ -184,7 +189,7 @@ (defun format-graph-from-roots (root-obj
(setf (stream-cursor-position stream)
(values (bounding-rectangle-max-x graph-output-record)
(bounding-rectangle-max-y graph-output-record))))
- graph-output-record)))
+ graph-output-record))))
(defun format-graph-from-root (root &rest rest)
(apply #'format-graph-from-roots (list root) rest))
@@ -248,7 +253,7 @@ (defclass standard-graph-node-output-rec
(object
:initarg :object
:reader graph-node-object)
- ;; internal slots for the graph layout algorithmn
+ ;; internal slots for the graph layout algorithm
(minor-size
:initform nil
:accessor graph-node-minor-size
Best,
R