mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-23 20:15:05 +02:00
WIP: allowing append/prepend library paths
This commit is contained in:
parent
130274588c
commit
379cac7ac3
2 changed files with 12 additions and 12 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue