require.scm 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. ; Copyright (c) 1993-2008 by Richard Kelsey and Jonathan Rees. See file COPYING.
  2. (define-syntax require
  3. (syntax-rules (quote)
  4. ((require '(name1 name2 ...))
  5. (*require '(name1 name2 ...)))))
  6. (define (*require interface-id)
  7. (let ((start-thunk
  8. (case (car interface-id)
  9. ((scheme-48)
  10. (let ((p (config-package)))
  11. (lambda () p)))
  12. ((scheme-library-1)
  13. (let* ((p (config-package))
  14. (thunk
  15. (lambda ()
  16. (environment-ref p 'scheme-library-1))))
  17. (ensure-loaded (thunk))
  18. (thunk)))
  19. (else
  20. (assertion-violation
  21. 'require "unrecognized interface identifier" interface-id)))))
  22. (package-open! (interaction-environment)
  23. (let loop ((names (cdr interface-id))
  24. (thunk start-thunk))
  25. (if (null? names)
  26. thunk
  27. (let ((new-thunk
  28. (lambda ()
  29. (let ((source (thunk)))
  30. (if (package? source)
  31. (environment-ref source
  32. (car names))
  33. (*structure-ref source
  34. (car names)))))))
  35. (ensure-loaded (new-thunk))
  36. (loop (cdr names)
  37. new-thunk)))))))