Skip to content

Commit 8c80c31

Browse files
authored
[0028] 修复 bin/gf repl 中 liii base64 无法使用的问题 (#759)
1 parent a6bf5b6 commit 8c80c31

3 files changed

Lines changed: 49 additions & 3 deletions

File tree

devel/0028.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# [0028] 修复 bin/gf repl 中 liii base64 无法使用的问题
2+
3+
## 相关文档
4+
- [dddd.md](dddd.md) - 任务文档模板
5+
6+
## 任务相关的代码文件
7+
- src/goldfish.hpp
8+
- goldfish/liii/base64.scm
9+
10+
## 如何测试
11+
12+
### 确定性测试(单元测试)
13+
```
14+
xmake b goldfish
15+
bin/gf tests/liii/base64-test.scm
16+
```
17+
18+
### 非确定性测试(文档验证)
19+
```
20+
bin/gf repl
21+
(import (liii base64))
22+
(base64-encode "test")
23+
(base64-decode "R29sZGZpc2g=")
24+
```
25+
26+
## 如何提交
27+
28+
提交前执行以下最少步骤:
29+
30+
```bash
31+
bin/gf test --changed-since=main
32+
```
33+
34+
## 2026/05/05 修复 bin/gf repl 中 liii base64 无法使用的问题
35+
### What
36+
修复 `bin/gf repl` 中导入 `(liii base64)` 后,base64 相关函数无法使用的问题。
37+
38+
1.`src/goldfish.hpp``mode liii` 启动逻辑中,新增 `(scheme base)` 的自动导入
39+
2. 同步更新 repl 启动时的提示信息,将 `(scheme base)` 列入 additionally imports
40+
3.`goldfish/liii/base64.scm` 中显式导入 `(scheme base)``(liii error)`
41+
42+
### Why
43+
`bin/gf -e` 模式下 `(import (liii base64))` 可以正常工作,但在 `bin/gf repl` 中会出现 `unbound variable string->utf8` 等错误。根本原因是 `mode liii` 只自动导入了 `(liii base) (liii error) (liii string)`,没有导入 `(scheme base)`。在 repl 的严格库编译环境下,`define-library` 内部无法解析来自 `(scheme base)` 的符号(如 `string->utf8``utf8->string``char->integer` 等),导致库加载失败。
44+
45+
### How
46+
通过修改 `src/goldfish.hpp` 第 4250 行,在 `mode liii``mode default` 的初始化导入列表中加入 `(scheme base)`,确保 repl 环境下所有库都能访问基础函数。同时保留 `goldfish/liii/base64.scm` 中的显式导入声明,使库的依赖关系自包含。

goldfish/liii/base64.scm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
(define-library (liii base64)
2-
(import (liii base) (liii bitwise))
2+
(import (scheme base) (liii base) (liii bitwise) (liii error))
33
(export string-base64-encode
44
bytevector-base64-encode
55
base64-encode

src/goldfish.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4247,7 +4247,7 @@ customize_goldfish_by_mode (s7_scheme* sc, string mode, const char* boot_file_pa
42474247
}
42484248

42494249
if (mode == "default" || mode == "liii") {
4250-
s7_eval_c_string (sc, "(import (liii base) (liii error) (liii string))");
4250+
s7_eval_c_string (sc, "(import (scheme base) (liii base) (liii error) (liii string))");
42514251
}
42524252
else if (mode == "scheme") {
42534253
s7_eval_c_string (sc, "(import (liii base) (liii error))");
@@ -4696,7 +4696,7 @@ goldfish_repl (s7_scheme* sc, const string& mode) {
46964696
GOLDFISH_VERSION, S7_VERSION, S7_DATE);
46974697
// Display mode info; liii mode shows extra imported libraries
46984698
if (mode == "liii" || mode == "default") {
4699-
ic_printf ("[b]Mode:[/] [b]%s[/] (additionally imports: (liii base) (liii error) (liii string) compared to r7rs)\n\n",
4699+
ic_printf ("[b]Mode:[/] [b]%s[/] (additionally imports: (scheme base) (liii base) (liii error) (liii string) compared to r7rs)\n\n",
47004700
mode.c_str ());
47014701
}
47024702
else {

0 commit comments

Comments
 (0)