diff --git a/cyclone.scm b/cyclone.scm index 8644093a..82651700 100644 --- a/cyclone.scm +++ b/cyclone.scm @@ -27,7 +27,7 @@ ;; Code emission. ; 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 (lambda (return) (define globals '()) @@ -105,10 +105,10 @@ ;; As of now, that will have to be dealt with later. (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 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*)) (trace:info "resolved macros:") (trace:info meta)) @@ -314,7 +314,7 @@ (with-output-to-file src-file (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))) ;; Compile the generated C file diff --git a/scheme/cyclone/libraries.sld b/scheme/cyclone/libraries.sld index 37dfcaf1..24d46ce8 100644 --- a/scheme/cyclone/libraries.sld +++ b/scheme/cyclone/libraries.sld @@ -275,9 +275,9 @@ imports)) ;; 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)) - (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)) (lib (read-all fp)) (exports (lib:exports (car lib)))) @@ -386,7 +386,7 @@ ;; ;; TODO: convert this to use a hashtable. Initially a-lists ;; 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 append (map @@ -398,7 +398,7 @@ (cons id lib-name) ids)) '() - (lib:import->export-list import-set)))) + (lib:import->export-list import-set append-dirs prepend-dirs)))) (map lib:list->import-set imports)))) ;; Convert from the import DB to a list of identifiers that are imported. @@ -448,9 +448,9 @@ (car entry))) #f)) -(define (lib:import->metalist import) +(define (lib:import->metalist import append-dirs prepend-dirs) (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) (result '())) (cond @@ -460,12 +460,12 @@ (close-input-port fp))) result)) -(define (lib:resolve-meta imports) +(define (lib:resolve-meta imports append-dirs prepend-dirs) (apply append (map (lambda (import) - (lib:import->metalist import)) + (lib:import->metalist import append-dirs prepend-dirs)) imports))) ;; Given an import set, get all dependant import names that are required