Enhance dependency resolution of import sets

Allow the dependency resolution front-end to handle libraries that contain import sets that are not just a library name, such as `only` or `except`.
This commit is contained in:
Justin Ethier 2016-10-08 02:41:37 -04:00
parent 36a74053c2
commit 0dadb5a730

View file

@ -47,7 +47,6 @@
lib:idb:id->import lib:idb:id->import
) )
(begin (begin
; (define read cyc-read)
(define (library? ast) (define (library? ast)
(tagged-list? 'define-library ast)) (tagged-list? 'define-library ast))
@ -314,20 +313,22 @@
(lambda (import-sets) (lambda (import-sets)
(for-each (for-each
(lambda (i) (lambda (i)
(let ((import-set (lib:list->import-set i))) (let* ((import-set (lib:list->import-set i))
(lib-name (lib:import->library-name import-set)))
(cond (cond
;; Prevent cycles by only processing new libraries ;; Prevent cycles by only processing new libraries
((not (assoc import-set libraries/deps)) ((not (assoc lib-name libraries/deps))
;; Find all dependencies of i (IE, libraries it imports) ;; Find all dependencies of i (IE, libraries it imports)
(let ((deps (lib:read-imports import-set)) (let* ((deps (lib:read-imports import-set))
(lib-name (lib:import->library-name import-set))) (dep-libs (map lib:import->library-name deps)))
(set! libraries/deps (cons (cons lib-name deps) libraries/deps)) (set!
(find-deps! deps) libraries/deps
(cons (cons lib-name dep-libs) libraries/deps))
(find-deps! dep-libs)
))))) )))))
import-sets)))) import-sets))))
(find-deps! imports) (find-deps! imports)
;`((deps ,libraries/deps) ; DEBUG ;`((deps ,libraries/deps)) ; DEBUG
; (result ,(lib:get-dep-list libraries/deps)))
(lib:get-dep-list libraries/deps) (lib:get-dep-list libraries/deps)
)) ))