X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=8sync%2Factors.scm;h=ceb2980f533e93eab250c85e908dd05e6f885edf;hb=fa598a979d510a783f1d6f097f560f23de997c88;hp=d6dc148812b1576a79e85093f19373d605aa4bde;hpb=8bdfa5c8f81d4e46d57c367da23cd8ea676ad717;p=8sync.git diff --git a/8sync/actors.scm b/8sync/actors.scm index d6dc148..ceb2980 100644 --- a/8sync/actors.scm +++ b/8sync/actors.scm @@ -311,7 +311,7 @@ raise an exception if an error." "Construct an alist of (symbol . method), where the method is wrapped with wrap-apply to facilitate live hacking and allow the method definition to come after class definition." - (wrap-rmeta-slot + (build-rmeta-slot (list (cons (quote symbol) (wrap-apply method)) ...))) @@ -562,7 +562,9 @@ to come after class definition." message)) actor)) - (define (call-catching-coroutine thunk) + ;; TODO: I'm pretty sure we're building up another stack of prompts here + ;; with the way we're doing this. That's a real problem. + (define* (call-catching-coroutine thunk #:optional (catch-errors #t)) (define queued-error-handling-thunk #f) (define (call-catching-errors) ;; TODO: maybe parameterize (or attach to hive) and use @@ -591,7 +593,9 @@ to come after class definition." (if queued-error-handling-thunk (8sync (queued-error-handling-thunk)))) (call-with-prompt (hive-prompt hive) - call-catching-errors + (if catch-errors + call-catching-errors + thunk) (lambda (kont actor message send-options) ;; Register the coroutine (hash-set! (hive-waiting-coroutines hive) @@ -641,7 +645,9 @@ to come after class definition." result)) (#f (throw 'no-waiting-coroutine "message in-reply-to tries to resume nonexistent coroutine" - message)))))) + message)))) + ;; no need to catch errors here, there's already an error handler + #f)) ;; Unhandled action for a reply! (else (throw 'hive-unresumable-coroutine