Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

gh-93911:LOAD_ATTR_PROPERTY#93912

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
Fidget-Spinner merged 14 commits intopython:mainfromFidget-Spinner:load_attr_property
Jun 17, 2022
Merged
Show file tree
Hide file tree
Changes from1 commit
Commits
Show all changes
14 commits
Select commitHold shift + click to select a range
c9966d1
More LOAD_ATTR specializations
Fidget-SpinnerJun 16, 2022
e66782b
📜🤖 Added by blurb_it.
blurb-it[bot]Jun 16, 2022
c7bde64
fix compiler warnings
Fidget-SpinnerJun 16, 2022
6a03dad
Fix double backticks
Fidget-SpinnerJun 16, 2022
c78831d
Apply Mark's suggestions
Fidget-SpinnerJun 16, 2022
d03cc61
try to fix compiler warnings
Fidget-SpinnerJun 16, 2022
36af644
re-enable LOAD_ATTR_CLASS_MUTABLE_DESCRIPTOR
Fidget-SpinnerJun 16, 2022
c20af47
Remove double stat count
Fidget-SpinnerJun 16, 2022
3d5d5fd
remove LOAD_ATTR_MUTABLE_CLASS_DESCRIPTOR
Fidget-SpinnerJun 16, 2022
7f45ec1
Delete 2022-06-16-08-56-26.gh-issue-93657.AZG2WT.rst
Fidget-SpinnerJun 16, 2022
a6c4ab3
📜🤖 Added by blurb_it.
blurb-it[bot]Jun 16, 2022
626bfa1
fix up stats and deopt
Fidget-SpinnerJun 17, 2022
4786bac
Use 32 bit func_version
Fidget-SpinnerJun 17, 2022
9f32d03
remove the version check
Fidget-SpinnerJun 17, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
NextNext commit
More LOAD_ATTR specializations
  • Loading branch information
@Fidget-Spinner
Fidget-Spinner committedJun 16, 2022
commitc9966d19908cdeada6919df274acc14d042b0a7f
2 changes: 2 additions & 0 deletionsInclude/descrobject.h
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -32,6 +32,8 @@ PyAPI_FUNC(PyObject *) PyDescr_NewGetSet(PyTypeObject *, PyGetSetDef *);
PyAPI_FUNC(PyObject *) PyDictProxy_New(PyObject *);
PyAPI_FUNC(PyObject *) PyWrapper_New(PyObject *, PyObject *);

PyObject *_PyProperty_PropGet(PyObject *prop);

#ifndef Py_LIMITED_API
# define Py_CPYTHON_DESCROBJECT_H
# include "cpython/descrobject.h"
Expand Down
44 changes: 23 additions & 21 deletionsInclude/internal/pycore_opcode.h
View file
Open in desktop

Some generated files are not rendered by default. Learn more abouthow customized files appear on GitHub.

58 changes: 30 additions & 28 deletionsInclude/opcode.h
View file
Open in desktop

Some generated files are not rendered by default. Learn more abouthow customized files appear on GitHub.

2 changes: 2 additions & 0 deletionsLib/opcode.py
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -285,8 +285,10 @@ def jabs_op(name, op):
"LOAD_ATTR_ADAPTIVE",
# These potentially push [NULL, bound method] onto the stack.
"LOAD_ATTR_CLASS",
"LOAD_ATTR_CLASS_MUTABLE_DESCRIPTOR",
"LOAD_ATTR_INSTANCE_VALUE",
"LOAD_ATTR_MODULE",
"LOAD_ATTR_PROPERTY",
"LOAD_ATTR_SLOT",
"LOAD_ATTR_WITH_HINT",
# These will always push [unbound method, self] onto the stack.
Expand Down
7 changes: 7 additions & 0 deletionsObjects/descrobject.c
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -1893,6 +1893,13 @@ property_clear(PyObject *self)
return 0;
}

PyObject *
_PyProperty_PropGet(PyObject *self)
{
propertyobject *pp = (propertyobject *)self;
return pp->prop_get;
}

#include "clinic/descrobject.c.h"

PyTypeObject PyDictProxy_Type = {
Expand Down
77 changes: 73 additions & 4 deletionsPython/ceval.c
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -3627,7 +3627,6 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int
}

TARGET(LOAD_ATTR_CLASS) {
/* LOAD_METHOD, for class methods */
assert(cframe.use_tracing == 0);
_PyLoadMethodCache *cache = (_PyLoadMethodCache *)next_instr;

Expand All@@ -3650,6 +3649,76 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int
NOTRACE_DISPATCH();
}

