summaryrefslogtreecommitdiff
path: root/reactive.scm
diff options
context:
space:
mode:
authorIOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>2019-07-15 09:34:48 +0200
committerIOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>2019-07-15 09:34:48 +0200
commitd38474bc2411ceea33e718a81ba3d56b627a114a (patch)
tree3d0d8924df35086199d1ea3395deaee8de1f710d /reactive.scm
parentf9fab3386a764a20c4a8d1069802c760bcfd2dc4 (diff)
New upstream version 19.3
Diffstat (limited to 'reactive.scm')
-rw-r--r--reactive.scm31
1 files changed, 12 insertions, 19 deletions
diff --git a/reactive.scm b/reactive.scm
index 1438f1b..9696682 100644
--- a/reactive.scm
+++ b/reactive.scm
@@ -51,7 +51,6 @@
(define slot-expr-env c-pointer-weak2)
(define (slot symbol expr env expr-env) (c-pointer 0 symbol expr env expr-env))
-
(define (symbol->let symbol env)
;; return let in which symbol lives (not necessarily curlet)
(if (not (let? env))
@@ -60,17 +59,13 @@
env
(symbol->let symbol (outlet env)))))
-
(define (setter-update cp) ; cp: (slot var expr env expr-env)
;; when var set, all other vars dependent on it need to be set also, watching out for GC'd followers
- (let ((var (slot-symbol cp))
- (env (slot-env cp))
- (expr (slot-expr cp)))
- (when (and (let? (slot-env cp)) ; when slot-env is GC'd, the c-pointer field is set to #f (by the GC)
- (let? (slot-expr-env cp)))
- (let ((new-val (eval expr (slot-expr-env cp))))
- (when (let? (slot-env cp))
- (let-set! env var new-val))))))
+ (when (and (let? (slot-env cp)) ; when slot-env is GC'd, the c-pointer field is set to #f (by the GC)
+ (let? (slot-expr-env cp)))
+ (let-set! (slot-env cp)
+ (slot-symbol cp)
+ (eval (slot-expr cp) (slot-expr-env cp)))))
(define (slot-equal? cp1 cp2)
@@ -79,12 +74,11 @@
(define (setter-remove cp lst)
;; if reactive-set! called again on a variable, its old setters need to remove the now obsolete set of that variable
- (if (null? lst)
- ()
- (if (slot-equal? cp (car lst))
- (cdr lst)
- (cons (car lst)
- (setter-remove cp (cdr lst))))))
+ (map (lambda (c)
+ (if (slot-equal? cp c)
+ (values)
+ c))
+ lst))
(define* (make-setter var env (followers ()) (setters ()) (expr ()) expr-env)
@@ -258,9 +252,8 @@
(cons cp setter-followers)))))
setters))))))
vars inits)))
- `(let ,vars/inits
- ,@reacts
- ,@body)))))
+ (cons 'let (cons vars/inits (append reacts body)))))))
+
;;; --------------------------------------------------------------------------------
#|