Support for context vars without macros

This commit is contained in:
Ray Miller 2025-01-07 18:09:10 +00:00
parent af16ee29b6
commit b4cdfc341a
Signed by: ray
GPG key ID: 043F786C4CD681B8
7 changed files with 91 additions and 94 deletions

View file

@ -2,33 +2,30 @@
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-9)
#:use-module (srfi srfi-26)
#:export (context
#:export (make-context
context?
context-connection
context-scratch-dir
set-context-scratch-dir!
add-context-triggers!
get-context-triggers
context-triggered?
register-context-var!
resolve-context-refs))
context-ref))
(define-record-type <context>
(make-context scratch-dir vars)
(make-context connection vars scratch-dir)
context?
(connection context-connection)
(scratch-dir context-scratch-dir set-context-scratch-dir!)
(vars context-vars set-context-vars!)
(triggers context-triggers set-context-triggers!))
(define* (context #:key scratch-dir init-vars)
(make-context scratch-dir init-vars))
;; TODO: (resolve-content-refs ctx (lambda (x) x)) fails
(define-syntax resolve-context-refs
(syntax-rules ($)
((_ ctx ($ x))
(assoc-ref (context-vars ctx) x))
((_ ctx (f x ...))
(f (resolve-context-refs ctx x) ...))
((_ ctx x) x)))
(define (context-ref ctx var-name)
(let ((kv (assoc var-name (context-vars ctx))))
(if kv
(cdr kv)
(error (format #f "failed to resolve context reference: ~a" var-name)))))
(define (add-context-triggers! ctx triggers)
(when triggers