TARGET(LOAD_ATTR_CLASS_MUTABLE_DESCRIPTOR) {
assert(cframe.use_tracing == 0);
_PyLoadMethodCache *cache = (_PyLoadMethodCache *)next_instr;

PyObject *cls = TOP();
DEOPT_IF(!PyType_Check(cls), LOAD_ATTR);
uint32_t type_version = read_u32(cache->type_version);
DEOPT_IF(((PyTypeObject *)cls)->tp_version_tag != type_version,
LOAD_ATTR);
assert(type_version != 0);
PyObject *descr = read_obj(cache->descr);
descrgetfunc get = Py_TYPE(descr)->tp_descr_get;
DEOPT_IF(get == NULL, LOAD_ATTR);
STAT_INC(LOAD_ATTR, hit);
PyObject *res = get(descr, NULL, cls);
if (res == NULL) {
goto error;
}
assert(res != NULL);
SET_TOP(NULL);
STACK_GROW((oparg & 1));
SET_TOP(res);
Py_DECREF(cls);
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_ATTR);
NOTRACE_DISPATCH();
}

TARGET(LOAD_ATTR_PROPERTY) {
assert(cframe.use_tracing == 0);
_PyLoadMethodCache *cache = (_PyLoadMethodCache *)next_instr;

PyObject *owner = TOP();
PyTypeObject *cls = Py_TYPE(owner);
uint32_t type_version = read_u32(cache->type_version);
DEOPT_IF(cls->tp_version_tag != type_version, LOAD_ATTR);
assert(type_version != 0);
PyObject *prop = read_obj(cache->descr);
assert(Py_TYPE(prop) == &PyProperty_Type);
PyObject *fget = _PyProperty_PropGet(prop);
DEOPT_IF(!PyFunction_Check(fget), LOAD_ATTR);
PyFunctionObject *f = (PyFunctionObject *)fget;
DEOPT_IF(f->func_version != cache->keys_version[0], LOAD_ATTR);
PyCodeObject *code = (PyCodeObject *)f->func_code;
size_t size = code->co_nlocalsplus + code->co_stacksize + FRAME_SPECIALS_SIZE;
assert(code->co_argcount == 1);
STAT_INC(LOAD_ATTR, hit);

_PyInterpreterFrame *new_frame = _PyThreadState_BumpFramePointer(tstate, size);
if (new_frame == NULL) {
goto error;
}
CALL_STAT_INC(frames_pushed);
Py_INCREF(f);
_PyFrame_InitializeSpecials(new_frame, f,
NULL, code->co_nlocalsplus);
SET_TOP(NULL);
STACK_SHRINK(!(oparg & 1));
new_frame->localsplus[0] = owner;
for (int i = 1; i < code->co_nlocalsplus; i++) {
new_frame->localsplus[i] = NULL;
}
_PyFrame_SetStackPointer(frame, stack_pointer);
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_ATTR);
frame->prev_instr = next_instr - 1;
new_frame->previous = frame;
frame = cframe.current_frame = new_frame;
CALL_STAT_INC(inlined_py_calls);
goto start_frame;
}

TARGET(STORE_ATTR_ADAPTIVE) {
assert(cframe.use_tracing == 0);
_PyAttrCache *cache = (_PyAttrCache *)next_instr;
Expand DownExpand Up@@ -4549,7 +4618,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int
}

TARGET(LOAD_ATTR_METHOD_WITH_VALUES) {
/*LOAD_METHOD, with cached method object */
/*Cached method object */
assert(cframe.use_tracing == 0);
PyObject *self = TOP();
PyTypeObject *self_cls = Py_TYPE(self);
Expand All@@ -4575,8 +4644,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int
}

TARGET(LOAD_ATTR_METHOD_WITH_DICT) {
/* LOAD_METHOD, with a dict
Can be either a managed dict, or a tp_dictoffset offset.*/
/* Can be either a managed dict, or a tp_dictoffset offset.*/
assert(cframe.use_tracing == 0);
PyObject *self = TOP();
PyTypeObject *self_cls = Py_TYPE(self);
Expand DownExpand Up@@ -5527,6 +5595,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int
}

TARGET(CACHE) {
printf("cache\n");
Py_UNREACHABLE();
}

Expand Down
Loading

[8]ページ先頭

©2009-2025 Movatter.jp