1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 03:30:27 +02:00

add `expand' eval-when situation

* module/ice-9/psyntax.scm (chi-when-list, chi-top): Add an undocumented
  `expand' situation to eval-when, which will trigger at expand-time for
  toplevel expressions. Useful when you are expanding for eval, but need
  to do some side effect to affect the expander -- like defining a
  module.

* module/ice-9/psyntax-pp.scm: Regenerate.
This commit is contained in:
Andy Wingo 2010-05-05 22:59:32 +02:00
parent 9a74920905
commit 807f7ab0ac
2 changed files with 4457 additions and 4030 deletions

File diff suppressed because it is too large Load diff

View file

@ -1084,6 +1084,7 @@
((free-id=? x #'compile) 'compile)
((free-id=? x #'load) 'load)
((free-id=? x #'eval) 'eval)
((free-id=? x #'expand) 'expand)
(else (syntax-violation 'eval-when
"invalid situation"
e (wrap x w #f)))))
@ -1234,16 +1235,26 @@
(cond
((eq? m 'e)
(if (memq 'eval when-list)
(chi-top-sequence body r w s 'e '(eval) mod)
(chi-void)))
(chi-top-sequence body r w s
(if (memq 'expand when-list) 'c&e 'e)
'(eval)
mod)
(begin
(if (memq 'expand when-list)
(top-level-eval-hook
(chi-top-sequence body r w s 'e '(eval) mod)
mod))
(chi-void))))
((memq 'load when-list)
(if (or (memq 'compile when-list)
(memq 'expand when-list)
(and (eq? m 'c&e) (memq 'eval when-list)))
(chi-top-sequence body r w s 'c&e '(compile load) mod)
(if (memq m '(c c&e))
(chi-top-sequence body r w s 'c '(load) mod)
(chi-void))))
((or (memq 'compile when-list)
(memq 'expand when-list)
(and (eq? m 'c&e) (memq 'eval when-list)))
(top-level-eval-hook
(chi-top-sequence body r w s 'e '(eval) mod)