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-117139: Set up the tagged evaluation stack#117186

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

Closed
Show file tree
Hide file tree
Changes from1 commit
Commits
Show all changes
72 commits
Select commitHold shift + click to select a range
7ca9b11
Tag objects in ceval, type, gen, frame
Fidget-SpinnerMar 23, 2024
09dbeca
partially convert cases
Fidget-SpinnerMar 23, 2024
84142a5
fix the rest
Fidget-SpinnerMar 23, 2024
25bf135
fixups
Fidget-SpinnerMar 23, 2024
d484628
fix all remaining warnings
Fidget-SpinnerMar 26, 2024
744357e
fix tests
Fidget-SpinnerMar 26, 2024
4cc9fb8
fix frames
Fidget-SpinnerMar 26, 2024
8423e75
Merge remote-tracking branch 'upstream/main' into tagged_evaluation_s…
Fidget-SpinnerMar 26, 2024
6b9ad92
📜🤖 Added by blurb_it.
blurb-it[bot]Mar 26, 2024
0bb6def
fix mypy errors
Fidget-SpinnerMar 26, 2024
8fe65c1
Merge branch 'tagged_evaluation_stack' of github.com:Fidget-Spinner/c…
Fidget-SpinnerMar 26, 2024
8412d46
fix mypy for real this time
Fidget-SpinnerMar 26, 2024
973c41c
fix windows builds
Fidget-SpinnerMar 26, 2024
4428279
fix JIT builds
Fidget-SpinnerMar 26, 2024
a4917ae
untag into temp stack for vectorcall
Fidget-SpinnerMar 27, 2024
3f7f25a
address review
Fidget-SpinnerMar 27, 2024
adfbd43
remove .obj field
Fidget-SpinnerMar 27, 2024
868b78e
add ways to test this
Fidget-SpinnerMar 27, 2024
6024a4b
minor fixups
Fidget-SpinnerMar 27, 2024
b1a614b
fix all remaining uses of PyObject **
Fidget-SpinnerMar 29, 2024
e4fa6da
minor fix
Fidget-SpinnerMar 29, 2024
7bead7f
fixed gdb
Fidget-SpinnerMar 29, 2024
eb9e9a5
move tags to internal header
Fidget-SpinnerMar 29, 2024
59b237a
replace incref decrefs with tagged versions
Fidget-SpinnerMar 29, 2024
b566e39
no-op tags on default build
Fidget-SpinnerMar 29, 2024
a036f57
fix operator associativity
Fidget-SpinnerMar 29, 2024
02408cc
Merge remote-tracking branch 'upstream/main' into tagged_evaluation_s…
Fidget-SpinnerMar 29, 2024
6b1bcf3
rename to tag/untag
Fidget-SpinnerMar 29, 2024
340f5e1
rename as requested
Fidget-SpinnerMar 29, 2024
7471fe3
default to tagged pointers in cases generator (part 1)
Fidget-SpinnerMar 29, 2024
8be49a5
(broken) convert default to tagged ptr
Fidget-SpinnerMar 29, 2024
5e2018c
swap order of tags and refcounts
Fidget-SpinnerMar 29, 2024
adff67f
Merge remote-tracking branch 'upstream/main' into tagged_evaluation_s…
Fidget-SpinnerApr 1, 2024
c09ddee
minor fixes (still broken)
Fidget-SpinnerApr 1, 2024
515536e
bunch of fixes
Fidget-SpinnerApr 1, 2024
7d7ef29
fix everything
Fidget-SpinnerApr 1, 2024
4be812f
fix some tests
Fidget-SpinnerApr 1, 2024
2f972c5
Merge remote-tracking branch 'upstream/main' into tagged_evaluation_s…
Fidget-SpinnerApr 7, 2024
72ff61b
fix up warnings
Fidget-SpinnerApr 7, 2024
2e9b411
Rename _PyTaggedPtr -> _PyStackRef
Fidget-SpinnerApr 7, 2024
b5e4c83
make ownership clear in tagging and untagging
Fidget-SpinnerApr 7, 2024
175700c
further cleanup
Fidget-SpinnerApr 7, 2024
b75c171
rename tagged -> stackref
Fidget-SpinnerApr 7, 2024
ed3a3e6
Introduced owned references
Fidget-SpinnerApr 7, 2024
6e7a917
fix syntaxerror on nogil
Fidget-SpinnerApr 7, 2024
4675ce8
Fix mypy errors
Fidget-SpinnerApr 7, 2024
629a303
fix slices
Fidget-SpinnerApr 10, 2024
4170db1
Merge remote-tracking branch 'upstream/main' into tagged_evaluation_s…
Fidget-SpinnerApr 10, 2024
038cb8a
Merge Sam's deferred refcounting in
Fidget-SpinnerApr 10, 2024
65da5a0
Fix STORE_SUBSCR, and friends
Fidget-SpinnerApr 10, 2024
6a9e1bc
traverse the stack in GC
Fidget-SpinnerApr 11, 2024
bc2a6ec
fix bugs in frame pushing and popping
Fidget-SpinnerApr 12, 2024
3bb3de2
fix for shim frames
Fidget-SpinnerApr 12, 2024
8afd8b6
stackref -> tagged
Fidget-SpinnerApr 12, 2024
87fda3e
Merge remote-tracking branch 'upstream/main' into tagged_evaluation_s…
Fidget-SpinnerApr 12, 2024
3269f20
Fix _PyFrame_Copy
Fidget-SpinnerApr 12, 2024
693b64b
fix memleak and address sam's comment
Fidget-SpinnerApr 12, 2024
03af3a4
all tests pass except references
Fidget-SpinnerApr 13, 2024
aef8e3c
Fix some refleaks
Fidget-SpinnerApr 13, 2024
87112bb
fix another references
Fidget-SpinnerApr 13, 2024
a34cec8
clean up a little
Fidget-SpinnerApr 13, 2024
5b4ddb6
undo gc changes
Fidget-SpinnerApr 13, 2024
019bc3d
rename stack to stackref
Fidget-SpinnerApr 16, 2024
b38e507
defer stack for bound methods
Fidget-SpinnerApr 16, 2024
933b5b4
fix a bunch of ownership, and deferred methods
Fidget-SpinnerApr 24, 2024
11af18d
Merge remote-tracking branch 'upstream/main' into tagged_evaluation_s…
Fidget-SpinnerApr 24, 2024
1bbf021
fix upstream merge conflicts
Fidget-SpinnerApr 24, 2024
bd6889b
Merge remote-tracking branch 'upstream/main' into tagged_evaluation_s…
Fidget-SpinnerApr 25, 2024
bafd342
fix merge conflicts
Fidget-SpinnerApr 25, 2024
752a49b
lint
Fidget-SpinnerApr 25, 2024
c6be5aa
use old code, fix decref on traceback
Fidget-SpinnerApr 26, 2024
d59145b
make bound methods work for keyword calls as well
Fidget-SpinnerApr 26, 2024
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
PrevPrevious commit
NextNext commit
Introduced owned references
  • Loading branch information
