~ 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