diff --git a/_pydemo/pi/pi.go b/_pydemo/pi/pi.go new file mode 100644 index 00000000..934fe31a --- /dev/null +++ b/_pydemo/pi/pi.go @@ -0,0 +1,10 @@ +package main + +import ( + "github.com/goplus/llgo/c" + "github.com/goplus/llgo/py/math" +) + +func main() { + c.Printf(c.Str("pi = %f\n"), math.Pi) +} diff --git a/_xtool/llpyg/llpyg.go b/_xtool/llpyg/llpyg.go index 9dac48a5..eea35c6b 100644 --- a/_xtool/llpyg/llpyg.go +++ b/_xtool/llpyg/llpyg.go @@ -44,8 +44,11 @@ func main() { key := item.TupleItem(0) val := item.TupleItem(1) if val.Callable() != 0 { + doc := val.GetAttrString(c.Str("__doc__")) sig := inspect.Signature(val) + c.Fprintf(c.Stderr, c.Str("-----------------------------------\n")) c.Fprintf(c.Stderr, c.Str("%s: %s\n"), key.CStr(), sig.Str().CStr()) + c.Fprintf(c.Stderr, c.Str("%s\n"), doc.CStr()) } } } diff --git a/py/exceptions.go b/py/exceptions.go new file mode 100644 index 00000000..cd9da49d --- /dev/null +++ b/py/exceptions.go @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2024 The GoPlus Authors (goplus.org). All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package py + +import ( + _ "unsafe" +) + +// https://docs.python.org/3/c-api/exceptions.html + +// Clear the error indicator. If the error indicator is not set, there is +// no effect. +// +//go:linkname ErrClear C.PyErr_Clear +func ErrClear() + +//go:linkname ErrPrint C.PyErr_Print +func ErrPrint() diff --git a/py/math/math.go b/py/math/math.go index 7bfd8ebe..d65531ff 100644 --- a/py/math/math.go +++ b/py/math/math.go @@ -28,3 +28,6 @@ const ( //go:linkname Sqrt py.sqrt func Sqrt(x *py.Object) *py.Object + +//go:linkname Pi py.pi +var Pi *py.Object diff --git a/py/module.go b/py/module.go index 6f33cfaf..163d0555 100644 --- a/py/module.go +++ b/py/module.go @@ -22,8 +22,17 @@ import ( "github.com/goplus/llgo/c" ) +// https://docs.python.org/3/c-api/import.html // https://docs.python.org/3/c-api/module.html +// Return the module object corresponding to a module name. The name argument +// may be of the form package.module. First check the modules dictionary if +// there’s one there, and if not, create a new one and insert it in the modules +// dictionary. Return nil with an exception set on failure. +// +//go:linkname AddModule C.PyImport_AddModule +func AddModule(name *c.Char) *Object + // This is a wrapper around py.Import which takes a const char* as an argument // instead of an Object. //