@Fidget-Spinner
Fidget-Spinner committedApr 7, 2024
commited3a3e6775bb0f38bcb1e64836dcc9cf976c645c
4 changes: 2 additions & 2 deletionsInclude/cpython/tupleobject.h
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -32,9 +32,9 @@ PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
PyTupleObject *tuple = _PyTuple_CAST(op);
assert(0 <= index);
assert(index < Py_SIZE(tuple));
#ifdefPy_TEST_TAG
#ifdefPy_TAG_TEST
// Make sure it's not a tagged pointer
assert(((uintptr_t)op &Py_TEST_TAG) == 0);
assert(((uintptr_t)op &Py_TAG_TEST) == 0);
#endif
tuple->ob_item[index] = value;
}
Expand Down
40 changes: 34 additions & 6 deletionsInclude/internal/pycore_tagged.h
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,33 +16,61 @@ typedef union {
} _PyStackRef;

#define Py_TAG (0b0)
#define Py_TEST_TAG (0b1)
#define Py_TAG_TEST (0b1)
#define Py_TAG_DEFERRED (0b1)

#if defined(Py_TEST_TAG)
#define Py_STACK_UNTAG_BORROWED(tagged) ((PyObject *)(uintptr_t)((tagged).bits & (~Py_TEST_TAG)))
#if defined(Py_TAG_TEST)
#define Py_STACK_UNTAG_BORROWED(tagged) ((PyObject *)(uintptr_t)((tagged).bits & (~Py_TAG_TEST)))
#elif defined(Py_GIL_DISABLED)
#define Py_STACK_UNTAG_BORROWED(tagged) ((PyObject *)((tagged).bits & (~Py_TAG)))
#else
#define Py_STACK_UNTAG_BORROWED(tagged) ((PyObject *)(uintptr_t)((tagged).bits))
#endif

