From dc30dba7358d669989444bedcf9e9d8e95caead7 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 2 Sep 2020 18:10:41 -0400 Subject: [PATCH] Expand library before reading imports --- cyclone.scm | 4 ++-- scheme/cyclone/libraries.sld | 14 +++++++++----- scheme/eval.sld | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/cyclone.scm b/cyclone.scm index 940d18b4..642edb18 100644 --- a/cyclone.scm +++ b/cyclone.scm @@ -255,7 +255,7 @@ (trace:info meta)) (set! input-program (cdr program:imports/code)) ;(set! lib-deps (append lib-deps (lib:get-all-import-deps (car program:imports/code) append-dirs prepend-dirs))) - (let ((new-lib-deps (lib:get-all-import-deps (car program:imports/code) append-dirs prepend-dirs))) + (let ((new-lib-deps (lib:get-all-import-deps (car program:imports/code) append-dirs prepend-dirs #f))) (for-each (lambda (dep) (if (not (member dep lib-deps)) @@ -704,7 +704,7 @@ (lib-deps (if (and program? (not (null? (car program:imports/code)))) - (lib:get-all-import-deps (car program:imports/code) append-dirs prepend-dirs) + (lib:get-all-import-deps (car program:imports/code) append-dirs prepend-dirs expander) '())) (c-linker-options (lib:get-all-c-linker-options lib-deps append-dirs prepend-dirs)) diff --git a/scheme/cyclone/libraries.sld b/scheme/cyclone/libraries.sld index d99d3793..c5958ee3 100644 --- a/scheme/cyclone/libraries.sld +++ b/scheme/cyclone/libraries.sld @@ -15,7 +15,8 @@ ;;;; (define-library (scheme cyclone libraries) (import (scheme base) - ;; Debug only (scheme write) + ;; Debug only + (scheme write) (scheme read) (scheme process-context) (scheme cyclone util) @@ -385,12 +386,15 @@ ;; Given a single import from an import-set, open the corresponding ;; library file and retrieve the library's import-set. -(define (lib:read-imports import append-dirs prepend-dirs) +(define (lib:read-imports import append-dirs prepend-dirs expander) (let* ((lib-name (lib:import->library-name import)) (dir (lib:import->filename lib-name ".sld" append-dirs prepend-dirs)) (fp (open-input-file dir)) (lib (read-all fp)) - (imports (lib:imports (car lib)))) + (lib* (if expander + (list (lib:cond-expand (car lib) expander)) + lib)) + (imports (lib:imports (car lib*)))) (close-input-port fp) imports)) @@ -619,7 +623,7 @@ ;; 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. -(define (lib:get-all-import-deps imports append-dirs prepend-dirs) +(define (lib:get-all-import-deps imports append-dirs prepend-dirs expander) (letrec ((libraries/deps '()) (find-deps! (lambda (import-sets) @@ -631,7 +635,7 @@ ;; Prevent cycles by only processing new libraries ((not (assoc lib-name libraries/deps)) ;; Find all dependencies of i (IE, libraries it imports) - (let* ((deps (lib:read-imports import-set append-dirs prepend-dirs)) + (let* ((deps (lib:read-imports import-set append-dirs prepend-dirs expander)) (dep-libs (map lib:import->library-name deps))) (set! libraries/deps diff --git a/scheme/eval.sld b/scheme/eval.sld index 965c8f53..181777f5 100644 --- a/scheme/eval.sld +++ b/scheme/eval.sld @@ -755,7 +755,7 @@ (explicit-lib-names (map lib:import->library-name (lib:list->import-set import-sets))) ;; All dependent libraries - (lib-names (lib:get-all-import-deps import-sets *append-dirs* *prepend-dirs*)) + (lib-names (lib:get-all-import-deps import-sets *append-dirs* *prepend-dirs* #f)) (renamed-syms (filter pair? (map car (lib:imports->idb import-sets *append-dirs* *prepend-dirs*))))