From: Joe Neeman Date: Fri, 30 Mar 2007 02:01:11 +0000 (+1000) Subject: Clean up graphviz.scm and remove ly:atexit. X-Git-Tag: release/2.11.23-1~22^2~5 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=e93e62137f606881f3e1350423734523b9812673;p=lilypond.git Clean up graphviz.scm and remove ly:atexit. --- diff --git a/lily/main.cc b/lily/main.cc index 9ff982bcf8..3c0f7ae88e 100644 --- a/lily/main.cc +++ b/lily/main.cc @@ -600,25 +600,3 @@ main (int argc, char **argv, char **envp) /* Only reachable if GUILE exits. That is an error. */ return 1; } - -SCM atexit_list = SCM_EOL; - -LY_DEFINE (ly_atexit, "ly:atexit", - 2, 0, 0, (SCM proc, SCM args), - "Just before exiting, call the procedure given. " -"If this is called multiple times, the procedures are called " -"in LIFO order.") -{ - atexit_list = scm_cons (scm_cons (proc, args), atexit_list); - scm_gc_protect_object (atexit_list); - return SCM_UNSPECIFIED; -} - -LY_DEFINE (ly_do_atexit, "ly:do-atexit", - 0, 0, 0, (), - "Call the atexit procedures.") -{ - for (SCM s = atexit_list; scm_is_pair (s); s = scm_cdr (s)) - scm_apply_0 (scm_caar (s), scm_cdar (s)); - return SCM_UNSPECIFIED; -} diff --git a/ly/graphviz-init.ly b/ly/graphviz-init.ly index 3623d0ace8..cae11b1a29 100644 --- a/ly/graphviz-init.ly +++ b/ly/graphviz-init.ly @@ -22,7 +22,7 @@ #(define (whitelist-grob str) (set! grob-whitelist (cons str grob-whitelist))) -#(define graph (make-graph (format "~a.dot" (ly:parser-output-name parser)))) +#(define graph (make-empty-graph (ly:parser-output-name parser))) #(define (grob-name g) (let* ((meta (ly:grob-property g 'meta)) diff --git a/scm/graphviz.scm b/scm/graphviz.scm index f5db38b7a8..c2801633a8 100644 --- a/scm/graphviz.scm +++ b/scm/graphviz.scm @@ -8,19 +8,21 @@ (define-module (scm graphviz) #:use-module (lily) #:export - (make-graph add-node add-edge add-cluster - graph-write - )) + (make-empty-graph add-node add-edge add-cluster + graph-write + )) -(define (make-graph filename) - #(() () () ())) +(define graph-type (make-record-type "graph" '(nodes edges clusters name))) +(define make-graph (record-constructor graph-type)) +(define (make-empty-graph name) (make-graph '() '() '() name)) -;; fixme: use structs/records. -;; fixme add & use setters. -(define (nodes g) (vector-ref g 1)) -(define (edges g) (vector-ref g 2)) -(define (clusters g) (vector-ref g 3)) +(define nodes (record-accessor graph-type 'nodes)) +(define edges (record-accessor graph-type 'edges)) +(define clusters (record-accessor graph-type 'clusters)) +(define set-nodes! (record-modifier graph-type 'nodes)) +(define set-edges! (record-modifier graph-type 'edges)) +(define set-clusters! (record-modifier graph-type 'clusters)) (define (add-cluster graph node-id cluster-name) (let* ((cs (clusters graph)) @@ -28,21 +30,21 @@ (already-in-cluster (if cluster (cdr cluster) '()))) - (vector-set! graph 3 (assq-set! cs + (set-clusters! graph (assq-set! cs cluster-name (cons node-id already-in-cluster))))) (define (add-node graph label . cluster-name) (let* ((ns (nodes graph)) (id (length ns))) - (vector-set! graph 1 (cons `(,id . ,label) ns)) + (set-nodes! graph (assq-set! ns id label)) (if (and (not (null? cluster-name)) (string? (car cluster-name))) (add-cluster graph id (car cluster-name))) id)) (define (add-edge graph node1 node2) - (vector-set! graph 2 (cons `(,node1 . ,node2) (edges graph)))) + (set-edges! graph (cons `(,node1 . ,node2) (edges graph)))) (define (graph-write graph out) (let ((ns (nodes graph)) diff --git a/scm/lily.scm b/scm/lily.scm index 4afe0fb8be..48d911751a 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -649,7 +649,6 @@ The syntax is the same as `define*-public'." (ly:error (_ "failed files: ~S") (string-join failed)) (exit 1)) (begin - (ly:do-atexit) ;; HACK: be sure to exit with single newline (ly:message "") (exit 0)))))