#if defined(Py_TEST_TAG)
#define Py_STACK_TAG(obj) ((_PyStackRef){.bits = ((uintptr_t)(obj) |Py_TEST_TAG)})
#if defined(Py_TAG_TEST)
#define Py_STACK_TAG(obj) ((_PyStackRef){.bits = ((uintptr_t)(obj) |Py_TAG_TEST)})
#elif defined(Py_GIL_DISABLED)
#define Py_STACK_TAG(obj) ((_PyStackRef){.bits = ((uintptr_t)(obj) | Py_TAG}))
#else
#define Py_STACK_TAG(obj) ((_PyStackRef){.bits = ((uintptr_t)(obj))})
#endif

static inline PyObject *
_Py_Stack_Untag_Owned(_PyStackRef tagged) {
#if defined(Py_TAG_TEST)
// Test tag takes up same tag as deferred tag!
Py_UNREACHABLE();
#endif
if ((tagged.bits & Py_TAG_DEFERRED) == Py_TAG_DEFERRED) {
return Py_NewRef(Py_STACK_UNTAG_BORROWED(tagged));
}
return Py_STACK_UNTAG_BORROWED(tagged);
}

#if defined(Py_TAG_TEST)
#define Py_STACK_UNTAG_OWNED(tagged) Py_STACK_UNTAG_BORROWED(tagged)
#elif defined(Py_GIL_DISABLED)
#define Py_STACK_UNTAG_OWNED(tagged) _Py_Stack_Untag_Owned(tagged)
#else
#define Py_STACK_UNTAG_OWNED(tagged) Py_STACK_UNTAG_BORROWED(tagged)
#endif

#define MAX_UNTAG_SCRATCH 10

