mini-package.scm 1.9 KB

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