func NewString(s string) (*String, error) { cs := C.CString(s) defer C.free(unsafe.Pointer(cs)) ret := C.PyString_FromString(cs) if ret == nil { return nil, exception() } return newString(ret), nil }
//export goClassStr func goClassStr(obj unsafe.Pointer) unsafe.Pointer { // Get the class context ctxt := getClassContext(obj) // Turn the function into something we can call f := (*func(unsafe.Pointer) string)(unsafe.Pointer(&ctxt.str)) s := C.CString((*f)(obj)) defer C.free(unsafe.Pointer(s)) return unsafe.Pointer(C.PyString_FromString(s)) }
func Import(name string) (*Module, error) { s := C.CString(name) defer C.free(unsafe.Pointer(s)) pyName := C.PyString_FromString(s) defer C.decref(pyName) obj := C.PyImport_Import(pyName) if obj == nil { return nil, exception() } return newModule(obj), nil }
func AddToPath(dir string) { p := C.CString("path") defer C.free(unsafe.Pointer(p)) sys_path := C.PySys_GetObject(p) if sys_path == nil { return } s := C.CString(dir) defer C.free(unsafe.Pointer(s)) pDir := C.PyString_FromString(s) if pDir == nil { return } C.PyList_Append(sys_path, pDir) }
func InitModule(name string, methods []Method) (*Module, error) { cName := C.CString(name) defer C.free(unsafe.Pointer(cName)) m := C.Py_InitModule4(cName, nil, nil, nil, C.PYTHON_API_VERSION) if m == nil { return nil, exception() } if len(methods) == 0 { return newModule(m), nil } n := C.PyString_FromString(cName) if n == nil { return nil, exception() } d := C.PyModule_GetDict(m) if d == nil { return nil, exception() } for _, method := range methods { pyF, err := makeCFunction(method.Name, method.Func, method.Doc, n) if err != nil { return nil, err } if C.PyDict_SetItemString(d, C.CString(method.Name), c(pyF)) != 0 { return nil, exception() } } return newModule(m), nil }
func PyString_FromString(s string) *C.PyObject { _s := C.CString(s) defer C.free(unsafe.Pointer(_s)) return C.PyString_FromString(_s) }
// PyObject* PyString_FromString(const char *v) // Return value: New reference. // Return a new string object with a copy of the string v as value on success, and NULL on failure. The parameter v must not be NULL; it will not be checked. func PyString_FromString(v string) *PyObject { cstr := C.CString(v) defer C.free(unsafe.Pointer(cstr)) return togo(C.PyString_FromString(cstr)) }
func NewString(s string) *String { cs := C.CString(s) defer C.free(unsafe.Pointer(cs)) ret := C.PyString_FromString(cs) return newString(ret) }