static inline void
_Py_untag_stack(PyObject **dst, const _PyStackRef *src, size_t length) {
_Py_untag_stack_borrowed(PyObject **dst, const _PyStackRef *src, size_t length) {
for (size_t i = 0; i < length; i++) {
dst[i] = Py_STACK_UNTAG_BORROWED(src[i]);
}
}

static inline void
_Py_untag_stack_owned(PyObject **dst, const _PyStackRef *src, size_t length) {
for (size_t i = 0; i < length; i++) {
dst[i] = Py_STACK_UNTAG_OWNED(src[i]);
}
}


#define Py_XSETREF_STACKREF(dst, src) \
do { \
Expand Down
2 changes: 1 addition & 1 deletionInclude/internal/pycore_unicodeobject.h
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -209,7 +209,7 @@ PyAPI_FUNC(PyObject*) _PyUnicode_JoinArray(
Py_ssize_t seqlen
);

PyAPI_FUNC(PyObject*)_PyUnicode_JoinTaggedArray(
PyAPI_FUNC(PyObject*)_PyUnicode_JoinStack(
PyObject *separator,
_PyStackRef const *items,
Py_ssize_t seqlen
Expand Down
24 changes: 12 additions & 12 deletionsObjects/call.c
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -1059,7 +1059,7 @@ PyObject_VectorcallTaggedSlow(PyObject *callable,
PyErr_NoMemory();
return NULL;
}
_Py_untag_stack(args + 1, tagged, nargs);
_Py_untag_stack_owned(args + 1, tagged, nargs);
PyObject *res = PyObject_Vectorcall(callable, args + 1, nargsf, kwnames);
PyMem_Free(args);
return res;
Expand All@@ -1069,7 +1069,7 @@ PyObject *
PyObject_Vectorcall_Tagged(PyObject *callable,
const _PyStackRef *tagged, size_t nargsf, PyObject *kwnames)
{
#if defined(Py_GIL_DISABLED) || defined(Py_TEST_TAG)
#if defined(Py_GIL_DISABLED) || defined(Py_TAG_TEST)
size_t nargs = nargsf & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
if (kwnames != NULL && PyTuple_CheckExact(kwnames)) {
nargs += PyTuple_GET_SIZE(kwnames);
Expand All@@ -1079,7 +1079,7 @@ PyObject_Vectorcall_Tagged(PyObject *callable,
return PyObject_VectorcallTaggedSlow(callable, tagged, nargsf, kwnames);
}
// + 1 to allow args[-1] to be used by PY_VECTORCALL_ARGUMENTS_OFFSET
_Py_untag_stack(args + 1, tagged, nargs);
_Py_untag_stack_owned(args + 1, tagged, nargs);
return PyObject_Vectorcall(callable, args + 1, nargsf, kwnames);
#else
(void)(PyObject_VectorcallTaggedSlow);
Expand All@@ -1098,7 +1098,7 @@ PyObject_TypeVectorcall_TaggedSlow(PyTypeObject *callable,
return NULL;
}
// + 1 to allow args[-1] to be used by PY_VECTORCALL_ARGUMENTS_OFFSET
_Py_untag_stack(args + 1, tagged, nargs);
_Py_untag_stack_owned(args + 1, tagged, nargs);
PyObject *res = callable->tp_vectorcall((PyObject *)callable,
args + 1, nargsf, kwnames);
PyMem_Free(args);
Expand All@@ -1109,14 +1109,14 @@ PyObject *
PyObject_TypeVectorcall_Tagged(PyTypeObject *callable,
const _PyStackRef *tagged, size_t nargsf, PyObject *kwnames)
{
#if defined(Py_GIL_DISABLED) || defined(Py_TEST_TAG)
#if defined(Py_GIL_DISABLED) || defined(Py_TAG_TEST)
size_t nargs = nargsf & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
PyObject *args[MAX_UNTAG_SCRATCH];
if (nargs >= MAX_UNTAG_SCRATCH) {
return PyObject_TypeVectorcall_TaggedSlow(callable, tagged, nargsf, kwnames);
}
// + 1 to allow args[-1] to be used by PY_VECTORCALL_ARGUMENTS_OFFSET
_Py_untag_stack(args + 1, tagged, nargs);
_Py_untag_stack_owned(args + 1, tagged, nargs);
return callable->tp_vectorcall((PyObject *)callable, args + 1, nargsf, kwnames);
#else
(void)PyObject_TypeVectorcall_TaggedSlow;
Expand All@@ -1135,7 +1135,7 @@ PyObject_PyCFunctionFastCall_TaggedSlow(PyCFunctionFast cfunc,
PyErr_NoMemory();
return NULL;
}
_Py_untag_stack(args + 1, tagged, nargs);
_Py_untag_stack_owned(args + 1, tagged, nargs);
PyObject *res = cfunc(self, args + 1, nargsf);
PyMem_Free(args);
return res;
Expand All@@ -1146,13 +1146,13 @@ PyObject_PyCFunctionFastCall_Tagged(PyCFunctionFast cfunc,
PyObject *self,
const _PyStackRef *tagged, Py_ssize_t nargsf)
{
#if defined(Py_GIL_DISABLED) || defined(Py_TEST_TAG)
#if defined(Py_GIL_DISABLED) || defined(Py_TAG_TEST)
size_t nargs = nargsf & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
PyObject *args[MAX_UNTAG_SCRATCH];
if (nargs >= MAX_UNTAG_SCRATCH) {
return PyObject_PyCFunctionFastCall_TaggedSlow(cfunc, self, tagged, nargsf);
}
_Py_untag_stack(args + 1, tagged, nargs);
_Py_untag_stack_owned(args + 1, tagged, nargs);
return cfunc(self, args + 1, nargsf);
#else
(void)PyObject_PyCFunctionFastCall_TaggedSlow;
Expand All@@ -1172,7 +1172,7 @@ PyObject_PyCFunctionFastWithKeywordsCall_TaggedSlow(PyCFunctionFastWithKeywords
PyErr_NoMemory();
return NULL;
}
_Py_untag_stack(args + 1, tagged, nargs);
_Py_untag_stack_owned(args + 1, tagged, nargs);
PyObject *res = cfunc(self, args + 1, nargsf, kwds);
PyMem_Free(args);
return res;
Expand All@@ -1184,15 +1184,15 @@ PyObject_PyCFunctionFastWithKeywordsCall_Tagged(PyCFunctionFastWithKeywords cfun
const _PyStackRef *tagged, Py_ssize_t nargsf,
PyObject *kwds)
{
#if defined(Py_GIL_DISABLED) || defined(Py_TEST_TAG)
#if defined(Py_GIL_DISABLED) || defined(Py_TAG_TEST)
size_t nargs = nargsf & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
PyObject *args[MAX_UNTAG_SCRATCH];
if (nargs >= MAX_UNTAG_SCRATCH) {
return PyObject_PyCFunctionFastWithKeywordsCall_TaggedSlow(
cfunc, self, tagged, nargsf, kwds
);
}
_Py_untag_stack(args + 1, tagged, nargs);
_Py_untag_stack_owned(args + 1, tagged, nargs);
return cfunc(self, args + 1, nargsf, kwds);
#else
(void)PyObject_PyCFunctionFastWithKeywordsCall_TaggedSlow;
Expand Down
6 changes: 3 additions & 3 deletionsObjects/dictobject.c
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -2136,8 +2136,8 @@ _PyDict_FromStackItems(_PyStackRef const *keys, Py_ssize_t keys_offset,
_PyStackRef const *vs = values;

for (Py_ssize_t i = 0; i < length; i++) {
PyObject *key =Py_STACK_UNTAG_BORROWED(*ks);
PyObject *value =Py_STACK_UNTAG_BORROWED(*vs);
PyObject *key =Py_STACK_UNTAG_OWNED(*ks);
PyObject *value =Py_STACK_UNTAG_OWNED(*vs);
if (setitem_lock_held((PyDictObject *)dict, key, value) < 0) {
Py_DECREF(dict);
return NULL;
Expand DownExpand Up@@ -2177,7 +2177,7 @@ _PyDict_FromStackItemsUntaggedKeys(

for (Py_ssize_t i = 0; i < length; i++) {
PyObject *key = *ks;
PyObject *value =Py_STACK_UNTAG_BORROWED(*vs);
PyObject *value =Py_STACK_UNTAG_OWNED(*vs);
if (setitem_lock_held((PyDictObject *)dict, key, value) < 0) {
Py_DECREF(dict);
return NULL;
Expand Down
2 changes: 1 addition & 1 deletionObjects/listobject.c
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -3191,7 +3191,7 @@ _PyList_FromStackSteal(_PyStackRef const *src, Py_ssize_t n)

PyObject **dst = list->ob_item;
for (Py_ssize_t i = 0; i < n; i++) {
PyObject *item =Py_STACK_UNTAG_BORROWED(src[i]);
PyObject *item =Py_STACK_UNTAG_OWNED(src[i]);
dst[i] = item;
}

Expand Down
2 changes: 1 addition & 1 deletionObjects/tupleobject.c
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -427,7 +427,7 @@ _PyTuple_FromStackSteal(_PyStackRef const *src, Py_ssize_t n)
}
PyObject **dst = tuple->ob_item;
for (Py_ssize_t i = 0; i < n; i++) {
PyObject *item =Py_STACK_UNTAG_BORROWED(src[i]);
PyObject *item =Py_STACK_UNTAG_OWNED(src[i]);
dst[i] = item;
}
_PyObject_GC_TRACK(tuple);
Expand Down
14 changes: 7 additions & 7 deletionsObjects/unicodeobject.c
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -9739,31 +9739,31 @@ _PyUnicode_JoinArray(PyObject *separator, PyObject *const *items, Py_ssize_t seq
}

PyObject*
_PyUnicode_JoinTaggedArray_Slow(PyObject *separator, _PyStackRef const *tagged, Py_ssize_t seqlen)
_PyUnicode_JoinStack_Slow(PyObject *separator, _PyStackRef const *tagged, Py_ssize_t seqlen)
{
PyObject **args = PyMem_Malloc(seqlen * sizeof(PyObject *));
if (args == NULL) {
PyErr_NoMemory();
return NULL;
}
_Py_untag_stack(args, tagged, seqlen);
_Py_untag_stack_borrowed(args, tagged, seqlen);
PyObject *res = _PyUnicode_JoinArray(separator, args, seqlen);
PyMem_Free(args);
return res;
}

PyObject *
_PyUnicode_JoinTaggedArray(PyObject *separator, _PyStackRef const *items_tagged, Py_ssize_t seqlen)
_PyUnicode_JoinStack(PyObject *separator, _PyStackRef const *items_tagged, Py_ssize_t seqlen)
{
#if defined(Py_GIL_DISABLED) || defined(Py_TEST_TAG)
#if defined(Py_GIL_DISABLED) || defined(Py_TAG_TEST)
PyObject *args[MAX_UNTAG_SCRATCH];
if (seqlen > MAX_UNTAG_SCRATCH) {
return_PyUnicode_JoinTaggedArray_Slow(separator, items_tagged, seqlen);
return_PyUnicode_JoinStack_Slow(separator, items_tagged, seqlen);
}
_Py_untag_stack(args, items_tagged, seqlen);
_Py_untag_stack_borrowed(args, items_tagged, seqlen);
return _PyUnicode_JoinArray(separator, args, seqlen);
#else
(void)_PyUnicode_JoinTaggedArray_Slow;
(void)_PyUnicode_JoinStack_Slow;
return _PyUnicode_JoinArray(separator, (PyObject **)items_tagged, seqlen);
#endif
}
Expand Down
5 changes: 2 additions & 3 deletionsPython/bytecodes.c
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -1587,7 +1587,7 @@ dummy_func(
}

inst(BUILD_STRING, (pieces[oparg] -- str)) {
str =_PyUnicode_JoinTaggedArray(&_Py_STR(empty), pieces, oparg);
str =_PyUnicode_JoinStack(&_Py_STR(empty), pieces, oparg);
DECREF_INPUTS();
ERROR_IF(str == NULL, error);
}
Expand DownExpand Up@@ -1634,8 +1634,7 @@ dummy_func(
for (int i = 0; i < oparg; i++) {
_PyStackRef item = values[i];
if (err == 0) {
// TODO steals reference, needs TO_OWNED
err = PySet_Add(set, Py_STACK_UNTAG_BORROWED(item));
err = PySet_Add(set, Py_STACK_UNTAG_OWNED(item));
}
Py_DECREF_STACKREF(item);
}
Expand Down
2 changes: 1 addition & 1 deletionPython/executor_cases.c.h
View file
Open in desktop

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

2 changes: 1 addition & 1 deletionPython/generated_cases.c.h
View file
Open in desktop

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

2 changes: 1 addition & 1 deletionTools/cases_generator/analyzer.py
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -409,7 +409,7 @@ def has_error_without_pop(op: parser.InstDef) -> bool:
"CALL_STAT_INC",
"maybe_lltrace_resume_frame",
"_PyUnicode_JoinArray",
"_PyUnicode_JoinTaggedArray",
"_PyUnicode_JoinStack",
"Py_STACK_TAG",
"Py_STACK_UNTAG_BORROWED",
"Py_DECREF_STACKREF",
Expand Down

[8]ページ先頭

©2009-2025 Movatter.jp