From b2dc2353b4240296764603f741be6a8642f7cc54 Mon Sep 17 00:00:00 2001 From: wuxinyi Date: Tue, 3 Mar 2026 19:20:13 +0800 Subject: [PATCH 1/3] fix(ispx): enable static loading in ispx interpreter initialization --- tools/ispx/main.go | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/tools/ispx/main.go b/tools/ispx/main.go index 0d4cdede07..aa415ba2d1 100644 --- a/tools/ispx/main.go +++ b/tools/ispx/main.go @@ -24,7 +24,7 @@ func init() { // ispxInit initializes the ispx interpreter with extended capabilities. func ispxInit() error { - ixgoCtx := ixgo.NewContext(ixgo.SupportMultipleInterp) + ixgoCtx := ixgo.NewContext(ixgo.SupportMultipleInterp | xgobuild.StaticLoad) ixgoCtx.Lookup = nil // Let [ispx.Init] handle the lookup. ixgoCtx.SetPanic(logWithPanicInfo) @@ -49,6 +49,27 @@ func ispxInit() error { return fmt.Errorf("failed to init ai: %w", err) } + ixgoCtx.Loader.Import("fmt") + ixgoCtx.Loader.Import("os") + ixgoCtx.Loader.Import("sync/atomic") + ixgoCtx.Loader.Import("sync/atomic") + ixgoCtx.Loader.Import("sync/atomic") + ixgoCtx.Loader.Import("math") + ixgoCtx.Loader.Import("time") + ixgoCtx.Loader.Import("sync") + ixgoCtx.Loader.Import("io") + ixgoCtx.Loader.Import("io/fs") + ixgoCtx.Loader.Import("reflect") + ixgoCtx.Loader.Import("strconv") + ixgoCtx.Loader.Import("strings") + ixgoCtx.Loader.Import("github.com/goplus/spx/v2") + ixgoCtx.Loader.Import("github.com/qiniu/x/osx") + ixgoCtx.Loader.Import("github.com/qiniu/x/xgo") + ixgoCtx.Loader.Import("github.com/qiniu/x/xgo/ng") + ixgoCtx.Loader.Import("github.com/qiniu/x/stringutil") + ixgoCtx.Loader.Import("github.com/qiniu/x/stringslice") + ixgoCtx.Loader.Import("github.com/goplus/builder/tools/ai") + return ispx.Init(ixgoCtx) } From 226d7f11a1380bc16a32b31553a52c6f3972f992 Mon Sep 17 00:00:00 2001 From: wuxinyi Date: Wed, 4 Mar 2026 10:07:44 +0800 Subject: [PATCH 2/3] fix(ispx): remove duplicate import of sync/atomic in ispxInit function --- tools/ispx/main.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/tools/ispx/main.go b/tools/ispx/main.go index aa415ba2d1..d7030af4dc 100644 --- a/tools/ispx/main.go +++ b/tools/ispx/main.go @@ -52,8 +52,6 @@ func ispxInit() error { ixgoCtx.Loader.Import("fmt") ixgoCtx.Loader.Import("os") ixgoCtx.Loader.Import("sync/atomic") - ixgoCtx.Loader.Import("sync/atomic") - ixgoCtx.Loader.Import("sync/atomic") ixgoCtx.Loader.Import("math") ixgoCtx.Loader.Import("time") ixgoCtx.Loader.Import("sync") From 06c568e70ae87ac4c40149e580628fe7735e34fd Mon Sep 17 00:00:00 2001 From: wuxinyi Date: Wed, 4 Mar 2026 16:40:40 +0800 Subject: [PATCH 3/3] refactor(ispx): streamline package imports and initialize default packages --- tools/ispx/main.go | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/tools/ispx/main.go b/tools/ispx/main.go index d7030af4dc..153ab576da 100644 --- a/tools/ispx/main.go +++ b/tools/ispx/main.go @@ -11,6 +11,13 @@ import ( "github.com/goplus/spx/v2/pkg/ispx" ) +var ( + // defaultPackagesToImport is the list of packages that are always imported by ispx. + defaultPackagesToImport = []string{ + "github.com/goplus/builder/tools/ai", + } +) + func init() { // NOTE: Keep in sync with the config in spx's gop.mod. xgobuild.RegisterProject(&modfile.Project{ @@ -27,6 +34,9 @@ func ispxInit() error { ixgoCtx := ixgo.NewContext(ixgo.SupportMultipleInterp | xgobuild.StaticLoad) ixgoCtx.Lookup = nil // Let [ispx.Init] handle the lookup. ixgoCtx.SetPanic(logWithPanicInfo) + for _, pkg := range defaultPackagesToImport { + ixgoCtx.Loader.Import(pkg) + } // Override fmt.Print* functions to log with caller info. ixgoCtx.RegisterExternal("fmt.Print", func(frame *ixgo.Frame, a ...any) (n int, err error) { @@ -49,25 +59,6 @@ func ispxInit() error { return fmt.Errorf("failed to init ai: %w", err) } - ixgoCtx.Loader.Import("fmt") - ixgoCtx.Loader.Import("os") - ixgoCtx.Loader.Import("sync/atomic") - ixgoCtx.Loader.Import("math") - ixgoCtx.Loader.Import("time") - ixgoCtx.Loader.Import("sync") - ixgoCtx.Loader.Import("io") - ixgoCtx.Loader.Import("io/fs") - ixgoCtx.Loader.Import("reflect") - ixgoCtx.Loader.Import("strconv") - ixgoCtx.Loader.Import("strings") - ixgoCtx.Loader.Import("github.com/goplus/spx/v2") - ixgoCtx.Loader.Import("github.com/qiniu/x/osx") - ixgoCtx.Loader.Import("github.com/qiniu/x/xgo") - ixgoCtx.Loader.Import("github.com/qiniu/x/xgo/ng") - ixgoCtx.Loader.Import("github.com/qiniu/x/stringutil") - ixgoCtx.Loader.Import("github.com/qiniu/x/stringslice") - ixgoCtx.Loader.Import("github.com/goplus/builder/tools/ai") - return ispx.Init(ixgoCtx) }