mini-package.scm 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. ; Part of Scheme 48 1.9. See file COPYING for notices and license.
  2. ; Authors: Richard Kelsey, Jonathan Rees, Mike Sperber
  3. ; Miniature package system. This links mini-eval up to the output of
  4. ; the package reifier.
  5. (define (package names locs get-location uid) ;Reified package
  6. (lambda (name)
  7. (let loop ((i (- (vector-length names) 1)))
  8. (if (< i 0)
  9. (assertion-violation 'package "unbound" name)
  10. (if (eq? name (vector-ref names i))
  11. (contents (get-location (vector-ref locs i)))
  12. (loop (- i 1)))))))
  13. (define (make-simple-package opens foo1 foo2 name)
  14. (define bindings
  15. (list (cons '%%define%%
  16. (lambda (name val)
  17. (set! bindings (cons (cons name val) bindings))))))
  18. (lambda (name)
  19. (let ((probe (assq name bindings)))
  20. (if probe
  21. (cdr probe)
  22. (let loop ((opens opens))
  23. (if (null? opens)
  24. (assertion-violation 'make-simple-package "unbound" name)
  25. (if (memq name (structure-interface (car opens)))
  26. ((structure-package (car opens)) name)
  27. (loop (cdr opens)))))))))
  28. ; Structures
  29. (define (make-structure package interface . name-option)
  30. (cons package (vector->list interface)))
  31. (define structure-interface cdr)
  32. (define structure-package car)
  33. ; Things used by reification forms
  34. (define (operator name type-exp)
  35. `(operator ,name ,type-exp))
  36. (define (simple-interface names type) names)
  37. ; Etc.
  38. (define (transform . rest) (cons 'transform rest))
  39. (define (usual-transform . rest)
  40. (cons 'usual-transform rest))
  41. (define (transform-for-structure-ref . rest)
  42. (cons 'transform-for-structure-ref rest))
  43. (define (inline-transform . rest)
  44. (cons 'inline-transform rest))
  45. (define (primop . rest)
  46. (cons 'primop rest))
  47. (define (package-define-static! package name op) 'lose)
  48. ; --------------------
  49. ; ???
  50. ; (define (integrate-all-primitives! . rest) 'lose)
  51. ;(define (package-lookup p name)
  52. ; ((p '%%lookup-operator%%) name))
  53. ;(define (package-ensure-defined! p name)
  54. ; (package-define! p name (make-location 'defined name)))