WIP: allowing append/prepend library paths

This commit is contained in:
Justin Ethier 2017-01-31 18:50:40 -05:00
parent 130274588c
commit 379cac7ac3
2 changed files with 12 additions and 12 deletions

View file

@ -27,7 +27,7 @@
;; Code emission. ;; Code emission.
; c-compile-and-emit : (string -> A) exp -> void ; c-compile-and-emit : (string -> A) exp -> void
(define (c-compile-and-emit input-program lib-deps src-file) (define (c-compile-and-emit input-program lib-deps src-file append-dirs prepend-dirs)
(call/cc (call/cc
(lambda (return) (lambda (return)
(define globals '()) (define globals '())
@ -105,10 +105,10 @@
;; As of now, that will have to be dealt with later. ;; As of now, that will have to be dealt with later.
(trace:info "imports:") (trace:info "imports:")
(trace:info imports) (trace:info imports)
(set! imported-vars (lib:imports->idb imports)) (set! imported-vars (lib:imports->idb imports append-dirs prepend-dirs))
(trace:info "resolved imports:") (trace:info "resolved imports:")
(trace:info imported-vars) (trace:info imported-vars)
(let ((meta (lib:resolve-meta imports))) (let ((meta (lib:resolve-meta imports append-dirs prepend-dirs)))
(set! *defined-macros* (append meta *defined-macros*)) (set! *defined-macros* (append meta *defined-macros*))
(trace:info "resolved macros:") (trace:info "resolved macros:")
(trace:info meta)) (trace:info meta))
@ -314,7 +314,7 @@
(with-output-to-file (with-output-to-file
src-file src-file
(lambda () (lambda ()
(c-compile-and-emit program lib-deps in-file))))) (c-compile-and-emit program lib-deps in-file append-dirs prepend-dirs)))))
(result (create-c-file in-prog))) (result (create-c-file in-prog)))
;; Compile the generated C file ;; Compile the generated C file

View file

@ -275,9 +275,9 @@
imports)) imports))
;; Read export list for a given import ;; Read export list for a given import
(define (lib:import->export-list import) (define (lib:import->export-list import append-dirs prepend-dirs)
(let* ((lib-name (lib:import->library-name import)) (let* ((lib-name (lib:import->library-name import))
(dir (string-append (lib:import->filename lib-name))) (dir (string-append (lib:import->filename lib-name ".sld" append-dirs prepend-dirs)))
(fp (open-input-file dir)) (fp (open-input-file dir))
(lib (read-all fp)) (lib (read-all fp))
(exports (lib:exports (car lib)))) (exports (lib:exports (car lib))))
@ -386,7 +386,7 @@
;; ;;
;; TODO: convert this to use a hashtable. Initially a-lists ;; TODO: convert this to use a hashtable. Initially a-lists
;; will be used to prove out the concept, but this is inefficient ;; will be used to prove out the concept, but this is inefficient
(define (lib:imports->idb imports) (define (lib:imports->idb imports append-dirs prepend-dirs)
(apply (apply
append append
(map (map
@ -398,7 +398,7 @@
(cons id lib-name) (cons id lib-name)
ids)) ids))
'() '()
(lib:import->export-list import-set)))) (lib:import->export-list import-set append-dirs prepend-dirs))))
(map lib:list->import-set imports)))) (map lib:list->import-set imports))))
;; Convert from the import DB to a list of identifiers that are imported. ;; Convert from the import DB to a list of identifiers that are imported.
@ -448,9 +448,9 @@
(car entry))) (car entry)))
#f)) #f))
(define (lib:import->metalist import) (define (lib:import->metalist import append-dirs prepend-dirs)
(let* ((lib-name (lib:import->library-name import)) (let* ((lib-name (lib:import->library-name import))
(file (lib:import->filename lib-name ".meta")) (file (lib:import->filename lib-name ".meta" append-dirs prepend-dirs))
(fp #f) (fp #f)
(result '())) (result '()))
(cond (cond
@ -460,12 +460,12 @@
(close-input-port fp))) (close-input-port fp)))
result)) result))
(define (lib:resolve-meta imports) (define (lib:resolve-meta imports append-dirs prepend-dirs)
(apply (apply
append append
(map (map
(lambda (import) (lambda (import)
(lib:import->metalist import)) (lib:import->metalist import append-dirs prepend-dirs))
imports))) imports)))
;; Given an import set, get all dependant import names that are required ;; Given an import set, get all dependant import names that are required