diff options
author | Andy Wingo <wingo@pobox.com> | 2009-04-24 13:13:29 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2009-04-24 14:36:50 +0200 |
commit | a2716cbe1e9d2b43d1fb1a017cb8b1e97617da3c (patch) | |
tree | c9c36463f485ccffcadea35fb9fe82a426c070a6 /libguile/eval.c | |
parent | 384e92b3ae491e2f8495b0d188b384f138a8cc61 (diff) | |
download | guile-a2716cbe1e9d2b43d1fb1a017cb8b1e97617da3c.tar.gz |
only bend hygiene in macro-introduced output, not for explicit @/@@
* module/ice-9/psyntax.scm
* module/ice-9/psyntax-pp.scm
* module/ice-9/boot-9.scm (make-module-ref): We were so almost there
with what we had, sniff. The deal is that
(begin (load "foo.scm") ((@@ (foo) bar)))
would expand to
(begin (load "foo.scm") (bar))
because bar was unbound at expansion time, and make-module-ref assumed
it was like the else in a cond. But it shouldn't have, because we
/explicitly/ asked for the @@ var -- so now if we see a @ or @@, we
never drop it. @@ introduced by hygiene can be dropped if it doesn't
reference a var, though.
Practically speaking, this means tagging all modules in psyntax with
their intent: public or private (corresponding to @ or @@), hygiene
(introduced by a macro), or bare (when we don't have a module). I'm
not sure when we'd see a bare.
The implementation is complicated by the need to support the old
format and the new format at the same time, so that psyntax-pp can be
regenerated.
Diffstat (limited to 'libguile/eval.c')
0 files changed, 0 insertions, 0 deletions