[racket] How to make unit signature macros take prefix into account
I have a signature that includes a macro to clean up the use of one of the
procs in the signature.
Two different units with the same signature are used
via define-values/invoke-unit - the second one uses a prefix in the export
sig-spec to differentiate it from the first.
The macro introduced by the second use does not refer to the other proc
using the prefix.
The concrete example:
;; Signature of a message channel
(define-signature message-channel^
(
;; ...
msg-chan-subscribe ; ( (msg -> boolean) first? -> thunk)
;; Enqueue message(s) for a channel at normal priority
<-- ; ( msg .. -> void )
;; Enqueue message(s) for a channel at high priority
<++ ; ( msg .. -> void )
;; Macro to create a message handler.
;; ...
(define-syntaxes (==>)
(syntax-rules (msg)
[(_ match-body ...) (msg-chan-subscribe
(λ(msg)
(syntax-parameterize
([the-message (make-rename-transformer
#'msg)])
(match msg
match-body ...
[_ #t])))
#f)]))))
When (define-values/invoke-unit <some-unit> (import) (export (prefix
diagram message-channel^))) is used it introduces the bindings diagram<-- ,
diagram<++ , diagrammsg-chan-subscribe and diagram==> .
The form
(diagram==>
.. message handlers ..)
expands to (msg-chan-subscribe ...) rather than (diagrammsg-chan-subscribe
...) - and thus it listens to the first (wrong) message channel.
Is there any way to make macros defined in signatures be aware of the
prefix used with the signature ?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20130807/bf0cb0e1/attachment.html>