Skip to content

Commit 578082e

Browse files
author
g.ph
committed
fix bug
Signed-off-by: g.ph <g@google.com>
1 parent a221c7f commit 578082e

15 files changed

+91
-166
lines changed

Py.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,22 @@ func IsInitialized() int {
3434
}
3535
func Finalize() {
3636
SystemModuleMap.Range(func(key, value any) bool {
37-
SystemModuleMap.Delete(key)
37+
//SystemModuleMap.Delete(key)
3838
m := value.(*PyModule)
3939
m.DecRef()
4040
return true
4141
})
42+
_UserException.DecRef()
4243
cpy3.Py_Finalize()
4344
}
4445
func FinalizeEx() int {
4546
SystemModuleMap.Range(func(key, value any) bool {
46-
SystemModuleMap.Delete(key)
47+
//SystemModuleMap.Delete(key)
4748
m := value.(*PyModule)
4849
m.DecRef()
4950
return true
5051
})
52+
_UserException.DecRef()
5153
return cpy3.Py_FinalizeEx()
5254
}
5355
func SetProgramName(name string) {

PyClass.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -143,14 +143,14 @@ var PyClassInstanceMethodForwardCallBack = syscall.NewCallback(func(self uintptr
143143
return Py_RETURN_NONE().instance
144144
})
145145

146-
func init() {
147-
PyClassInstanceMethodCallDef = &cpy3.PyMethodDef{
148-
Ml_name: cpy3.GoStrToCStr("Call"),
149-
Ml_meth: PyClassInstanceMethodForwardCallBack,
150-
Ml_flags: 3,
151-
Ml_doc: cpy3.GoStrToCStr("class call forward"),
152-
}
153-
}
146+
//func init() {
147+
// PyClassInstanceMethodCallDef = &cpy3.PyMethodDef{
148+
// Ml_name: cpy3.GoStrToCStr("Call"),
149+
// Ml_meth: PyClassInstanceMethodForwardCallBack,
150+
// Ml_flags: 3,
151+
// Ml_doc: cpy3.GoStrToCStr("class call forward"),
152+
// }
153+
//}
154154

155155
//func CreateClass(name string, dict map[string]any) *PyClass {
156156
// if dict == nil {

PyModule.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package py3
22

33
import (
44
"fmt"
5+
"github.com/aadog/msvcrt-go"
56
"github.com/aadog/py3-go/cpy3"
67
"reflect"
78
"sync"
@@ -17,8 +18,9 @@ const (
1718
var pyModuleInitMap = sync.Map{}
1819

1920
type PyModuleGoObj struct {
20-
moduleDef *cpy3.PyModuleDef
21-
CallMap sync.Map
21+
moduleDef *cpy3.PyModuleDef
22+
methodsDef []cpy3.PyMethodDef
23+
CallMap sync.Map
2224
}
2325
type PyModule struct {
2426
PyObject
@@ -80,7 +82,9 @@ func PyTypeToGoType(p *PyObject) any {
8082

8183
return 0
8284
}
85+
8386
func PyMethodForward(self *PyModule, args *PyTuple, method interface{}) *PyObject {
87+
8488
methodType := reflect.TypeOf(method)
8589
methodValue := reflect.ValueOf(method)
8690
if methodType.Kind() != reflect.Func {
@@ -138,12 +142,12 @@ var PyModuleMethodForwardCallBack = syscall.NewCallback(func(self uintptr, args
138142
})
139143

140144
func CreateModule(name string, doc string) *PyModule {
141-
var pyModuleMethodCallDefs = make([]cpy3.PyMethodDef, 0)
145+
pyModuleMethodCallDefs := make([]cpy3.PyMethodDef, 0)
142146
methodCallDef := cpy3.PyMethodDef{
143-
Ml_name: cpy3.GoStrToCStr("Call"),
147+
Ml_name: msvcrt.MallocCString("Call"),
144148
Ml_meth: PyModuleMethodForwardCallBack,
145149
Ml_flags: 1,
146-
Ml_doc: cpy3.GoStrToCStr("module call forward"),
150+
Ml_doc: msvcrt.MallocCString("module call forward"),
147151
}
148152
pyModuleMethodCallDefs = append(pyModuleMethodCallDefs, methodCallDef)
149153
moduleNullMethodDef := cpy3.PyMethodDef{
@@ -156,12 +160,13 @@ func CreateModule(name string, doc string) *PyModule {
156160

157161
module := &PyModule{}
158162
module.GoObj = new(PyModuleGoObj)
163+
module.GoObj.methodsDef = pyModuleMethodCallDefs
159164
module.GoObj.moduleDef = &cpy3.PyModuleDef{
160165
M_base: cpy3.PyModuleDef_Base{
161166
Ob_base: cpy3.PyObject_HEAD_INIT(0),
162167
},
163-
M_name: cpy3.GoStrToCStr(name),
164-
M_doc: cpy3.GoStrToCStr(doc),
168+
M_name: msvcrt.MallocCString(name),
169+
M_doc: msvcrt.MallocCString(doc),
165170
M_size: -1,
166171
M_methods: uintptr(unsafe.Pointer(&pyModuleMethodCallDefs[0])),
167172
M_slots: 0,

cpy3/PyBytes.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package cpy3
22

3+
import "github.com/aadog/msvcrt-go"
4+
35
func PyBytes_FromString(s string) uintptr {
4-
r, _, _ := pyBytes_FromString.Call(GoStrToCStr(s))
6+
r, _, _ := pyBytes_FromString.Call(msvcrt.StringToCUTF8String(s))
57
return r
68
}

cpy3/PyDict.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package cpy3
22

3+
import "github.com/aadog/msvcrt-go"
4+
35
func PyDict_SetItem(obj uintptr, key uintptr, val uintptr) int {
46
r, _, _ := pyDict_SetItem.Call(obj, key, val)
57
return int(r)
68
}
79

810
func PyDict_SetItemString(obj uintptr, key string, val uintptr) int {
9-
r, _, _ := pyDict_SetItemString.Call(obj, GoStrToCStr(key), val)
11+
r, _, _ := pyDict_SetItemString.Call(obj, msvcrt.StringToCUTF8String(key), val)
1012
return int(r)
1113
}
1214

@@ -32,7 +34,7 @@ func PyDict_Keys(obj uintptr) uintptr {
3234
return r
3335
}
3436
func PyDict_GetItemString(obj uintptr, key string) uintptr {
35-
r, _, _ := pyDict_GetItemString.Call(obj, GoStrToCStr(key))
37+
r, _, _ := pyDict_GetItemString.Call(obj, msvcrt.StringToCUTF8String(key))
3638
return r
3739
}
3840

@@ -41,6 +43,6 @@ func PyDict_DelItem(obj uintptr, key uintptr) int {
4143
return int(r)
4244
}
4345
func PyDict_DelItemString(obj uintptr, key string) int {
44-
r, _, _ := pyDict_DelItemString.Call(obj, GoStrToCStr(key))
46+
r, _, _ := pyDict_DelItemString.Call(obj, msvcrt.StringToCUTF8String(key))
4547
return int(r)
4648
}

cpy3/PyErr.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package cpy3
22

3+
import "github.com/aadog/msvcrt-go"
34

4-
func PyErr_NewException(name string,base uintptr,dict uintptr) uintptr {
5-
r,_,_:=pyErr_NewException.Call(GoStrToCStr(name),base,dict)
5+
func PyErr_NewException(name string, base uintptr, dict uintptr) uintptr {
6+
r, _, _ := pyErr_NewException.Call(msvcrt.StringToCUTF8String(name), base, dict)
67
return r
78
}
89
func PyExc_Exception() uintptr {
@@ -14,5 +15,5 @@ func PyExc_ValueError() uintptr {
1415
}
1516

1617
func PyErr_SetString(tp uintptr, message string) {
17-
pyErr_SetString.Call(tp, GoStrToCStr(message))
18+
pyErr_SetString.Call(tp, msvcrt.StringToCUTF8String(message))
1819
}

cpy3/PyModule.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package cpy3
22

3-
import "unsafe"
3+
import (
4+
"github.com/aadog/msvcrt-go"
5+
"unsafe"
6+
)
47

58
type PyMethodDef struct {
69
Ml_name uintptr
@@ -55,7 +58,7 @@ func PyImport_Import(name uintptr) uintptr {
5558

5659
func PyModule_GetName(obj uintptr) string {
5760
r, _, _ := pyModule_GetName.Call(obj)
58-
return CStrToGoStr(r)
61+
return msvcrt.CUtf8ToString(r)
5962
}
6063
func PyModule_GetDict(obj uintptr) uintptr {
6164
r, _, _ := pyModule_GetDict.Call(obj)
@@ -66,18 +69,18 @@ func PyModule_AddFunctions(obj uintptr, functionsDef uintptr) int {
6669
return int(r)
6770
}
6871
func PyModule_AddIntConstant(obj uintptr, name string, value int64) int {
69-
r, _, _ := pyModule_AddIntConstant.Call(obj, GoStrToCStr(name), uintptr(value))
72+
r, _, _ := pyModule_AddIntConstant.Call(obj, msvcrt.StringToCUTF8String(name), uintptr(value))
7073
return int(r)
7174
}
7275
func PyModule_AddStringConstant(obj uintptr, name string, value string) int {
73-
r, _, _ := pyModule_AddStringConstant.Call(obj, GoStrToCStr(name), GoStrToCStr(value))
76+
r, _, _ := pyModule_AddStringConstant.Call(obj, msvcrt.StringToCUTF8String(name), msvcrt.StringToCUTF8String(value))
7477
return int(r)
7578
}
7679
func PyModule_AddObject(obj uintptr, name string, value uintptr) int {
77-
r, _, _ := pyModule_AddObject.Call(obj, GoStrToCStr(name), value)
80+
r, _, _ := pyModule_AddObject.Call(obj, msvcrt.StringToCUTF8String(name), value)
7881
return int(r)
7982
}
8083
func PyModule_AddObjectRef(obj uintptr, name string, value uintptr) int {
81-
r, _, _ := pyModule_AddObjectRef.Call(obj, GoStrToCStr(name), value)
84+
r, _, _ := pyModule_AddObjectRef.Call(obj, msvcrt.StringToCUTF8String(name), value)
8285
return int(r)
8386
}

cpy3/PyObject.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
11
package cpy3
22

3+
import "github.com/aadog/msvcrt-go"
4+
35
func PyObject_GetAttrString(obj uintptr, attr_name string) uintptr {
4-
r, _, _ := pyObject_GetAttrString.Call(obj, GoStrToCStr(attr_name))
6+
r, _, _ := pyObject_GetAttrString.Call(obj, msvcrt.StringToCUTF8String(attr_name))
57
return r
68
}
79
func PyObject_HasAttrString(obj uintptr, attr_name string) int {
8-
r, _, _ := pyObject_HasAttrString.Call(obj, GoStrToCStr(attr_name))
10+
r, _, _ := pyObject_HasAttrString.Call(obj, msvcrt.StringToCUTF8String(attr_name))
911
return int(r)
1012
}
1113
func PyObject_SetAttrString(obj uintptr, attr_name string, v uintptr) int {
12-
r, _, _ := pyObject_SetAttrString.Call(obj, GoStrToCStr(attr_name), v)
14+
r, _, _ := pyObject_SetAttrString.Call(obj, msvcrt.StringToCUTF8String(attr_name), v)
1315
return int(r)
1416
}
1517

1618
func PyObject_DelAttrString(obj uintptr, attr_name string) int {
17-
r, _, _ := pyObject_DelAttrString.Call(obj, GoStrToCStr(attr_name))
19+
r, _, _ := pyObject_DelAttrString.Call(obj, msvcrt.StringToCUTF8String(attr_name))
1820
return int(r)
1921
}
2022

cpy3/PyType.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package cpy3
22

3+
import "github.com/aadog/msvcrt-go"
4+
35
func PyType_Name(obj uintptr) string {
46
r, _, _ := pyType_Name.Call(obj)
5-
return CStrToGoStr(r)
7+
return msvcrt.CUtf8ToString(r)
68
}
79

810
func PyType_GetModule(obj uintptr) uintptr {

cpy3/PyUnicode.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package cpy3
22

3-
import "unsafe"
3+
import (
4+
"github.com/aadog/msvcrt-go"
5+
"unsafe"
6+
)
47

58
func PyUnicode_DecodeFSDefault(u string) uintptr {
6-
r, _, _ := pyUnicode_DecodeFSDefault.Call(GoStrToCStr(u))
9+
r, _, _ := pyUnicode_DecodeFSDefault.Call(msvcrt.StringToCUTF8String(u))
710
return r
811
}
912
func PyUnicode_FromString(u string) uintptr {
@@ -13,7 +16,7 @@ func PyUnicode_FromString(u string) uintptr {
1316
r, _, _ := pyUnicode_FromString.Call(uintptr(unsafe.Pointer(&b[0])))
1417
return r
1518
}
16-
r, _, _ := pyUnicode_FromString.Call(GoStrToCStr(u))
19+
r, _, _ := pyUnicode_FromString.Call(msvcrt.StringToCUTF8String(u))
1720
return r
1821
}
1922
func PyUnicode_GetLength(obj uintptr) int64 {
@@ -22,5 +25,5 @@ func PyUnicode_GetLength(obj uintptr) int64 {
2225
}
2326
func PyUnicode_AsUTF8(obj uintptr) string {
2427
r, _, _ := pyUnicode_AsUTF8.Call(obj)
25-
return CStrToGoStr(r)
28+
return msvcrt.CUtf8ToString(r)
2629
}

cpy3/cfuncs.go

Lines changed: 0 additions & 101 deletions
This file was deleted.

0 commit comments

Comments
 (0)