Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
86 changes: 30 additions & 56 deletions Python/bytecodes.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -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;
}

Expand DownExpand Up@@ -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);
}
Expand All@@ -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)
Expand DownExpand Up@@ -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
Expand All@@ -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: ( -- )
Expand DownExpand Up@@ -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 -- )
Expand All@@ -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);
}
}

Expand DownExpand Up@@ -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;
}
Expand DownExpand Up@@ -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);
}
Expand All@@ -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: ( -- )
Expand DownExpand Up@@ -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);
}
Expand All@@ -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);
}

Expand All@@ -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);
}

Expand DownExpand Up@@ -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();
}
Expand DownExpand Up@@ -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;
Expand DownExpand Up@@ -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;

Expand All@@ -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);
}
Expand All@@ -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);
}
Expand All@@ -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);
}
Expand All@@ -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);
}
Expand All@@ -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);
}
Expand DownExpand Up@@ -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;
}
Expand DownExpand Up@@ -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;
Expand DownExpand Up@@ -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 -- )
Expand Down
24 changes: 8 additions & 16 deletions Python/ceval.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -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);
Expand DownExpand Up@@ -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);
}
}
}
Expand All@@ -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)){
Expand DownExpand Up@@ -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,
Expand DownExpand Up@@ -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;
Expand DownExpand Up@@ -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;
}

Expand All@@ -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;
}

Expand Down
Loading