Skip to content

Commit

Permalink
fix bug
Browse files Browse the repository at this point in the history
Signed-off-by: g.ph <g@google.com>
  • Loading branch information
g.ph committed Aug 22, 2022
1 parent a221c7f commit 578082e
Show file tree
Hide file tree
Showing 15 changed files with 91 additions and 166 deletions.
6 changes: 4 additions & 2 deletions Py.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,20 +34,22 @@ func IsInitialized() int {
}
func Finalize() {
SystemModuleMap.Range(func(key, value any) bool {
SystemModuleMap.Delete(key)
//SystemModuleMap.Delete(key)
m := value.(*PyModule)
m.DecRef()
return true
})
_UserException.DecRef()
cpy3.Py_Finalize()
}
func FinalizeEx() int {
SystemModuleMap.Range(func(key, value any) bool {
SystemModuleMap.Delete(key)
//SystemModuleMap.Delete(key)
m := value.(*PyModule)
m.DecRef()
return true
})
_UserException.DecRef()
return cpy3.Py_FinalizeEx()
}
func SetProgramName(name string) {
Expand Down
16 changes: 8 additions & 8 deletions PyClass.go
Original file line number Diff line number Diff line change
Expand Up @@ -143,14 +143,14 @@ var PyClassInstanceMethodForwardCallBack = syscall.NewCallback(func(self uintptr
return Py_RETURN_NONE().instance
})

func init() {
PyClassInstanceMethodCallDef = &cpy3.PyMethodDef{
Ml_name: cpy3.GoStrToCStr("Call"),
Ml_meth: PyClassInstanceMethodForwardCallBack,
Ml_flags: 3,
Ml_doc: cpy3.GoStrToCStr("class call forward"),
}
}
//func init() {
// PyClassInstanceMethodCallDef = &cpy3.PyMethodDef{
// Ml_name: cpy3.GoStrToCStr("Call"),
// Ml_meth: PyClassInstanceMethodForwardCallBack,
// Ml_flags: 3,
// Ml_doc: cpy3.GoStrToCStr("class call forward"),
// }
//}

//func CreateClass(name string, dict map[string]any) *PyClass {
// if dict == nil {
Expand Down
19 changes: 12 additions & 7 deletions PyModule.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package py3

import (
"fmt"
"github.com/aadog/msvcrt-go"
"github.com/aadog/py3-go/cpy3"
"reflect"
"sync"
Expand All @@ -17,8 +18,9 @@ const (
var pyModuleInitMap = sync.Map{}

type PyModuleGoObj struct {
moduleDef *cpy3.PyModuleDef
CallMap sync.Map
moduleDef *cpy3.PyModuleDef
methodsDef []cpy3.PyMethodDef
CallMap sync.Map
}
type PyModule struct {
PyObject
Expand Down Expand Up @@ -80,7 +82,9 @@ func PyTypeToGoType(p *PyObject) any {

return 0
}

func PyMethodForward(self *PyModule, args *PyTuple, method interface{}) *PyObject {

methodType := reflect.TypeOf(method)
methodValue := reflect.ValueOf(method)
if methodType.Kind() != reflect.Func {
Expand Down Expand Up @@ -138,12 +142,12 @@ var PyModuleMethodForwardCallBack = syscall.NewCallback(func(self uintptr, args
})

func CreateModule(name string, doc string) *PyModule {
var pyModuleMethodCallDefs = make([]cpy3.PyMethodDef, 0)
pyModuleMethodCallDefs := make([]cpy3.PyMethodDef, 0)
methodCallDef := cpy3.PyMethodDef{
Ml_name: cpy3.GoStrToCStr("Call"),
Ml_name: msvcrt.MallocCString("Call"),
Ml_meth: PyModuleMethodForwardCallBack,
Ml_flags: 1,
Ml_doc: cpy3.GoStrToCStr("module call forward"),
Ml_doc: msvcrt.MallocCString("module call forward"),
}
pyModuleMethodCallDefs = append(pyModuleMethodCallDefs, methodCallDef)
moduleNullMethodDef := cpy3.PyMethodDef{
Expand All @@ -156,12 +160,13 @@ func CreateModule(name string, doc string) *PyModule {

module := &PyModule{}
module.GoObj = new(PyModuleGoObj)
module.GoObj.methodsDef = pyModuleMethodCallDefs
module.GoObj.moduleDef = &cpy3.PyModuleDef{
M_base: cpy3.PyModuleDef_Base{
Ob_base: cpy3.PyObject_HEAD_INIT(0),
},
M_name: cpy3.GoStrToCStr(name),
M_doc: cpy3.GoStrToCStr(doc),
M_name: msvcrt.MallocCString(name),
M_doc: msvcrt.MallocCString(doc),
M_size: -1,
M_methods: uintptr(unsafe.Pointer(&pyModuleMethodCallDefs[0])),
M_slots: 0,
Expand Down
4 changes: 3 additions & 1 deletion cpy3/PyBytes.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package cpy3

import "github.com/aadog/msvcrt-go"

func PyBytes_FromString(s string) uintptr {
r, _, _ := pyBytes_FromString.Call(GoStrToCStr(s))
r, _, _ := pyBytes_FromString.Call(msvcrt.StringToCUTF8String(s))
return r
}
8 changes: 5 additions & 3 deletions cpy3/PyDict.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package cpy3

import "github.com/aadog/msvcrt-go"

func PyDict_SetItem(obj uintptr, key uintptr, val uintptr) int {
r, _, _ := pyDict_SetItem.Call(obj, key, val)
return int(r)
}

func PyDict_SetItemString(obj uintptr, key string, val uintptr) int {
r, _, _ := pyDict_SetItemString.Call(obj, GoStrToCStr(key), val)
r, _, _ := pyDict_SetItemString.Call(obj, msvcrt.StringToCUTF8String(key), val)
return int(r)
}

Expand All @@ -32,7 +34,7 @@ func PyDict_Keys(obj uintptr) uintptr {
return r
}
func PyDict_GetItemString(obj uintptr, key string) uintptr {
r, _, _ := pyDict_GetItemString.Call(obj, GoStrToCStr(key))
r, _, _ := pyDict_GetItemString.Call(obj, msvcrt.StringToCUTF8String(key))
return r
}

Expand All @@ -41,6 +43,6 @@ func PyDict_DelItem(obj uintptr, key uintptr) int {
return int(r)
}
func PyDict_DelItemString(obj uintptr, key string) int {
r, _, _ := pyDict_DelItemString.Call(obj, GoStrToCStr(key))
r, _, _ := pyDict_DelItemString.Call(obj, msvcrt.StringToCUTF8String(key))
return int(r)
}
7 changes: 4 additions & 3 deletions cpy3/PyErr.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package cpy3

import "github.com/aadog/msvcrt-go"

func PyErr_NewException(name string,base uintptr,dict uintptr) uintptr {
r,_,_:=pyErr_NewException.Call(GoStrToCStr(name),base,dict)
func PyErr_NewException(name string, base uintptr, dict uintptr) uintptr {
r, _, _ := pyErr_NewException.Call(msvcrt.StringToCUTF8String(name), base, dict)
return r
}
func PyExc_Exception() uintptr {
Expand All @@ -14,5 +15,5 @@ func PyExc_ValueError() uintptr {
}

func PyErr_SetString(tp uintptr, message string) {
pyErr_SetString.Call(tp, GoStrToCStr(message))
pyErr_SetString.Call(tp, msvcrt.StringToCUTF8String(message))
}
15 changes: 9 additions & 6 deletions cpy3/PyModule.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package cpy3

import "unsafe"
import (
"github.com/aadog/msvcrt-go"
"unsafe"
)

type PyMethodDef struct {
Ml_name uintptr
Expand Down Expand Up @@ -55,7 +58,7 @@ func PyImport_Import(name uintptr) uintptr {

func PyModule_GetName(obj uintptr) string {
r, _, _ := pyModule_GetName.Call(obj)
return CStrToGoStr(r)
return msvcrt.CUtf8ToString(r)
}
func PyModule_GetDict(obj uintptr) uintptr {
r, _, _ := pyModule_GetDict.Call(obj)
Expand All @@ -66,18 +69,18 @@ func PyModule_AddFunctions(obj uintptr, functionsDef uintptr) int {
return int(r)
}
func PyModule_AddIntConstant(obj uintptr, name string, value int64) int {
r, _, _ := pyModule_AddIntConstant.Call(obj, GoStrToCStr(name), uintptr(value))
r, _, _ := pyModule_AddIntConstant.Call(obj, msvcrt.StringToCUTF8String(name), uintptr(value))
return int(r)
}
func PyModule_AddStringConstant(obj uintptr, name string, value string) int {
r, _, _ := pyModule_AddStringConstant.Call(obj, GoStrToCStr(name), GoStrToCStr(value))
r, _, _ := pyModule_AddStringConstant.Call(obj, msvcrt.StringToCUTF8String(name), msvcrt.StringToCUTF8String(value))
return int(r)
}
func PyModule_AddObject(obj uintptr, name string, value uintptr) int {
r, _, _ := pyModule_AddObject.Call(obj, GoStrToCStr(name), value)
r, _, _ := pyModule_AddObject.Call(obj, msvcrt.StringToCUTF8String(name), value)
return int(r)
}
func PyModule_AddObjectRef(obj uintptr, name string, value uintptr) int {
r, _, _ := pyModule_AddObjectRef.Call(obj, GoStrToCStr(name), value)
r, _, _ := pyModule_AddObjectRef.Call(obj, msvcrt.StringToCUTF8String(name), value)
return int(r)
}
10 changes: 6 additions & 4 deletions cpy3/PyObject.go
Original file line number Diff line number Diff line change
@@ -1,20 +1,22 @@
package cpy3

import "github.com/aadog/msvcrt-go"

func PyObject_GetAttrString(obj uintptr, attr_name string) uintptr {
r, _, _ := pyObject_GetAttrString.Call(obj, GoStrToCStr(attr_name))
r, _, _ := pyObject_GetAttrString.Call(obj, msvcrt.StringToCUTF8String(attr_name))
return r
}
func PyObject_HasAttrString(obj uintptr, attr_name string) int {
r, _, _ := pyObject_HasAttrString.Call(obj, GoStrToCStr(attr_name))
r, _, _ := pyObject_HasAttrString.Call(obj, msvcrt.StringToCUTF8String(attr_name))
return int(r)
}
func PyObject_SetAttrString(obj uintptr, attr_name string, v uintptr) int {
r, _, _ := pyObject_SetAttrString.Call(obj, GoStrToCStr(attr_name), v)
r, _, _ := pyObject_SetAttrString.Call(obj, msvcrt.StringToCUTF8String(attr_name), v)
return int(r)
}

func PyObject_DelAttrString(obj uintptr, attr_name string) int {
r, _, _ := pyObject_DelAttrString.Call(obj, GoStrToCStr(attr_name))
r, _, _ := pyObject_DelAttrString.Call(obj, msvcrt.StringToCUTF8String(attr_name))
return int(r)
}

Expand Down
4 changes: 3 additions & 1 deletion cpy3/PyType.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package cpy3

import "github.com/aadog/msvcrt-go"

func PyType_Name(obj uintptr) string {
r, _, _ := pyType_Name.Call(obj)
return CStrToGoStr(r)
return msvcrt.CUtf8ToString(r)
}

func PyType_GetModule(obj uintptr) uintptr {
Expand Down
11 changes: 7 additions & 4 deletions cpy3/PyUnicode.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package cpy3

import "unsafe"
import (
"github.com/aadog/msvcrt-go"
"unsafe"
)

func PyUnicode_DecodeFSDefault(u string) uintptr {
r, _, _ := pyUnicode_DecodeFSDefault.Call(GoStrToCStr(u))
r, _, _ := pyUnicode_DecodeFSDefault.Call(msvcrt.StringToCUTF8String(u))
return r
}
func PyUnicode_FromString(u string) uintptr {
Expand All @@ -13,7 +16,7 @@ func PyUnicode_FromString(u string) uintptr {
r, _, _ := pyUnicode_FromString.Call(uintptr(unsafe.Pointer(&b[0])))
return r
}
r, _, _ := pyUnicode_FromString.Call(GoStrToCStr(u))
r, _, _ := pyUnicode_FromString.Call(msvcrt.StringToCUTF8String(u))
return r
}
func PyUnicode_GetLength(obj uintptr) int64 {
Expand All @@ -22,5 +25,5 @@ func PyUnicode_GetLength(obj uintptr) int64 {
}
func PyUnicode_AsUTF8(obj uintptr) string {
r, _, _ := pyUnicode_AsUTF8.Call(obj)
return CStrToGoStr(r)
return msvcrt.CUtf8ToString(r)
}
101 changes: 0 additions & 101 deletions cpy3/cfuncs.go

This file was deleted.

Loading

0 comments on commit 578082e

Please sign in to comment.