mirror of https://github.com/python/cpython
gh-99300: Use Py_NewRef() in Python/ceval.c (#99318)
Replace Py_INCREF() and Py_XINCREF() with Py_NewRef() and Py_XNewRef() in Python/ceval.c and related files.
This commit is contained in:
parent
231d83b724
commit
2e343fc465
|
@ -941,10 +941,9 @@ dummy_func(
|
|||
PUSH(value);
|
||||
DISPATCH();
|
||||
}
|
||||
Py_INCREF(exc_value);
|
||||
PyObject *exc_type = Py_NewRef(Py_TYPE(exc_value));
|
||||
PyObject *exc_traceback = PyException_GetTraceback(exc_value);
|
||||
_PyErr_Restore(tstate, exc_type, exc_value, exc_traceback);
|
||||
_PyErr_Restore(tstate, exc_type, Py_NewRef(exc_value), exc_traceback);
|
||||
goto exception_unwind;
|
||||
}
|
||||
|
||||
|
@ -982,8 +981,8 @@ dummy_func(
|
|||
}
|
||||
assert(PyExceptionInstance_Check(error));
|
||||
SET_TOP(error);
|
||||
PyException_SetCause(error, exc);
|
||||
Py_INCREF(exc);
|
||||
PyException_SetCause(error, Py_NewRef(exc));
|
||||
// Steal exc reference, rather than Py_NewRef+Py_DECREF
|
||||
PyException_SetContext(error, exc);
|
||||
Py_DECREF(message);
|
||||
}
|
||||
|
@ -994,8 +993,7 @@ dummy_func(
|
|||
// stack effect: ( -- __0)
|
||||
inst(LOAD_ASSERTION_ERROR) {
|
||||
PyObject *value = PyExc_AssertionError;
|
||||
Py_INCREF(value);
|
||||
PUSH(value);
|
||||
PUSH(Py_NewRef(value));
|
||||
}
|
||||
|
||||
// stack effect: ( -- __0)
|
||||
|
@ -1351,8 +1349,7 @@ dummy_func(
|
|||
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_GLOBAL);
|
||||
STAT_INC(LOAD_GLOBAL, hit);
|
||||
STACK_GROW(push_null+1);
|
||||
Py_INCREF(res);
|
||||
SET_TOP(res);
|
||||
SET_TOP(Py_NewRef(res));
|
||||
}
|
||||
|
||||
// error: LOAD_GLOBAL has irregular stack effect
|
||||
|
@ -1376,8 +1373,7 @@ dummy_func(
|
|||
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_GLOBAL);
|
||||
STAT_INC(LOAD_GLOBAL, hit);
|
||||
STACK_GROW(push_null+1);
|
||||
Py_INCREF(res);
|
||||
SET_TOP(res);
|
||||
SET_TOP(Py_NewRef(res));
|
||||
}
|
||||
|
||||
// stack effect: ( -- )
|
||||
|
@ -1459,8 +1455,7 @@ dummy_func(
|
|||
format_exc_unbound(tstate, frame->f_code, oparg);
|
||||
goto error;
|
||||
}
|
||||
Py_INCREF(value);
|
||||
PUSH(value);
|
||||
PUSH(Py_NewRef(value));
|
||||
}
|
||||
|
||||
// stack effect: (__0 -- )
|
||||
|
@ -1482,8 +1477,7 @@ dummy_func(
|
|||
assert(oparg == co->co_nfreevars);
|
||||
for (int i = 0; i < oparg; ++i) {
|
||||
PyObject *o = PyTuple_GET_ITEM(closure, i);
|
||||
Py_INCREF(o);
|
||||
frame->localsplus[offset + i] = o;
|
||||
frame->localsplus[offset + i] = Py_NewRef(o);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1987,9 +1981,8 @@ dummy_func(
|
|||
SET_TOP(NULL);
|
||||
int shrink_stack = !(oparg & 1);
|
||||
STACK_SHRINK(shrink_stack);
|
||||
Py_INCREF(name);
|
||||
new_frame->localsplus[0] = owner;
|
||||
new_frame->localsplus[1] = name;
|
||||
new_frame->localsplus[1] = Py_NewRef(name);
|
||||
for (int i = 2; i < code->co_nlocalsplus; i++) {
|
||||
new_frame->localsplus[i] = NULL;
|
||||
}
|
||||
|
@ -2233,8 +2226,7 @@ dummy_func(
|
|||
PyObject *left = TOP();
|
||||
int res = Py_Is(left, right) ^ oparg;
|
||||
PyObject *b = res ? Py_True : Py_False;
|
||||
Py_INCREF(b);
|
||||
SET_TOP(b);
|
||||
SET_TOP(Py_NewRef(b));
|
||||
Py_DECREF(left);
|
||||
Py_DECREF(right);
|
||||
}
|
||||
|
@ -2250,8 +2242,7 @@ dummy_func(
|
|||
goto error;
|
||||
}
|
||||
PyObject *b = (res^oparg) ? Py_True : Py_False;
|
||||
Py_INCREF(b);
|
||||
PUSH(b);
|
||||
PUSH(Py_NewRef(b));
|
||||
}
|
||||
|
||||
// stack effect: ( -- )
|
||||
|
@ -2532,8 +2523,7 @@ dummy_func(
|
|||
}
|
||||
else {
|
||||
// Failure!
|
||||
Py_INCREF(Py_None);
|
||||
SET_TOP(Py_None);
|
||||
SET_TOP(Py_NewRef(Py_None));
|
||||
}
|
||||
Py_DECREF(subject);
|
||||
}
|
||||
|
@ -2543,8 +2533,7 @@ dummy_func(
|
|||
PyObject *subject = TOP();
|
||||
int match = Py_TYPE(subject)->tp_flags & Py_TPFLAGS_MAPPING;
|
||||
PyObject *res = match ? Py_True : Py_False;
|
||||
Py_INCREF(res);
|
||||
PUSH(res);
|
||||
PUSH(Py_NewRef(res));
|
||||
PREDICT(POP_JUMP_IF_FALSE);
|
||||
}
|
||||
|
||||
|
@ -2553,8 +2542,7 @@ dummy_func(
|
|||
PyObject *subject = TOP();
|
||||
int match = Py_TYPE(subject)->tp_flags & Py_TPFLAGS_SEQUENCE;
|
||||
PyObject *res = match ? Py_True : Py_False;
|
||||
Py_INCREF(res);
|
||||
PUSH(res);
|
||||
PUSH(Py_NewRef(res));
|
||||
PREDICT(POP_JUMP_IF_FALSE);
|
||||
}
|
||||
|
||||
|
@ -2656,8 +2644,7 @@ dummy_func(
|
|||
if (seq) {
|
||||
if (it->it_index < PyList_GET_SIZE(seq)) {
|
||||
PyObject *next = PyList_GET_ITEM(seq, it->it_index++);
|
||||
Py_INCREF(next);
|
||||
PUSH(next);
|
||||
PUSH(Py_NewRef(next));
|
||||
JUMPBY(INLINE_CACHE_ENTRIES_FOR_ITER);
|
||||
DISPATCH();
|
||||
}
|
||||
|
@ -2704,8 +2691,7 @@ dummy_func(
|
|||
JUMPBY(INLINE_CACHE_ENTRIES_FOR_ITER + oparg);
|
||||
assert(_Py_OPCODE(*next_instr) == END_FOR);
|
||||
frame->prev_instr = next_instr - 1;
|
||||
Py_INCREF(Py_None);
|
||||
_PyFrame_StackPush(gen_frame, Py_None);
|
||||
_PyFrame_StackPush(gen_frame, Py_NewRef(Py_None));
|
||||
gen->gi_frame_state = FRAME_EXECUTING;
|
||||
gen->gi_exc_state.previous_item = tstate->exc_info;
|
||||
tstate->exc_info = &gen->gi_exc_state;
|
||||
|
@ -2826,12 +2812,10 @@ dummy_func(
|
|||
SET_TOP(exc_info->exc_value);
|
||||
}
|
||||
else {
|
||||
Py_INCREF(Py_None);
|
||||
SET_TOP(Py_None);
|
||||
SET_TOP(Py_NewRef(Py_None));
|
||||
}
|
||||
|
||||
Py_INCREF(value);
|
||||
PUSH(value);
|
||||
PUSH(Py_NewRef(value));
|
||||
assert(PyExceptionInstance_Check(value));
|
||||
exc_info->exc_value = value;
|
||||
|
||||
|
@ -2857,8 +2841,7 @@ dummy_func(
|
|||
PyObject *res = read_obj(cache->descr);
|
||||
assert(res != NULL);
|
||||
assert(_PyType_HasFeature(Py_TYPE(res), Py_TPFLAGS_METHOD_DESCRIPTOR));
|
||||
Py_INCREF(res);
|
||||
SET_TOP(res);
|
||||
SET_TOP(Py_NewRef(res));
|
||||
PUSH(self);
|
||||
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_ATTR);
|
||||
}
|
||||
|
@ -2885,8 +2868,7 @@ dummy_func(
|
|||
PyObject *res = read_obj(cache->descr);
|
||||
assert(res != NULL);
|
||||
assert(_PyType_HasFeature(Py_TYPE(res), Py_TPFLAGS_METHOD_DESCRIPTOR));
|
||||
Py_INCREF(res);
|
||||
SET_TOP(res);
|
||||
SET_TOP(Py_NewRef(res));
|
||||
PUSH(self);
|
||||
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_ATTR);
|
||||
}
|
||||
|
@ -2904,8 +2886,7 @@ dummy_func(
|
|||
PyObject *res = read_obj(cache->descr);
|
||||
assert(res != NULL);
|
||||
assert(_PyType_HasFeature(Py_TYPE(res), Py_TPFLAGS_METHOD_DESCRIPTOR));
|
||||
Py_INCREF(res);
|
||||
SET_TOP(res);
|
||||
SET_TOP(Py_NewRef(res));
|
||||
PUSH(self);
|
||||
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_ATTR);
|
||||
}
|
||||
|
@ -2927,8 +2908,7 @@ dummy_func(
|
|||
PyObject *res = read_obj(cache->descr);
|
||||
assert(res != NULL);
|
||||
assert(_PyType_HasFeature(Py_TYPE(res), Py_TPFLAGS_METHOD_DESCRIPTOR));
|
||||
Py_INCREF(res);
|
||||
SET_TOP(res);
|
||||
SET_TOP(Py_NewRef(res));
|
||||
PUSH(self);
|
||||
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_ATTR);
|
||||
}
|
||||
|
@ -2939,12 +2919,10 @@ dummy_func(
|
|||
PyObject *function = PEEK(oparg + 1);
|
||||
DEOPT_IF(Py_TYPE(function) != &PyMethod_Type, CALL);
|
||||
STAT_INC(CALL, hit);
|
||||
PyObject *meth = ((PyMethodObject *)function)->im_func;
|
||||
PyObject *self = ((PyMethodObject *)function)->im_self;
|
||||
Py_INCREF(meth);
|
||||
Py_INCREF(self);
|
||||
PEEK(oparg + 1) = self;
|
||||
PEEK(oparg + 2) = meth;
|
||||
PEEK(oparg + 1) = Py_NewRef(self);
|
||||
PyObject *meth = ((PyMethodObject *)function)->im_func;
|
||||
PEEK(oparg + 2) = Py_NewRef(meth);
|
||||
Py_DECREF(function);
|
||||
GO_TO_INSTRUCTION(CALL_PY_EXACT_ARGS);
|
||||
}
|
||||
|
@ -2974,12 +2952,10 @@ dummy_func(
|
|||
is_meth = is_method(stack_pointer, oparg);
|
||||
PyObject *function = PEEK(oparg + 1);
|
||||
if (!is_meth && Py_TYPE(function) == &PyMethod_Type) {
|
||||
PyObject *meth = ((PyMethodObject *)function)->im_func;
|
||||
PyObject *self = ((PyMethodObject *)function)->im_self;
|
||||
Py_INCREF(meth);
|
||||
Py_INCREF(self);
|
||||
PEEK(oparg+1) = self;
|
||||
PEEK(oparg+2) = meth;
|
||||
PEEK(oparg+1) = Py_NewRef(self);
|
||||
PyObject *meth = ((PyMethodObject *)function)->im_func;
|
||||
PEEK(oparg+2) = Py_NewRef(meth);
|
||||
Py_DECREF(function);
|
||||
is_meth = 1;
|
||||
}
|
||||
|
@ -3102,8 +3078,7 @@ dummy_func(
|
|||
for (int i = argcount; i < code->co_argcount; i++) {
|
||||
PyObject *def = PyTuple_GET_ITEM(func->func_defaults,
|
||||
i - minargs);
|
||||
Py_INCREF(def);
|
||||
new_frame->localsplus[i] = def;
|
||||
new_frame->localsplus[i] = Py_NewRef(def);
|
||||
}
|
||||
for (int i = code->co_argcount; i < code->co_nlocalsplus; i++) {
|
||||
new_frame->localsplus[i] = NULL;
|
||||
|
@ -3734,8 +3709,7 @@ dummy_func(
|
|||
inst(COPY) {
|
||||
assert(oparg != 0);
|
||||
PyObject *peek = PEEK(oparg);
|
||||
Py_INCREF(peek);
|
||||
PUSH(peek);
|
||||
PUSH(Py_NewRef(peek));
|
||||
}
|
||||
|
||||
// stack effect: (__0 -- )
|
||||
|
|
|
@ -391,8 +391,7 @@ match_keys(PyThreadState *tstate, PyObject *map, PyObject *keys)
|
|||
Py_DECREF(value);
|
||||
Py_DECREF(values);
|
||||
// Return None:
|
||||
Py_INCREF(Py_None);
|
||||
values = Py_None;
|
||||
values = Py_NewRef(Py_None);
|
||||
goto done;
|
||||
}
|
||||
PyTuple_SET_ITEM(values, i, value);
|
||||
|
@ -1883,8 +1882,7 @@ initialize_locals(PyThreadState *tstate, PyFunctionObject *func,
|
|||
for (; i < defcount; i++) {
|
||||
if (localsplus[m+i] == NULL) {
|
||||
PyObject *def = defs[i];
|
||||
Py_INCREF(def);
|
||||
localsplus[m+i] = def;
|
||||
localsplus[m+i] = Py_NewRef(def);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1900,8 +1898,7 @@ initialize_locals(PyThreadState *tstate, PyFunctionObject *func,
|
|||
if (func->func_kwdefaults != NULL) {
|
||||
PyObject *def = PyDict_GetItemWithError(func->func_kwdefaults, varname);
|
||||
if (def) {
|
||||
Py_INCREF(def);
|
||||
localsplus[i] = def;
|
||||
localsplus[i] = Py_NewRef(def);
|
||||
continue;
|
||||
}
|
||||
else if (_PyErr_Occurred(tstate)) {
|
||||
|
@ -2092,15 +2089,13 @@ PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals,
|
|||
newargs[i] = args[i];
|
||||
}
|
||||
for (int i = 0; i < kwcount; i++) {
|
||||
Py_INCREF(kws[2*i]);
|
||||
PyTuple_SET_ITEM(kwnames, i, kws[2*i]);
|
||||
PyTuple_SET_ITEM(kwnames, i, Py_NewRef(kws[2*i]));
|
||||
newargs[argcount+i] = kws[2*i+1];
|
||||
}
|
||||
allargs = newargs;
|
||||
}
|
||||
for (int i = 0; i < kwcount; i++) {
|
||||
Py_INCREF(kws[2*i]);
|
||||
PyTuple_SET_ITEM(kwnames, i, kws[2*i]);
|
||||
PyTuple_SET_ITEM(kwnames, i, Py_NewRef(kws[2*i]));
|
||||
}
|
||||
PyFrameConstructor constr = {
|
||||
.fc_globals = globals,
|
||||
|
@ -2395,8 +2390,7 @@ call_exc_trace(Py_tracefunc func, PyObject *self,
|
|||
int err;
|
||||
_PyErr_Fetch(tstate, &type, &value, &orig_traceback);
|
||||
if (value == NULL) {
|
||||
value = Py_None;
|
||||
Py_INCREF(value);
|
||||
value = Py_NewRef(Py_None);
|
||||
}
|
||||
_PyErr_NormalizeException(tstate, &type, &value, &orig_traceback);
|
||||
traceback = (orig_traceback != NULL) ? orig_traceback : Py_None;
|
||||
|
@ -2699,8 +2693,7 @@ _PyEval_SetAsyncGenFirstiter(PyObject *firstiter)
|
|||
return -1;
|
||||
}
|
||||
|
||||
Py_XINCREF(firstiter);
|
||||
Py_XSETREF(tstate->async_gen_firstiter, firstiter);
|
||||
Py_XSETREF(tstate->async_gen_firstiter, Py_XNewRef(firstiter));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2720,8 +2713,7 @@ _PyEval_SetAsyncGenFinalizer(PyObject *finalizer)
|
|||
return -1;
|
||||
}
|
||||
|
||||
Py_XINCREF(finalizer);
|
||||
Py_XSETREF(tstate->async_gen_finalizer, finalizer);
|
||||
Py_XSETREF(tstate->async_gen_finalizer, Py_XNewRef(finalizer));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -932,10 +932,9 @@
|
|||
PUSH(value);
|
||||
DISPATCH();
|
||||
}
|
||||
Py_INCREF(exc_value);
|
||||
PyObject *exc_type = Py_NewRef(Py_TYPE(exc_value));
|
||||
PyObject *exc_traceback = PyException_GetTraceback(exc_value);
|
||||
_PyErr_Restore(tstate, exc_type, exc_value, exc_traceback);
|
||||
_PyErr_Restore(tstate, exc_type, Py_NewRef(exc_value), exc_traceback);
|
||||
goto exception_unwind;
|
||||
}
|
||||
|
||||
|
@ -973,8 +972,8 @@
|
|||
}
|
||||
assert(PyExceptionInstance_Check(error));
|
||||
SET_TOP(error);
|
||||
PyException_SetCause(error, exc);
|
||||
Py_INCREF(exc);
|
||||
PyException_SetCause(error, Py_NewRef(exc));
|
||||
// Steal exc reference, rather than Py_NewRef+Py_DECREF
|
||||
PyException_SetContext(error, exc);
|
||||
Py_DECREF(message);
|
||||
}
|
||||
|
@ -983,8 +982,7 @@
|
|||
|
||||
TARGET(LOAD_ASSERTION_ERROR) {
|
||||
PyObject *value = PyExc_AssertionError;
|
||||
Py_INCREF(value);
|
||||
PUSH(value);
|
||||
PUSH(Py_NewRef(value));
|
||||
DISPATCH();
|
||||
}
|
||||
|
||||
|
@ -1343,8 +1341,7 @@
|
|||
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_GLOBAL);
|
||||
STAT_INC(LOAD_GLOBAL, hit);
|
||||
STACK_GROW(push_null+1);
|
||||
Py_INCREF(res);
|
||||
SET_TOP(res);
|
||||
SET_TOP(Py_NewRef(res));
|
||||
DISPATCH();
|
||||
}
|
||||
|
||||
|
@ -1368,8 +1365,7 @@
|
|||
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_GLOBAL);
|
||||
STAT_INC(LOAD_GLOBAL, hit);
|
||||
STACK_GROW(push_null+1);
|
||||
Py_INCREF(res);
|
||||
SET_TOP(res);
|
||||
SET_TOP(Py_NewRef(res));
|
||||
DISPATCH();
|
||||
}
|
||||
|
||||
|
@ -1449,8 +1445,7 @@
|
|||
format_exc_unbound(tstate, frame->f_code, oparg);
|
||||
goto error;
|
||||
}
|
||||
Py_INCREF(value);
|
||||
PUSH(value);
|
||||
PUSH(Py_NewRef(value));
|
||||
DISPATCH();
|
||||
}
|
||||
|
||||
|
@ -1472,8 +1467,7 @@
|
|||
assert(oparg == co->co_nfreevars);
|
||||
for (int i = 0; i < oparg; ++i) {
|
||||
PyObject *o = PyTuple_GET_ITEM(closure, i);
|
||||
Py_INCREF(o);
|
||||
frame->localsplus[offset + i] = o;
|
||||
frame->localsplus[offset + i] = Py_NewRef(o);
|
||||
}
|
||||
DISPATCH();
|
||||
}
|
||||
|
@ -1977,9 +1971,8 @@
|
|||
SET_TOP(NULL);
|
||||
int shrink_stack = !(oparg & 1);
|
||||
STACK_SHRINK(shrink_stack);
|
||||
Py_INCREF(name);
|
||||
new_frame->localsplus[0] = owner;
|
||||
new_frame->localsplus[1] = name;
|
||||
new_frame->localsplus[1] = Py_NewRef(name);
|
||||
for (int i = 2; i < code->co_nlocalsplus; i++) {
|
||||
new_frame->localsplus[i] = NULL;
|
||||
}
|
||||
|
@ -2223,8 +2216,7 @@
|
|||
PyObject *left = TOP();
|
||||
int res = Py_Is(left, right) ^ oparg;
|
||||
PyObject *b = res ? Py_True : Py_False;
|
||||
Py_INCREF(b);
|
||||
SET_TOP(b);
|
||||
SET_TOP(Py_NewRef(b));
|
||||
Py_DECREF(left);
|
||||
Py_DECREF(right);
|
||||
DISPATCH();
|
||||
|
@ -2240,8 +2232,7 @@
|
|||
goto error;
|
||||
}
|
||||
PyObject *b = (res^oparg) ? Py_True : Py_False;
|
||||
Py_INCREF(b);
|
||||
PUSH(b);
|
||||
PUSH(Py_NewRef(b));
|
||||
DISPATCH();
|
||||
}
|
||||
|
||||
|
@ -2524,8 +2515,7 @@
|
|||
}
|
||||
else {
|
||||
// Failure!
|
||||
Py_INCREF(Py_None);
|
||||
SET_TOP(Py_None);
|
||||
SET_TOP(Py_NewRef(Py_None));
|
||||
}
|
||||
Py_DECREF(subject);
|
||||
DISPATCH();
|
||||
|
@ -2535,8 +2525,7 @@
|
|||
PyObject *subject = TOP();
|
||||
int match = Py_TYPE(subject)->tp_flags & Py_TPFLAGS_MAPPING;
|
||||
PyObject *res = match ? Py_True : Py_False;
|
||||
Py_INCREF(res);
|
||||
PUSH(res);
|
||||
PUSH(Py_NewRef(res));
|
||||
PREDICT(POP_JUMP_IF_FALSE);
|
||||
DISPATCH();
|
||||
}
|
||||
|
@ -2545,8 +2534,7 @@
|
|||
PyObject *subject = TOP();
|
||||
int match = Py_TYPE(subject)->tp_flags & Py_TPFLAGS_SEQUENCE;
|
||||
PyObject *res = match ? Py_True : Py_False;
|
||||
Py_INCREF(res);
|
||||
PUSH(res);
|
||||
PUSH(Py_NewRef(res));
|
||||
PREDICT(POP_JUMP_IF_FALSE);
|
||||
DISPATCH();
|
||||
}
|
||||
|
@ -2649,8 +2637,7 @@
|
|||
if (seq) {
|
||||
if (it->it_index < PyList_GET_SIZE(seq)) {
|
||||
PyObject *next = PyList_GET_ITEM(seq, it->it_index++);
|
||||
Py_INCREF(next);
|
||||
PUSH(next);
|
||||
PUSH(Py_NewRef(next));
|
||||
JUMPBY(INLINE_CACHE_ENTRIES_FOR_ITER);
|
||||
DISPATCH();
|
||||
}
|
||||
|
@ -2698,8 +2685,7 @@
|
|||
JUMPBY(INLINE_CACHE_ENTRIES_FOR_ITER + oparg);
|
||||
assert(_Py_OPCODE(*next_instr) == END_FOR);
|
||||
frame->prev_instr = next_instr - 1;
|
||||
Py_INCREF(Py_None);
|
||||
_PyFrame_StackPush(gen_frame, Py_None);
|
||||
_PyFrame_StackPush(gen_frame, Py_NewRef(Py_None));
|
||||
gen->gi_frame_state = FRAME_EXECUTING;
|
||||
gen->gi_exc_state.previous_item = tstate->exc_info;
|
||||
tstate->exc_info = &gen->gi_exc_state;
|
||||
|
@ -2818,12 +2804,10 @@
|
|||
SET_TOP(exc_info->exc_value);
|
||||
}
|
||||
else {
|
||||
Py_INCREF(Py_None);
|
||||
SET_TOP(Py_None);
|
||||
SET_TOP(Py_NewRef(Py_None));
|
||||
}
|
||||
|
||||
Py_INCREF(value);
|
||||
PUSH(value);
|
||||
PUSH(Py_NewRef(value));
|
||||
assert(PyExceptionInstance_Check(value));
|
||||
exc_info->exc_value = value;
|
||||
DISPATCH();
|
||||
|
@ -2848,8 +2832,7 @@
|
|||
PyObject *res = read_obj(cache->descr);
|
||||
assert(res != NULL);
|
||||
assert(_PyType_HasFeature(Py_TYPE(res), Py_TPFLAGS_METHOD_DESCRIPTOR));
|
||||
Py_INCREF(res);
|
||||
SET_TOP(res);
|
||||
SET_TOP(Py_NewRef(res));
|
||||
PUSH(self);
|
||||
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_ATTR);
|
||||
DISPATCH();
|
||||
|
@ -2876,8 +2859,7 @@
|
|||
PyObject *res = read_obj(cache->descr);
|
||||
assert(res != NULL);
|
||||
assert(_PyType_HasFeature(Py_TYPE(res), Py_TPFLAGS_METHOD_DESCRIPTOR));
|
||||
Py_INCREF(res);
|
||||
SET_TOP(res);
|
||||
SET_TOP(Py_NewRef(res));
|
||||
PUSH(self);
|
||||
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_ATTR);
|
||||
DISPATCH();
|
||||
|
@ -2895,8 +2877,7 @@
|
|||
PyObject *res = read_obj(cache->descr);
|
||||
assert(res != NULL);
|
||||
assert(_PyType_HasFeature(Py_TYPE(res), Py_TPFLAGS_METHOD_DESCRIPTOR));
|
||||
Py_INCREF(res);
|
||||
SET_TOP(res);
|
||||
SET_TOP(Py_NewRef(res));
|
||||
PUSH(self);
|
||||
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_ATTR);
|
||||
DISPATCH();
|
||||
|
@ -2918,8 +2899,7 @@
|
|||
PyObject *res = read_obj(cache->descr);
|
||||
assert(res != NULL);
|
||||
assert(_PyType_HasFeature(Py_TYPE(res), Py_TPFLAGS_METHOD_DESCRIPTOR));
|
||||
Py_INCREF(res);
|
||||
SET_TOP(res);
|
||||
SET_TOP(Py_NewRef(res));
|
||||
PUSH(self);
|
||||
JUMPBY(INLINE_CACHE_ENTRIES_LOAD_ATTR);
|
||||
DISPATCH();
|
||||
|
@ -2930,12 +2910,10 @@
|
|||
PyObject *function = PEEK(oparg + 1);
|
||||
DEOPT_IF(Py_TYPE(function) != &PyMethod_Type, CALL);
|
||||
STAT_INC(CALL, hit);
|
||||
PyObject *meth = ((PyMethodObject *)function)->im_func;
|
||||
PyObject *self = ((PyMethodObject *)function)->im_self;
|
||||
Py_INCREF(meth);
|
||||
Py_INCREF(self);
|
||||
PEEK(oparg + 1) = self;
|
||||
PEEK(oparg + 2) = meth;
|
||||
PEEK(oparg + 1) = Py_NewRef(self);
|
||||
PyObject *meth = ((PyMethodObject *)function)->im_func;
|
||||
PEEK(oparg + 2) = Py_NewRef(meth);
|
||||
Py_DECREF(function);
|
||||
GO_TO_INSTRUCTION(CALL_PY_EXACT_ARGS);
|
||||
}
|
||||
|
@ -2965,12 +2943,10 @@
|
|||
is_meth = is_method(stack_pointer, oparg);
|
||||
PyObject *function = PEEK(oparg + 1);
|
||||
if (!is_meth && Py_TYPE(function) == &PyMethod_Type) {
|
||||
PyObject *meth = ((PyMethodObject *)function)->im_func;
|
||||
PyObject *self = ((PyMethodObject *)function)->im_self;
|
||||
Py_INCREF(meth);
|
||||
Py_INCREF(self);
|
||||
PEEK(oparg+1) = self;
|
||||
PEEK(oparg+2) = meth;
|
||||
PEEK(oparg+1) = Py_NewRef(self);
|
||||
PyObject *meth = ((PyMethodObject *)function)->im_func;
|
||||
PEEK(oparg+2) = Py_NewRef(meth);
|
||||
Py_DECREF(function);
|
||||
is_meth = 1;
|
||||
}
|
||||
|
@ -3093,8 +3069,7 @@
|
|||
for (int i = argcount; i < code->co_argcount; i++) {
|
||||
PyObject *def = PyTuple_GET_ITEM(func->func_defaults,
|
||||
i - minargs);
|
||||
Py_INCREF(def);
|
||||
new_frame->localsplus[i] = def;
|
||||
new_frame->localsplus[i] = Py_NewRef(def);
|
||||
}
|
||||
for (int i = code->co_argcount; i < code->co_nlocalsplus; i++) {
|
||||
new_frame->localsplus[i] = NULL;
|
||||
|
@ -3724,8 +3699,7 @@
|
|||
TARGET(COPY) {
|
||||
assert(oparg != 0);
|
||||
PyObject *peek = PEEK(oparg);
|
||||
Py_INCREF(peek);
|
||||
PUSH(peek);
|
||||
PUSH(Py_NewRef(peek));
|
||||
DISPATCH();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue