aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2021-05-13 11:00:16 +0200
committerThomas White <taw@physics.org>2021-05-13 11:00:16 +0200
commit6e86ea3f962577dca6f5ce703ab22e0ad2390d2b (patch)
treecf12f0651f262df6915a7bb8fb2be82d62523532
parentcecbbeb8dc71d99adbb078a690714011f91f4ce5 (diff)
Avoid mutation of state objects by "set-state-name!"
-rw-r--r--guile/starlet/scanout.scm15
-rw-r--r--guile/starlet/state.scm8
2 files changed, 16 insertions, 7 deletions
diff --git a/guile/starlet/scanout.scm b/guile/starlet/scanout.scm
index 7833076..e7ab623 100644
--- a/guile/starlet/scanout.scm
+++ b/guile/starlet/scanout.scm
@@ -41,6 +41,21 @@
;; List of states being scanned out
(define state-list (make-atomic-box '()))
+;; Association list of names to states
+(define state-names (make-atomic-box '()))
+
+
+(define (get-state-name st)
+ (assq-ref (atomic-box-ref state-names)
+ st))
+
+
+(define (set-state-name! st name)
+ (atomic-box-set! state-names
+ (assq-set! (atomic-box-ref state-names)
+ st
+ name)))
+
;; Patch a new fixture
(define* (patch-real name
diff --git a/guile/starlet/state.scm b/guile/starlet/state.scm
index a889d0c..92bf681 100644
--- a/guile/starlet/state.scm
+++ b/guile/starlet/state.scm
@@ -31,7 +31,6 @@
#:export (<starlet-state>
make-empty-state
get-state-name
- set-state-name!
state-for-each
state-map
clear-state!
@@ -60,12 +59,7 @@
(define-class <starlet-state> (<object>)
(hash-table-box
#:init-form (make-atomic-box (make-hash-table))
- #:getter get-ht-box)
- (name
- #:init-value #f
- #:init-keyword #:name
- #:getter get-state-name
- #:setter set-state-name!))
+ #:getter get-ht-box))
;; The state used to build a new scene for recording