init-defpackage.scm 1.0 KB

12345678910111213141516171819202122232425262728293031323334
  1. ; Copyright (c) 1993-2008 by Richard Kelsey and Jonathan Rees. See file COPYING.
  2. ; This file has to be loaded into the initial-image before any use of
  3. ; DEFINE-STRUCTURE. Compare with alt/init-defpackage.scm.
  4. ; The procedure given to DEFINE-SYNTACTIC-TOWER-MAKER is called when
  5. ; a DEFINE-STRUCTURE form is evaluated.
  6. (define-syntactic-tower-maker
  7. (let ((comp-env-macro-eval
  8. (*structure-ref compiler-envs 'comp-env-macro-eval))
  9. (make-simple-interface
  10. (*structure-ref interfaces 'make-simple-interface))
  11. (env (interaction-environment)))
  12. (lambda (clauses id)
  13. (if (null? clauses)
  14. ;; (make-syntactic-tower eval (list scheme) id)
  15. (comp-env-macro-eval (package->environment env))
  16. (delay
  17. (let ((package (eval `(a-package ,(if id
  18. `(for-syntax ,id)
  19. '(for-syntax))
  20. ,@clauses)
  21. env)))
  22. (ensure-loaded (make-structure package
  23. (lambda ()
  24. (make-simple-interface #f '()))
  25. 'for-syntax))
  26. (cons eval package)))))))
  27. (define-reader read)