diff --git a/_xtool/llpyg/llpyg.go b/_xtool/llpyg/llpyg.go index eea35c6b..8a098c60 100644 --- a/_xtool/llpyg/llpyg.go +++ b/_xtool/llpyg/llpyg.go @@ -20,6 +20,7 @@ import ( "github.com/goplus/llgo/c" "github.com/goplus/llgo/py" "github.com/goplus/llgo/py/inspect" + // "github.com/goplus/llgo/py/builtins" ) func main() { @@ -49,6 +50,8 @@ func main() { 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()) + // c.Fprintf(c.Stderr, c.Str("-----------------------------------\n")) + // builtins.Help(val) } } } diff --git a/py/builtins/builtins.go b/py/builtins/builtins.go new file mode 100644 index 00000000..d425e862 --- /dev/null +++ b/py/builtins/builtins.go @@ -0,0 +1,61 @@ +/* + * 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 builtins + +import ( + _ "unsafe" + + "github.com/goplus/llgo/py" +) + +const ( + LLGoPackage = "py.inspect" +) + +// https://docs.python.org/3/library/functions.html +// https://docs.python.org/3/library/constants.html + +// print(*objects, sep=' ', end='\n', file=None, flush=False) +// +// Print objects to the text stream file, separated by sep and followed by +// end. sep, end, file, and flush, if present, must be given as keyword +// arguments. +// +// All non-keyword arguments are converted to strings like str() does and +// written to the stream, separated by sep and followed by end. Both sep +// and end must be strings; they can also be None, which means to use the +// default values. If no objects are given, print() will just write end. +// +//go:linkname Print py.print +func Print(objects ...*py.Object) + +//go:linkname PrintEx py.print +func PrintEx(__llgo_kwargs *py.Object, objects ...*py.Object) + +// Invoke the built-in help system. (This function is intended for interactive +// use.) If no argument is given, the interactive help system starts on the +// interpreter console. If the argument is a string, then the string is looked +// up as the name of a module, function, class, method, keyword, or documentation +// topic, and a help page is printed on the console. If the argument is any other +// kind of object, a help page on the object is generated. +// +// Note that if a slash(/) appears in the parameter list of a function when invoking +// help(), it means that the parameters prior to the slash are positional-only. For +// more info, see the FAQ entry on positional-only parameters. +// +//go:linkname Help py.help +func Help(object *py.Object) diff --git a/py/builtins/llgo_autogen.lla b/py/builtins/llgo_autogen.lla new file mode 100644 index 00000000..3169e152 Binary files /dev/null and b/py/builtins/llgo_autogen.lla differ diff --git a/py/call.go b/py/call.go index a54cf623..b2d425dc 100644 --- a/py/call.go +++ b/py/call.go @@ -71,7 +71,7 @@ func (o *Object) CallOneArg(arg *Object) *Object { return nil } // This is the equivalent of the Python expression: o(*args). // // llgo:link (*Object).CallObject C.PyObject_CallObject -func (o *Object) CallObject(callable, args *Object) *Object { return nil } +func (o *Object) CallObject(args *Object) *Object { return nil } // Call a callable Python object o, with a variable number of C arguments. The C // arguments are described using a py.BuildValue style format string. The format