From aaac013083bf1dd8bef0516b8f07d0b3756f2231 Mon Sep 17 00:00:00 2001 From: felix Date: Tue, 28 Sep 2021 16:50:03 +0200 Subject: [PATCH] Ensure required-libraries always contains loadable units ##sys#process-require distinguishes again between core/builtin requirements and loadable ones, which was dropped in 41a1decf. This should fix #1788. Added flimsy little test. --- batch-driver.scm | 4 ++-- core.scm | 18 +++++++++++------- eval.scm | 33 ++++++++++++++++++++------------- tests/sample-module.scm | 1 + 4 files changed, 34 insertions(+), 22 deletions(-) diff --git a/batch-driver.scm b/batch-driver.scm index 3f456531..6f1d5f56 100644 --- a/batch-driver.scm +++ b/batch-driver.scm @@ -676,7 +676,7 @@ (initialize-analysis-database) ;; collect requirements and load inline files - (let ((extensions (remove chicken.load#core-unit? required-libraries))) + (let ((extensions required-libraries)) (when enable-inline-files (for-each (lambda (id) @@ -851,7 +851,7 @@ ;; generate link file (when emit-link-file - (let ((exts (remove chicken.load#core-unit? required-libraries))) + (let ((exts required-libraries)) (dribble "generating link file `~a' ..." emit-link-file) (with-output-to-file emit-link-file (cut pp exts)))) diff --git a/core.scm b/core.scm index 630bfd04..0b980913 100644 --- a/core.scm +++ b/core.scm @@ -738,13 +738,17 @@ ((##core#require) (let ((lib (cadr x)) (mod (and (pair? (cddr x)) (caddr x)))) - (set! required-libraries (lset-adjoin/eq? required-libraries lib)) - (walk (##sys#process-require - lib mod - (if (or (memq lib linked-libraries) static-extensions) - 'static - 'dynamic)) - e dest ldest h ln #f))) + (let-values (((reqform builtin) + (##sys#process-require + lib mod + (if (or (memq lib linked-libraries) + static-extensions) + 'static + 'dynamic)))) + (unless builtin + (set! required-libraries + (lset-adjoin/eq? required-libraries lib))) + (walk reqform e dest ldest h ln #f)))) ((##core#let) (let* ((bindings (cadr x)) diff --git a/eval.scm b/eval.scm index 9421e83d..ce388eb1 100644 --- a/eval.scm +++ b/eval.scm @@ -596,8 +596,9 @@ [(##core#require) (let ((lib (cadr x)) - (mod (and (pair? (cddr x)) (caddr x)))) - (compile (##sys#process-require lib mod #f) e #f tf cntr #f))] + (mod (and (pair? (cddr x)) (caddr x)))) + (let-values (((reqform _) (##sys#process-require lib mod #f))) + (compile reqform e #f tf cntr #f)))] [(##core#elaborationtimeonly ##core#elaborationtimetoo) ; <- Note this! (##sys#eval/meta (cadr x)) @@ -1250,20 +1251,26 @@ (define (##sys#process-require lib mod compile-mode) (let ((mod (or (eq? lib mod) mod))) (cond - ((assq lib core-unit-requirements) => cdr) - ((memq lib builtin-features) '(##core#undefined)) + ((assq lib core-unit-requirements) => + (lambda (a) (values (cdr a) #f))) + ((memq lib builtin-features) + (values '(##core#undefined) #t)) ((memq lib core-units) - (if compile-mode - `(##core#callunit ,lib) - `(chicken.load#load-unit (##core#quote ,lib) - (##core#quote #f) - (##core#quote #f)))) + (values + (if compile-mode + `(##core#callunit ,lib) + `(chicken.load#load-unit (##core#quote ,lib) + (##core#quote #f) + (##core#quote #f))) + #t)) ((eq? compile-mode 'static) - `(##core#callunit ,lib)) + (values `(##core#callunit ,lib) #f)) (else - `(chicken.load#load-extension (##core#quote ,lib) - (##core#quote ,mod) - (##core#quote #f)))))) + (values + `(chicken.load#load-extension (##core#quote ,lib) + (##core#quote ,mod) + (##core#quote #f)) + #f))))) ;;; Find included file: diff --git a/tests/sample-module.scm b/tests/sample-module.scm index 32ac627f..75b3e3f6 100644 --- a/tests/sample-module.scm +++ b/tests/sample-module.scm @@ -1,3 +1,4 @@ (module sample-module (foo) (import scheme) +(import (srfi 9)) ; ensure builtin feature doesn't appear in .link file (define foo 42)) -- 2.26.2