aboutsummaryrefslogtreecommitdiff
path: root/src/guile/skribilo/engine.scm
diff options
context:
space:
mode:
authorLudovic Courtès2018-03-30 15:34:38 +0200
committerLudovic Courtès2018-03-30 15:42:53 +0200
commit869c137fd84eddf71b074898ff7210cddc35a877 (patch)
treeff62ebffd26c1aeb341c440505b2f700d44b35e8 /src/guile/skribilo/engine.scm
parent08a4706b2c220048b138fcedfec822a1d319e138 (diff)
downloadskribilo-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.scm10
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)))