diff options
author | Ludovic Courtès | 2018-03-30 15:34:38 +0200 |
---|---|---|
committer | Ludovic Courtès | 2018-03-30 15:42:53 +0200 |
commit | 869c137fd84eddf71b074898ff7210cddc35a877 (patch) | |
tree | ff62ebffd26c1aeb341c440505b2f700d44b35e8 /src/guile/skribilo/engine.scm | |
parent | 08a4706b2c220048b138fcedfec822a1d319e138 (diff) | |
download | skribilo-869c137fd84eddf71b074898ff7210cddc35a877.tar.gz skribilo-869c137fd84eddf71b074898ff7210cddc35a877.tar.lz skribilo-869c137fd84eddf71b074898ff7210cddc35a877.zip |
Do not mutate lists that may be literal.
On Guile 2.2 this would lead to a segmentation fault or a 'set-car!'
error ("expecting mutable pair") on 2.2.3+.
* src/guile/skribilo/engine.scm (engine-custom-set!): Do not mutate
CUSTOMS.
* src/guile/skribilo/resolve.scm (do-resolve! <pair>): Do not mutate AST.
(do-resolve! <node>): Do not mutate OPTIONS.
(do-resolve! <document>): Do not mutate the list of customs.
Diffstat (limited to 'src/guile/skribilo/engine.scm')
-rw-r--r-- | src/guile/skribilo/engine.scm | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/guile/skribilo/engine.scm b/src/guile/skribilo/engine.scm index fb1bcb2..5f82044 100644 --- a/src/guile/skribilo/engine.scm +++ b/src/guile/skribilo/engine.scm @@ -29,6 +29,7 @@ :use-module (ice-9 optargs) :use-module (ice-9 format) + :use-module (srfi srfi-1) :autoload (srfi srfi-34) (raise guard) :use-module (srfi srfi-35) :autoload (srfi srfi-39) (make-parameter) @@ -350,11 +351,10 @@ otherwise the requested engine is returned." (define (engine-custom-set! e id val) - (let* ((customs (slot-ref e 'customs)) - (c (assq id customs))) - (if (pair? c) - (set-car! (cdr c) val) - (slot-set! e 'customs (cons (list id val) customs))))) + (let ((customs (slot-ref e 'customs))) + (slot-set! e 'customs + (cons (list id val) + (alist-delete id customs eq?))))) (define (engine-custom-add! e id val) (let ((old (engine-custom e id))) |