/src/boot/larceny/larceny.scm

http://github.com/dharmatech/abstracting · Scheme · 98 lines · 43 code · 42 blank · 13 comment · 0 complexity · 90f2a85ddff5c8ce97ad42fecad44632 MD5 · raw file

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. (import (rnrs)
  3. (err5rs load)
  4. (primitives current-directory))
  5. (import (srfi :1))
  6. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  7. (define scheme-implementation 'larceny)
  8. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  9. (define (print . elts) (for-each display elts))
  10. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  11. (define *roots* #f)
  12. (define *loaded* '())
  13. (define *included* '())
  14. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  15. (define (directory-contains file)
  16. (lambda (dir)
  17. (file-exists?
  18. (string-append dir "/" file))))
  19. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  20. (define (resolve lib)
  21. (let ((root (find (directory-contains lib) *roots*)))
  22. (if root (string-append root "/" lib) #f)))
  23. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  24. (define (load-lib lib)
  25. (let ((dir (resolve lib)))
  26. (let ((import-file (string-append dir "/import")))
  27. (if (file-exists? import-file)
  28. (let ((import-list (call-with-input-file import-file read)))
  29. (for-each require-lib import-list))))
  30. (let ((include-file (string-append dir "/include")))
  31. (if (file-exists? include-file)
  32. (let ((include-list (call-with-input-file include-file read)))
  33. (for-each require-lib include-list))))
  34. (load (string-append dir "/source.scm"))))
  35. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  36. (define (require-lib dir)
  37. (cond ((not (member dir *loaded*))
  38. (print "Loading lib " dir "\n")
  39. (load-lib dir)
  40. (set! *loaded* (cons dir *loaded*)))))
  41. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  42. (load "src/boot/boot.scm")
  43. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  44. (define inexact->exact exact)
  45. (define exact->inexact inexact)
  46. (import (primitives modulo))
  47. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  48. (import (primitives time))
  49. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  50. (import (srfi :19))
  51. (define (current-time-in-nanoseconds)
  52. (let ((val (current-time)))
  53. (+ (* (time-second val) 1000000000)
  54. (time-nanosecond val))))
  55. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  56. (print "Abstracting is loaded\n")