Implement tasks and plays
This commit is contained in:
parent
d5593f4e3d
commit
c290a5caea
6 changed files with 191 additions and 65 deletions
40
modules/ordo/context.scm
Normal file
40
modules/ordo/context.scm
Normal file
|
@ -0,0 +1,40 @@
|
|||
(define-module (ordo context)
|
||||
#:use-module (srfi srfi-1)
|
||||
#:use-module (srfi srfi-9)
|
||||
#:use-module (srfi srfi-26)
|
||||
#:export (make-context
|
||||
context?
|
||||
get-context-scratch-dir
|
||||
set-context-scratch-dir!
|
||||
add-context-triggers!
|
||||
register-context-var!
|
||||
context-ref
|
||||
resolve-context-ref
|
||||
resolve-context-refs))
|
||||
|
||||
(define-record-type <context>
|
||||
(make-context)
|
||||
context?
|
||||
(scratch-dir get-context-scratch-dir set-context-scratch-dir!)
|
||||
(vars get-context-vars set-context-vars!)
|
||||
(triggers get-context-triggers set-context-triggers!))
|
||||
|
||||
(define-record-type <context-ref>
|
||||
(context-ref name)
|
||||
context-ref?
|
||||
(name var-name))
|
||||
|
||||
(define (resolve-context-ref ctx v)
|
||||
(if (context-ref? v)
|
||||
(assoc-ref (get-context-vars ctx) (var-name v))
|
||||
v))
|
||||
|
||||
(define (resolve-context-refs ctx args)
|
||||
(map (cut resolve-context-ref ctx <>) args))
|
||||
|
||||
(define (add-context-triggers! ctx triggers)
|
||||
(when triggers
|
||||
(set-context-triggers! ctx (fold cons (or (get-context-triggers ctx) '()) triggers))))
|
||||
|
||||
(define (register-context-var! ctx var-name val)
|
||||
(set-context-vars! ctx (assoc-set! (get-context-vars ctx) var-name val)))
|
Loading…
Add table
Add a link
Reference in a new issue