Skip to content

Commit 025c8bb

Browse files
committed
Fix: Correctly return dict for 'PyEval_GetBuiltins'.
1 parent 00489b3 commit 025c8bb

File tree

3 files changed

+40
-10
lines changed

3 files changed

+40
-10
lines changed

graalpython/com.oracle.graal.python.test/src/tests/cpyext/__init__.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -151,15 +151,14 @@ def file_not_empty(path):
151151
return NULL;
152152
}}
153153
154-
if (strlen("{argspec}") > 0) {{
155-
if (!PyArg_ParseTuple(___arg, "{argspec}", {derefargumentnames})) {{
156-
return NULL;
157-
}}
158-
}}
159154
#ifdef SINGLEARG
160-
else {{
161-
{singleargumentname} = ___arg;
155+
{singleargumentname} = ___arg;
156+
#else
157+
#ifndef NOARGS
158+
if (!PyArg_ParseTuple(___arg, "{argspec}", {derefargumentnames})) {{
159+
return NULL;
162160
}}
161+
#endif
163162
#endif
164163
165164
return Py_BuildValue("{resultspec}", {callfunction}({argumentnames}));
@@ -326,10 +325,12 @@ def create_module(self, name=None):
326325

327326
self._insert(fargs, "argumentdeclarations", ";".join(fargs["parseargs"]))
328327
self._insert(fargs, "argumentnames", ", ".join(arg.rpartition(" ")[2] for arg in fargs["arguments"]))
329-
self._insert(fargs, "singleargumentname", fargs["arguments"][0].rpartition(" ")[2])
328+
self._insert(fargs, "singleargumentname", fargs["arguments"][0].rpartition(" ")[2] if fargs["arguments"] else "")
330329
self._insert(fargs, "derefargumentnames", ", ".join("&" + arg.rpartition(" ")[2].partition("=")[0] for arg in fargs["arguments"]))
331330
self._insert(fargs, "callfunction", fargs["capifunction"])
332-
if len(fargs["argspec"]) == 0:
331+
if len(fargs["argspec"]) == 0 and len(fargs["arguments"]) == 0:
332+
fargs["defines"] = "#define NOARGS"
333+
elif len(fargs["argspec"]) == 0:
333334
fargs["defines"] = "#define SINGLEARG"
334335
else:
335336
fargs["defines"] = ""

graalpython/com.oracle.graal.python.test/src/tests/cpyext/test_misc.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,11 @@
3939

4040
import sys
4141
from . import CPyExtTestCase, CPyExtFunction, CPyExtFunctionOutVars, unhandled_error_compare, GRAALPYTHON
42+
import builtins
4243
__dir__ = __file__.rpartition("/")[0]
4344

45+
__global_builtins_dict = builtins.__dict__
46+
4447

4548
def _reference_importmodule(args):
4649
return __import__(args[0], fromlist=["*"])
@@ -53,6 +56,10 @@ def _reference_format_float(args):
5356
return float(val).__format__("." + str(prec) + format_spec.decode())
5457

5558

59+
def _reference_builtins(args):
60+
return type(__global_builtins_dict)
61+
62+
5663
class TestMisc(CPyExtTestCase):
5764

5865
def compile_module(self, name):
@@ -241,3 +248,20 @@ def compile_module(self, name):
241248
callfunction="wrap_PyOS_double_to_string",
242249
cmpfunc=unhandled_error_compare
243250
)
251+
252+
test_PyEval_GetBuiltins = CPyExtFunction(
253+
_reference_builtins,
254+
lambda: (
255+
tuple(),
256+
),
257+
code="""
258+
PyObject* wrap_PyEval_GetBuiltins() {
259+
return Py_TYPE(PyEval_GetBuiltins());
260+
}
261+
""",
262+
resultspec="O",
263+
argspec="",
264+
arguments=[],
265+
callfunction="wrap_PyEval_GetBuiltins",
266+
cmpfunc=unhandled_error_compare
267+
)

graalpython/lib-graalpython/python_cext.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
capi = capi_to_java = None
4545
_capi_hooks = []
4646

47+
__builtins_module_dict = None
4748

4849
def register_capi_hook(hook):
4950
assert callable(hook)
@@ -1555,4 +1556,8 @@ def PyState_FindModule(module_name):
15551556

15561557
@may_raise
15571558
def PyEval_GetBuiltins():
1558-
return __builtins__.__dir__
1559+
global __builtins_module_dict
1560+
if not __builtins_module_dict:
1561+
import builtins
1562+
__builtins_module_dict = builtins.__dict__
1563+
return __builtins_module_dict

0 commit comments

Comments
 (0)