require.scm 1.1 KB

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