From 210e983c8d7f8cf49c97e7b898f562a1da5c6741 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Tue, 15 Jun 2021 12:43:27 +0200 Subject: [PATCH] Redo actor-group linking style --- syndicate/actor.rkt | 13 +++++++------ syndicate/syntax-classes.rkt | 9 +++++++-- syndicate/syntax.rkt | 6 +++--- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/syndicate/actor.rkt b/syndicate/actor.rkt index 12ce630..c3c1561 100644 --- a/syndicate/actor.rkt +++ b/syndicate/actor.rkt @@ -178,16 +178,17 @@ (adjust-inhabitant-count! e -1))) (actor-system-wait e)) -(define (make-actor-group outer-boot-proc inner-boot-proc #:name [name 'actor-group]) - (define f (turn-facet! (lambda () - (facet-prevent-inert-check! (turn-active-facet (current-turn))) - (outer-boot-proc)))) +(define (make-actor-group boot-proc + #:name [name 'actor-group] + #:link? [link? #f]) + (define owning-facet (turn-active-facet (current-turn))) (define e (make-engine 1 name (lambda (restart) - (turn! f (lambda () (turn-stop!))) + (when link? (turn! owning-facet (lambda () (turn-stop!)))) (actor-system-shutdown! e) (restart void)))) + (when link? (facet-on-stop! owning-facet (lambda () (actor-system-shutdown! e)))) (queue-task! e (lambda () - (make-actor name e #t inner-boot-proc (make-hash)) + (make-actor name e #t boot-proc (make-hash)) (adjust-inhabitant-count! e -1))) e) diff --git a/syndicate/syntax-classes.rkt b/syndicate/syntax-classes.rkt index dcbb2a0..68f346f 100644 --- a/syndicate/syntax-classes.rkt +++ b/syndicate/syntax-classes.rkt @@ -4,7 +4,8 @@ (provide (for-syntax - )) + + )) (require (for-syntax racket/base)) (require (for-syntax syntax/parse)) @@ -20,4 +21,8 @@ (define-splicing-syntax-class (pattern (~seq #:daemon? D)) - (pattern (~seq) #:attr D #'#f))) + (pattern (~seq) #:attr D #'#f)) + + (define-splicing-syntax-class + (pattern (~seq #:link? L)) + (pattern (~seq) #:attr L #'#f))) diff --git a/syndicate/syntax.rkt b/syndicate/syntax.rkt index 8a40439..234f35f 100644 --- a/syndicate/syntax.rkt +++ b/syndicate/syntax.rkt @@ -82,9 +82,9 @@ (define-syntax (actor-group stx) (syntax-parse stx - [(_ name: [outer-facet-expr ...] group-boot-expr ...) + [(_ name: link: group-boot-expr ...) #'(make-actor-group #:name name.N - (lambda () outer-facet-expr ...) + #:link? link.L (lambda () group-boot-expr ...))])) (define-syntax (object stx) @@ -362,7 +362,7 @@ ;;--------------------------------------------------------------------------- ;;; Local Variables: -;;; eval: (put 'actor-group 'racket-indent-function 1) +;;; eval: (put 'actor-group 'racket-indent-function 0) ;;; eval: (put 'actor-system/dataspace 'racket-indent-function 1) ;;; eval: (put 'at 'racket-indent-function 1) ;;; eval: (put 'object 'racket-indent-function 0)