mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-25 13:05:05 +02:00
Added new idb functions
This commit is contained in:
parent
5b75a48eac
commit
298102c261
1 changed files with 47 additions and 1 deletions
|
@ -45,9 +45,17 @@
|
||||||
lib:get-all
|
lib:get-all
|
||||||
lib:get-all-import-deps
|
lib:get-all-import-deps
|
||||||
lib:get-dep-list
|
lib:get-dep-list
|
||||||
|
;; Import Database "idb" oriented functions
|
||||||
|
;;
|
||||||
|
;; These functions perform operations for a "database" created from
|
||||||
|
;; the data taken from a list of import sets: imported objects,
|
||||||
|
;; renamed objects, and the libraries that contain them.
|
||||||
lib:imports->idb
|
lib:imports->idb
|
||||||
lib:idb:ids
|
lib:idb:ids
|
||||||
lib:idb:id->import
|
lib:idb:id->import
|
||||||
|
lib:idb:lookup
|
||||||
|
lib:idb:entry:->library-name
|
||||||
|
lib:idb:entry:->library-id
|
||||||
)
|
)
|
||||||
(begin
|
(begin
|
||||||
|
|
||||||
|
@ -366,10 +374,13 @@
|
||||||
;; EG: '((call/cc . (scheme base))) ==> '(call/cc)
|
;; EG: '((call/cc . (scheme base))) ==> '(call/cc)
|
||||||
(define (lib:idb:ids db)
|
(define (lib:idb:ids db)
|
||||||
(foldr
|
(foldr
|
||||||
(lambda (i is) (cons (car i) is))
|
(lambda (i is)
|
||||||
|
(let ((id (if (pair? (car i)) (caar i) (car i))))
|
||||||
|
(cons id is)))
|
||||||
'()
|
'()
|
||||||
db))
|
db))
|
||||||
|
|
||||||
|
;; OBSOLETE
|
||||||
;; Map from identifier to the library that imported it
|
;; Map from identifier to the library that imported it
|
||||||
(define (lib:idb:id->import db identifier)
|
(define (lib:idb:id->import db identifier)
|
||||||
(let ((entry (assoc identifier db)))
|
(let ((entry (assoc identifier db)))
|
||||||
|
@ -377,6 +388,41 @@
|
||||||
(cdr entry)
|
(cdr entry)
|
||||||
#f)))
|
#f)))
|
||||||
|
|
||||||
|
;; Retrieve entry in the given idb database for the given identifier
|
||||||
|
(define (lib:idb:lookup db identifier)
|
||||||
|
(call/cc
|
||||||
|
(lambda (return)
|
||||||
|
(for-each
|
||||||
|
(lambda (entry)
|
||||||
|
(cond
|
||||||
|
;; Normal identifier, no renaming
|
||||||
|
((equal? identifier (car entry)) (return entry))
|
||||||
|
;; Identifier was renamed by an import set
|
||||||
|
((equal? identifier (caar entry))
|
||||||
|
(return entry))
|
||||||
|
;; Keep going
|
||||||
|
(else #f)))
|
||||||
|
db)
|
||||||
|
(return #f))))
|
||||||
|
|
||||||
|
;; Take an idb entry and find the library that imported it
|
||||||
|
(define (lib:idb:entry:->library-name entry)
|
||||||
|
(if entry
|
||||||
|
(cdr entry)
|
||||||
|
#f))
|
||||||
|
|
||||||
|
;; Take an idb entry and find the original identifier for it,
|
||||||
|
;; that is part of the library definition.
|
||||||
|
(define (lib:idb:entry:->library-id entry)
|
||||||
|
(if (pair? entry)
|
||||||
|
(cond
|
||||||
|
;; ID was renamed by an import set
|
||||||
|
((pair? (car entry))
|
||||||
|
(cdar entry))
|
||||||
|
(else
|
||||||
|
(car entry)))
|
||||||
|
#f))
|
||||||
|
|
||||||
(define (lib:import->metalist import)
|
(define (lib:import->metalist import)
|
||||||
(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"))
|
||||||
|
|
Loading…
Add table
Reference in a new issue