diff options
author | IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> | 2019-07-15 09:34:48 +0200 |
---|---|---|
committer | IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> | 2019-07-15 09:34:48 +0200 |
commit | d38474bc2411ceea33e718a81ba3d56b627a114a (patch) | |
tree | 3d0d8924df35086199d1ea3395deaee8de1f710d /reactive.scm | |
parent | f9fab3386a764a20c4a8d1069802c760bcfd2dc4 (diff) |
New upstream version 19.3
Diffstat (limited to 'reactive.scm')
-rw-r--r-- | reactive.scm | 31 |
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))))))) + ;;; -------------------------------------------------------------------------------- #| |