Support for context vars without macros
This commit is contained in:
parent
af16ee29b6
commit
b4cdfc341a
7 changed files with 91 additions and 94 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue