@@ -2,24 +2,68 @@ (module extract * (import scheme - chicken + chicken) +(use srfi-1 + srfi-69 + extras + posix + regex + matchable + data-structures ) (define (get-norefs) - (with-input-from-pipe - "grep 'Warning: refer' typescript |tr '`' ' '|tr "'" " "|awk '{print $7}'" - read-lines)) - -(define (get-parent-file noref) - (with-input-from-pipe - "grep $fn *mod.scm|grep define|cut -d: -f1" - read-lines)) - + (let* ((indat (with-input-from-pipe + "grep 'Warning: refer' typescript" + read-lines))) + (filter string? + (map (lambda (instr) + (match (string-search "`(\\S+)'" instr) + ((full thematch) thematch) + (else #f))) + indat)))) + +(define (get-parent-files noref) + (let ((scmfiles (with-input-from-pipe + "ls *scm|grep -v import" + read-lines)) + (resultht (make-hash-table))) + (for-each + (lambda (scmfile) + (let ((lines (with-input-from-pipe + (conc "grep '"noref"' "scmfile"|egrep '^.define'") + read-lines))) + (if (not (null? lines)) + (hash-table-set! resultht scmfile #t)))) + scmfiles) + (hash-table-keys resultht))) + +(define (main) + (let ((data (make-hash-table)) + (fns (get-norefs))) + (for-each + (lambda (fn) + (let ((parents (get-parent-files fn))) + ;; (print fn": "parents) + (for-each + (lambda (parent) + (hash-table-set! data parent (cons fn (hash-table-ref/default data parent '())))) + parents))) + fns) + (for-each + (lambda (f) + (let ((fns (hash-table-ref data f))) + (print "\n"f) + (map print fns))) + (hash-table-keys data)))) + +(main) +) ;; ;; LAST_PARENT=foobar ;; ;; for fn in $(grep 'Warning: refer' typescript |tr '`' ' '|tr "'" " "|awk '{print $7}');do