mirror of
https://github.com/python/cpython.git
synced 2025-10-13 10:23:28 +00:00
gh-121459: Deferred LOAD_GLOBAL (GH-123128)
Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com> Co-authored-by: Sam Gross <655866+colesbury@users.noreply.github.com>
This commit is contained in:
parent
74330d992b
commit
8810e286fa
8 changed files with 108 additions and 29 deletions
|
@ -1469,8 +1469,8 @@ dummy_func(
|
|||
&& PyDict_CheckExact(BUILTINS()))
|
||||
{
|
||||
v_o = _PyDict_LoadGlobal((PyDictObject *)GLOBALS(),
|
||||
(PyDictObject *)BUILTINS(),
|
||||
name);
|
||||
(PyDictObject *)BUILTINS(),
|
||||
name);
|
||||
if (v_o == NULL) {
|
||||
if (!_PyErr_Occurred(tstate)) {
|
||||
/* _PyDict_LoadGlobal() returns NULL without raising
|
||||
|
@ -1526,12 +1526,12 @@ dummy_func(
|
|||
#endif /* ENABLE_SPECIALIZATION */
|
||||
}
|
||||
|
||||
op(_LOAD_GLOBAL, ( -- res, null if (oparg & 1))) {
|
||||
// res[1] because we need a pointer to res to pass it to _PyEval_LoadGlobalStackRef
|
||||
op(_LOAD_GLOBAL, ( -- res[1], null if (oparg & 1))) {
|
||||
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg>>1);
|
||||
PyObject *res_o = _PyEval_LoadGlobal(GLOBALS(), BUILTINS(), name);
|
||||
ERROR_IF(res_o == NULL, error);
|
||||
_PyEval_LoadGlobalStackRef(GLOBALS(), BUILTINS(), name, res);
|
||||
ERROR_IF(PyStackRef_IsNull(*res), error);
|
||||
null = PyStackRef_NULL;
|
||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||
}
|
||||
|
||||
macro(LOAD_GLOBAL) =
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue