Hi!
The attached patch should fix the issue of builtin module ids appearing in
generated
..link files.
felix
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