aboutsummaryrefslogtreecommitdiff
path: root/scripts/module-introspection.scm
blob: 17068371d5472b52052e5de244036e8239c60ef9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
(define-module (module-introspection)
  :use-module (srfi srfi-1)
  :use-module (hnh util)
  :export (get-forms
           unique-symbols
           find-module-declaration
           module-declaration?
           ))


(define (get-forms port)
  (let loop ((done '()))
    (let ((form (read port)))
      (if (eof-object? form)
          done
          (loop (cons form done))))))

(define (unique-symbols tree)
  (univ
   (sort* (filter symbol? (flatten tree))
          string<? symbol->string)))

(define (module-declaration? form)
  (cond ((null? form) #f)
        ((not (pair? form)) #f)
        (else (eq? 'define-module (car form)))))

(define (find-module-declaration forms)
  (and=> (find module-declaration? forms)
         cadr))