Remove :template in favour of ->preserve
This commit is contained in:
parent
ef66c1d358
commit
40c26f006e
|
@ -12,15 +12,19 @@
|
||||||
(define-field value 0)
|
(define-field value 0)
|
||||||
(define reporter (report-stats REPORT_EVERY))
|
(define reporter (report-stats REPORT_EVERY))
|
||||||
(send! k (hash 'getter
|
(send! k (hash 'getter
|
||||||
(ref (during* (action (observer)
|
(embedded
|
||||||
(log-info "observer ~v" observer)
|
(ref (during* #:name 'subscription-handler
|
||||||
(at observer (assert (value))))))
|
(action (observer)
|
||||||
|
(log-info "observer ~v" observer)
|
||||||
|
(at (embedded-value observer) (assert (value)))))))
|
||||||
'setter
|
'setter
|
||||||
(ref (entity #:message
|
(embedded
|
||||||
(action (new-value)
|
(ref (entity #:name 'update-handler
|
||||||
(reporter new-value)
|
#:message
|
||||||
(when (= new-value LIMIT) (stop-facet root-facet))
|
(action (new-value)
|
||||||
(value new-value)))))))))
|
(reporter new-value)
|
||||||
|
(when (= new-value LIMIT) (stop-facet root-facet))
|
||||||
|
(value new-value))))))))))
|
||||||
|
|
||||||
(define client
|
(define client
|
||||||
(action (getter setter)
|
(action (getter setter)
|
||||||
|
@ -29,17 +33,21 @@
|
||||||
(define root-facet this-facet)
|
(define root-facet this-facet)
|
||||||
(define count 0)
|
(define count 0)
|
||||||
(at getter
|
(at getter
|
||||||
(assert (ref (entity #:assert
|
(assert (embedded
|
||||||
(action (_value _handle)
|
(ref (entity #:name 'termination-detector
|
||||||
(set! count (+ count 1)))
|
#:assert
|
||||||
#:retract
|
(action (_value _handle)
|
||||||
(action (_handle)
|
(set! count (+ count 1)))
|
||||||
(set! count (- count 1))
|
#:retract
|
||||||
(when (zero? count)
|
(action (_handle)
|
||||||
(log-info "Client detected box termination")
|
(set! count (- count 1))
|
||||||
(stop-facet root-facet))))))
|
(when (zero? count)
|
||||||
(assert (ref (entity #:assert
|
(log-info "Client detected box termination")
|
||||||
(action (value _handle) (send! setter (+ value 1))))))))))
|
(stop-facet root-facet)))))))
|
||||||
|
(assert (embedded
|
||||||
|
(ref (entity #:name 'update-handler
|
||||||
|
#:assert
|
||||||
|
(action (value _handle) (send! setter (+ value 1)))))))))))
|
||||||
|
|
||||||
(module+ main
|
(module+ main
|
||||||
(time
|
(time
|
||||||
|
@ -47,10 +55,12 @@
|
||||||
(define root-facet this-facet)
|
(define root-facet this-facet)
|
||||||
(define disarm (facet-prevent-inert-check! this-facet))
|
(define disarm (facet-prevent-inert-check! this-facet))
|
||||||
(box this-turn
|
(box this-turn
|
||||||
(ref (entity #:message
|
(ref (entity #:name 'box-boot-handler
|
||||||
|
#:message
|
||||||
(action (refs)
|
(action (refs)
|
||||||
(log-info "refs ~v" refs)
|
(log-info "refs ~v" refs)
|
||||||
(match-define (hash-table ('getter g) ('setter s)) refs)
|
(match-define (hash-table ('getter (embedded g))
|
||||||
|
('setter (embedded s))) refs)
|
||||||
(client this-turn g s)
|
(client this-turn g s)
|
||||||
(stop-facet root-facet))))
|
(stop-facet root-facet))))
|
||||||
500000
|
500000
|
||||||
|
|
|
@ -11,8 +11,7 @@
|
||||||
assertion-struct
|
assertion-struct
|
||||||
message-struct
|
message-struct
|
||||||
|
|
||||||
:pattern
|
:pattern)
|
||||||
:template)
|
|
||||||
|
|
||||||
(require (except-in "actor.rkt" actor-system))
|
(require (except-in "actor.rkt" actor-system))
|
||||||
(require "syntax.rkt")
|
(require "syntax.rkt")
|
||||||
|
@ -23,6 +22,6 @@
|
||||||
(define-syntax-rule (assertion-struct item ...) (struct item ... #:prefab))
|
(define-syntax-rule (assertion-struct item ...) (struct item ... #:prefab))
|
||||||
(define-syntax-rule (message-struct item ...) (struct item ... #:prefab))
|
(define-syntax-rule (message-struct item ...) (struct item ... #:prefab))
|
||||||
|
|
||||||
(require (only-in "pattern.rkt" :pattern :template))
|
(require (only-in "pattern.rkt" :pattern))
|
||||||
|
|
||||||
(module reader syntax/module-reader syndicate/lang)
|
(module reader syntax/module-reader syndicate/lang)
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
analyse-pattern-bindings)
|
analyse-pattern-bindings)
|
||||||
define-preserves-pattern
|
define-preserves-pattern
|
||||||
:pattern
|
:pattern
|
||||||
:template
|
|
||||||
|
|
||||||
pattern->constant-values
|
pattern->constant-values
|
||||||
pattern->constant-paths
|
pattern->constant-paths
|
||||||
|
@ -53,10 +52,6 @@
|
||||||
(syntax-case s ()
|
(syntax-case s ()
|
||||||
[(_ field-stxs ...) pattern-stx]
|
[(_ field-stxs ...) pattern-stx]
|
||||||
[_ (raise-syntax-error 'ctor-stx "Invalid pattern")])]
|
[_ (raise-syntax-error 'ctor-stx "Invalid pattern")])]
|
||||||
['template
|
|
||||||
(syntax-case s ()
|
|
||||||
[(_ field-stxs ...)
|
|
||||||
(syntax (->preserve (ctor-stx field-stxs ...)))])]
|
|
||||||
['bindings
|
['bindings
|
||||||
(syntax-case s ()
|
(syntax-case s ()
|
||||||
[(_ field-stxs ...) bindings-stx]
|
[(_ field-stxs ...) bindings-stx]
|
||||||
|
@ -228,34 +223,7 @@
|
||||||
'()]
|
'()]
|
||||||
|
|
||||||
[other
|
[other
|
||||||
'()])))
|
'()]))))
|
||||||
|
|
||||||
(define (analyse-template stx)
|
|
||||||
(syntax-case stx ($ quasiquote unquote quote)
|
|
||||||
[(ctor args ...)
|
|
||||||
(constructor-registered? #'ctor)
|
|
||||||
((free-id-table-ref preserves-pattern-registry #'ctor) 'template stx)]
|
|
||||||
|
|
||||||
;; Extremely limited support for quasiquoting and quoting
|
|
||||||
[(quasiquote (unquote p)) #'p]
|
|
||||||
[(quasiquote (p ...)) (analyse-template #'(list (quasiquote p) ...))]
|
|
||||||
[(quasiquote p) #''p]
|
|
||||||
[(quote p) #''p]
|
|
||||||
|
|
||||||
[(ctor piece ...)
|
|
||||||
(struct-info? (id-value #'ctor))
|
|
||||||
#`(ctor #,@(map analyse-template (syntax->list #'(piece ...))))]
|
|
||||||
|
|
||||||
[(list-stx piece ...)
|
|
||||||
(list-id? #'list-stx)
|
|
||||||
#`(list-stx #,@(map analyse-template (syntax->list #'(piece ...))))]
|
|
||||||
|
|
||||||
[(hash-stx piece ...)
|
|
||||||
(hash-or-hasheqv-id? #'hash-stx)
|
|
||||||
#`(hash-stx #,@(append-map-pairs (lambda (k v) (list k (analyse-template v)))
|
|
||||||
(syntax->list #'(piece ...))))]
|
|
||||||
|
|
||||||
[other #'other])))
|
|
||||||
|
|
||||||
(define-pattern-expander :pattern
|
(define-pattern-expander :pattern
|
||||||
(lambda (stx)
|
(lambda (stx)
|
||||||
|
@ -272,11 +240,6 @@
|
||||||
[(_ pat-stx)
|
[(_ pat-stx)
|
||||||
(analyse-pattern #'pat-stx)])))
|
(analyse-pattern #'pat-stx)])))
|
||||||
|
|
||||||
(define-syntax (:template stx)
|
|
||||||
(syntax-case stx ()
|
|
||||||
[(_ template-stx)
|
|
||||||
(analyse-template #'template-stx)]))
|
|
||||||
|
|
||||||
;;---------------------------------------------------------------------------
|
;;---------------------------------------------------------------------------
|
||||||
|
|
||||||
(define (select-pattern-leaves desc capture-fn lit-fn)
|
(define (select-pattern-leaves desc capture-fn lit-fn)
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
(require racket/stxparam)
|
(require racket/stxparam)
|
||||||
(require (for-syntax racket/base))
|
(require (for-syntax racket/base))
|
||||||
(require (for-syntax racket/syntax))
|
(require (for-syntax racket/syntax))
|
||||||
|
(require preserves-schema)
|
||||||
|
|
||||||
(require "actor.rkt")
|
(require "actor.rkt")
|
||||||
(require (prefix-in actor: "actor.rkt"))
|
(require (prefix-in actor: "actor.rkt"))
|
||||||
|
@ -105,7 +106,7 @@
|
||||||
(turn-sync! this-turn peer (action (_reply) expr ...)))
|
(turn-sync! this-turn peer (action (_reply) expr ...)))
|
||||||
|
|
||||||
(define-syntax-rule (send! peer assertion)
|
(define-syntax-rule (send! peer assertion)
|
||||||
(turn-message! this-turn peer (:template assertion)))
|
(turn-message! this-turn peer (->preserve assertion)))
|
||||||
|
|
||||||
(define-syntax spawn
|
(define-syntax spawn
|
||||||
(syntax-rules ()
|
(syntax-rules ()
|
||||||
|
@ -154,7 +155,7 @@
|
||||||
(define-event-expander assert
|
(define-event-expander assert
|
||||||
(syntax-rules ()
|
(syntax-rules ()
|
||||||
[(_ expr)
|
[(_ expr)
|
||||||
(turn-assert/dataflow! this-turn this-target (action () (:template expr)))]))
|
(turn-assert/dataflow! this-turn this-target (action () (->preserve expr)))]))
|
||||||
|
|
||||||
(define-event-expander stop-when
|
(define-event-expander stop-when
|
||||||
(syntax-rules ()
|
(syntax-rules ()
|
||||||
|
|
Loading…
Reference in New Issue