[plt-scheme] What the heck to put for deserialize-id and dir-path
At Thu, 24 Feb 2005 18:17:08 -0500, Greg Pettyjohn wrote:
> In particular, if the call site of the macro is NOT in a module, it
> (used to) works fine.
> If the call site IS in a module then I need to add a provide to the
> module and then I
> have a NASTY dependency on the dir-path field, which I can never get
> right.
>
> How do I write my macro so that it is robust?
Use `(syntax-local-context)' to determine the expansion context. Don't
create a `provide' form if `(eq? 'top-level (syntax-local-context))'.
You might also want a check like this one near the start of parsing the
macro use:
(unless (memq (syntax-local-context) '(top-level module))
(raise-syntax-error
#f
"allowed only at the top level or within a module top level"
stx))
For the directory path, use
(or (current-load-relative-directory)
(current-directory))
I'll add this suggestion to the docs.
Matthew