From 11619a74ef25f13664aa2f2d303d08e2886dceb9 Mon Sep 17 00:00:00 2001 From: Christopher Lemmer Webber Date: Thu, 27 Sep 2018 08:37:03 -0400 Subject: [PATCH] <<- now works! --- goblins/actors.rkt | 43 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/goblins/actors.rkt b/goblins/actors.rkt index 1b55d10..e3ba3a5 100644 --- a/goblins/actors.rkt +++ b/goblins/actors.rkt @@ -16,6 +16,8 @@ racket/random racket/async-channel) +(require linkeddata/pk) + (module+ test (require rackunit)) @@ -303,13 +305,14 @@ to us." (please-resolve 'fulfilled args)))))))) actor-prompt-tag (lambda (k to kws kw-args args) - (on (keyword-apply <- kws kw-args to args) - ;; resume continuation - (lambda vals - (k (vector 'resume-values vals))) - #:catch - (lambda (err) - (k (vector 'error err))))))) + (parameterize ([current-actable (new actable%)]) + (on (keyword-apply <- kws kw-args to args) + ;; resume continuation + (lambda vals + (k (vector 'resume-values vals))) + #:catch + (lambda (err) + (k (vector 'error err)))))))) ;; Bootstrapping methods ;; ===================== @@ -397,7 +400,6 @@ to us." [(vector 'external-spawn actor will return-ch) (define actor-id ;; TODO: I don't think we need this, but maybe we do? - ;; (parameterize ([current-actable (new actable%)])) (do-spawn actor will)) (channel-put return-ch actor-id) (lp)] @@ -489,8 +491,31 @@ to us." (displayln 'bob-pre-alice) (on (<- alice) (lambda (val) - (displayln (format "got: ~a" val)))) + (displayln (format "got: ~a" val))) + #:finally + (lambda () + (displayln "TGIF!"))) (displayln 'bob-post-alice)))) + (define breakable + (spawn + (lambda () + (error "I broke!") + 'bork))) + (define uses-breakable + (spawn + (lambda () + (on (<- breakable) + (lambda _ (displayln "That worked? Really???")) + #:catch + (lambda (err) + (displayln (format "got error: ~a" err))) + #:finally + (lambda () + (displayln "I hate mondays")))))) + + (<- (spawn (lambda () + (displayln (format "Got: ~a" + (<<- alice)))))) #;(define putter (spawn