diff --git a/tools/ispx/go.mod b/tools/ispx/go.mod index 0f9c978bb..b8ab3cd21 100644 --- a/tools/ispx/go.mod +++ b/tools/ispx/go.mod @@ -3,9 +3,9 @@ module github.com/goplus/builder/ispx go 1.21 require ( - github.com/goplus/igop v0.24.0 + github.com/goplus/igop v0.27.0 github.com/goplus/reflectx v1.2.2 - github.com/goplus/spx v1.0.1-0.20240815092545-3df776b555a0 + github.com/goplus/spx v1.0.1-0.20240828022121-d1b083ef69a3 github.com/hajimehoshi/ebiten/v2 v2.7.8 ) @@ -19,9 +19,9 @@ require ( github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 // indirect github.com/goplus/canvas v0.1.0 // indirect - github.com/goplus/gogen v1.15.1 // indirect - github.com/goplus/gop v1.2.5 // indirect - github.com/goplus/mod v0.13.9 // indirect + github.com/goplus/gogen v1.15.2 // indirect + github.com/goplus/gop v1.2.6 // indirect + github.com/goplus/mod v0.13.10 // indirect github.com/hajimehoshi/go-mp3 v0.3.4 // indirect github.com/jezek/xgb v1.1.1 // indirect github.com/pkg/errors v0.9.1 // indirect diff --git a/tools/ispx/go.sum b/tools/ispx/go.sum index 9268c84f5..1acce4cca 100644 --- a/tools/ispx/go.sum +++ b/tools/ispx/go.sum @@ -24,22 +24,21 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/gopherjs/gopherjs v0.0.0-20180708170036-38b413be4187/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0= github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/goplus/c2go v0.7.25/go.mod h1:e9oe4jDVhGFMJLEGmPSrVkLuXbLZAEmAu0/uD6fSz5E= +github.com/goplus/c2go v0.7.26/go.mod h1:ePAStubV/ls8mmdPGQo6VfADTVd46rKuBemE4zzBDnA= github.com/goplus/canvas v0.1.0 h1:Vx3f2+U8UANvWf5/01YsQYKNbZDm1GZCjhlEBFrQkeU= github.com/goplus/canvas v0.1.0/go.mod h1:Rhcvo5qkpD9WuXFnvnXtrBSY97l6h7sXQuofrmiLNdM= -github.com/goplus/gogen v1.15.0/go.mod h1:92qEzVgv7y8JEFICWG9GvYI5IzfEkxYdsA1DbmnTkqk= -github.com/goplus/gogen v1.15.1 h1:iz/fFpOeldjwmnjLzEdNsZF2mCf+sOHJavbAvV3o7sY= -github.com/goplus/gogen v1.15.1/go.mod h1:92qEzVgv7y8JEFICWG9GvYI5IzfEkxYdsA1DbmnTkqk= -github.com/goplus/gop v1.2.5 h1:kBCcvJ7ONt3IqTUTNGb+n9JO1nwTp5STg1UUSEfvz/k= -github.com/goplus/gop v1.2.5/go.mod h1:5rLlryvlZhWLIBw1Rok8s0uvyO54vcYw/7sFLhqtNTc= -github.com/goplus/igop v0.24.0 h1:xyk344nspra5REuRxEx/9zSntmYeCp2PIlKeEBAED2Y= -github.com/goplus/igop v0.24.0/go.mod h1:YF1Xt/aVB2xWoPYqJr+mJPqUxoEXMcaUB30v7YMHUn0= -github.com/goplus/mod v0.13.9 h1:B9zZoHi2AzMltTSOFqZNVjqGlSMlhhNTWwEzVqhTQzg= -github.com/goplus/mod v0.13.9/go.mod h1:MibsLSftGmxaQq78YzUzNviyFwB9RtpMaoscufvEKH4= +github.com/goplus/gogen v1.15.2 h1:Q6XaSx/Zi5tWnjfAziYsQI6Jv6MgODRpFtOYqNkiiqM= +github.com/goplus/gogen v1.15.2/go.mod h1:92qEzVgv7y8JEFICWG9GvYI5IzfEkxYdsA1DbmnTkqk= +github.com/goplus/gop v1.2.6 h1:kog3c5Js+8EopqmI4+CwueXsqibnBwYVt5q5N7juRVY= +github.com/goplus/gop v1.2.6/go.mod h1:uREWbR1MrFaviZ4Mbx4ZCcAYDoqzO0iv1Qo6Np0Xx4E= +github.com/goplus/igop v0.27.0 h1:4Wk5CIdm3FI1w6d0Y8GO2IC9sgs4wwYdpizCgRdcfYs= +github.com/goplus/igop v0.27.0/go.mod h1:V8Kf/b4nrw0OPPodwnOYZPCpXvU+hqzuhSAXIToT0ME= +github.com/goplus/mod v0.13.10 h1:5Om6KOvo31daN7N30kWU1vC5zhsJPM+uPbcEN/FnlzE= +github.com/goplus/mod v0.13.10/go.mod h1:HDuPZgpWiaTp3PUolFgsiX+Q77cbUWB/mikVHfYND3c= github.com/goplus/reflectx v1.2.2 h1:T1p20OIH/HcnAvQQNnDLwl6AZOjU34icsfc6migD6L8= github.com/goplus/reflectx v1.2.2/go.mod h1:wHOS9ilbB4zrecI0W1dMmkW9JMcpXV7VjALVbNU9xfM= -github.com/goplus/spx v1.0.1-0.20240815092545-3df776b555a0 h1:lBl1gTGmG5Mabz4n6F5CUCBhrBVj2fzRCipPwPQDZl4= -github.com/goplus/spx v1.0.1-0.20240815092545-3df776b555a0/go.mod h1:UNZub8iRpxDvLpjJYYpiM7r36GqweTn2SNSKN49kG90= +github.com/goplus/spx v1.0.1-0.20240828022121-d1b083ef69a3 h1:W5d93j+hZ+qeV9Do51Tm7JlPQkua4TG5aylTAwetWTU= +github.com/goplus/spx v1.0.1-0.20240828022121-d1b083ef69a3/go.mod h1:UNZub8iRpxDvLpjJYYpiM7r36GqweTn2SNSKN49kG90= github.com/hajimehoshi/ebiten/v2 v2.7.8 h1:QrlvF2byCzMuDsbxFReJkOCbM3O2z1H/NKQaGcA8PKk= github.com/hajimehoshi/ebiten/v2 v2.7.8/go.mod h1:Ulbq5xDmdx47P24EJ+Mb31Zps7vQq+guieG9mghQUaA= github.com/hajimehoshi/go-mp3 v0.3.2/go.mod h1:qMJj/CSDxx6CGHiZeCgbiq2DSUkbK0UbtXShQcnfyMM= @@ -64,7 +63,6 @@ github.com/qiniu/audio v0.2.1/go.mod h1:APMJRPaS4toviejZnDzzZ8wVyr12jqZhd3xfKr/q github.com/qiniu/oksvg v0.2.0-no-charset h1:KKQg81v52pd5VyaxrF891igoOO50epKfFWkryYgntnE= github.com/qiniu/oksvg v0.2.0-no-charset/go.mod h1:YCAOS1HFo2kMxfcFCjrJMeo93KGFYaBAKl7LvrAkltQ= github.com/qiniu/x v1.11.5/go.mod h1:03Ni9tj+N2h2aKnAz+6N0Xfl8FwMEDRC2PAlxekASDs= -github.com/qiniu/x v1.13.9/go.mod h1:INZ2TSWSJVWO/RuELQROERcslBwVgFG7MkTfEdaQz9E= github.com/qiniu/x v1.13.10 h1:J4Z3XugYzAq85SlyAfqlKVrbf05glMbAOh+QncsDQpE= github.com/qiniu/x v1.13.10/go.mod h1:INZ2TSWSJVWO/RuELQROERcslBwVgFG7MkTfEdaQz9E= github.com/srwiley/rasterx v0.0.0-20200120212402-85cb7272f5e9/go.mod h1:mvWM0+15UqyrFKqdRjY6LuAVJR0HOVhJlEgZ5JWtSWU= diff --git a/tools/ispx/main.go b/tools/ispx/main.go index daf335493..5e8e120cf 100644 --- a/tools/ispx/main.go +++ b/tools/ispx/main.go @@ -48,6 +48,25 @@ func main() { var mode igop.Mode ctx := igop.NewContext(mode) + err = gopbuild.RegisterPackagePatch(ctx, "github.com/goplus/spx", ` +package spx + +import ( + . "github.com/goplus/spx" +) + +func Gopt_Game_Gopx_GetWidget[T any](sg ShapeGetter, name string) *T { + widget := GetWidget_(sg, name) + if result, ok := widget.(interface{}).(*T); ok { + return result + } else { + panic("GetWidget: type mismatch") + } +} +`) + if err != nil { + log.Fatalln("Failed to register package patch:", err) + } source, err := gopbuild.BuildFSDir(ctx, fs, "") if err != nil { log.Fatalln("Failed to build Go+ source:", err) @@ -57,7 +76,6 @@ func main() { // otherwise, it produces: "fatal error: unreachable method called. linker bug?" type Gamer interface { initGame(sprites []spx.Spriter) *spx.Game - getGame() *spx.Game } gameRun := func(game spx.Gamer, resource interface{}, gameConf ...*spx.Config) { path := resource.(string) diff --git a/tools/ispx/pkg/github.com/goplus/spx/export.go b/tools/ispx/pkg/github.com/goplus/spx/export.go index 4854d561c..2e9c98524 100644 --- a/tools/ispx/pkg/github.com/goplus/spx/export.go +++ b/tools/ispx/pkg/github.com/goplus/spx/export.go @@ -64,10 +64,11 @@ func init() { "unsafe": "unsafe", }, Interfaces: map[string]reflect.Type{ - "Gamer": reflect.TypeOf((*q.Gamer)(nil)).Elem(), - "Shape": reflect.TypeOf((*q.Shape)(nil)).Elem(), - "Spriter": reflect.TypeOf((*q.Spriter)(nil)).Elem(), - "Widget": reflect.TypeOf((*q.Widget)(nil)).Elem(), + "Gamer": reflect.TypeOf((*q.Gamer)(nil)).Elem(), + "Shape": reflect.TypeOf((*q.Shape)(nil)).Elem(), + "ShapeGetter": reflect.TypeOf((*q.ShapeGetter)(nil)).Elem(), + "Spriter": reflect.TypeOf((*q.Spriter)(nil)).Elem(), + "Widget": reflect.TypeOf((*q.Widget)(nil)).Elem(), }, NamedTypes: map[string]reflect.Type{ "Camera": reflect.TypeOf((*q.Camera)(nil)).Elem(), @@ -95,6 +96,7 @@ func init() { Funcs: map[string]reflect.Value{ "Exit__0": reflect.ValueOf(q.Exit__0), "Exit__1": reflect.ValueOf(q.Exit__1), + "GetWidget_": reflect.ValueOf(q.GetWidget_), "Gopt_Game_Main": reflect.ValueOf(q.Gopt_Game_Main), "Gopt_Game_Reload": reflect.ValueOf(q.Gopt_Game_Reload), "Gopt_Game_Run": reflect.ValueOf(q.Gopt_Game_Run),