From d4588ecc80825a215ba1897a9b1ebb2ade327fbc Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Fri, 14 Aug 2015 01:16:19 -0400 Subject: [PATCH] Added meta functions --- scheme/cyclone/libraries.sld | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/scheme/cyclone/libraries.sld b/scheme/cyclone/libraries.sld index 16206fb3..5992af23 100644 --- a/scheme/cyclone/libraries.sld +++ b/scheme/cyclone/libraries.sld @@ -28,10 +28,12 @@ lib:body lib:includes lib:import->filename + lib:import->metalist lib:import->path lib:read-imports lib:import->export-list lib:resolve-imports + lib:resolve-meta lib:get-all-import-deps lib:get-dep-list ) @@ -164,6 +166,25 @@ (lib:import->export-list import)) imports))) +(define (lib:import->metalist import) + (let ((file (lib:import->filename import ".meta")) + (fp #f) + (result '())) + (cond + ((file-exists? file) + (set! fp (open-input-file file)) + (set! result (car (read-all fp))) + (close-input-port fp))) + result)) + +(define (lib:resolve-meta imports) + (apply + append + (map + (lambda (import) + (lib:import->metalist import)) + imports))) + ;; Given an import set, get all dependant import names that are required ;; The list of deps is intended to be returned in order, such that the ;; libraries can be initialized properly in sequence.