~ chicken-core (chicken-5) a82aa3b22559d63d998dd0d8da8ebaa5039edcad
commit a82aa3b22559d63d998dd0d8da8ebaa5039edcad Author: felix <felix@call-with-current-continuation.org> AuthorDate: Tue Sep 28 16:50:03 2021 +0200 Commit: Peter Bex <peter@more-magic.net> CommitDate: Wed Oct 6 07:27:02 2021 +0200 Ensure required-libraries always contains loadable units which was dropped in 41a1decf. This should fix #1788. Added flimsy little test. Signed-off-by: Peter Bex <peter@more-magic.net> diff --git a/NEWS b/NEWS index 0ce3a1bd..110a0329 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,9 @@ 5.3.0rc4 +- Compiler + - Statically linked programs using built-in libraries are supported + again (fixes #1788, a regression from 5.2.0). + - Core libraries - In (chicken process-context posix), the setters for current-user-id, current-effective-user-id and current-group-id now check that the 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))Trap