value = stack_pointer[-1];
spam();
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
"""
spam();
stack_pointer[0] = res;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
"""
spam();
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
"""
if (cond) goto pop_2_label;
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
"""
uint32_t extra = read_u32(&this_instr[2].cache);
(void)extra;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
"""
}
stack_pointer[-3] = res;
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
res = op3(arg2, left, right);
stack_pointer[-3] = res;
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
"""
below = stack_pointer[-2 - oparg*2];
spam();
stack_pointer += -2 - oparg*2;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
"""
stack_pointer[-2] = below;
stack_pointer[-1 + oparg*3] = above;
stack_pointer += oparg*3;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
"""
spam(values, oparg);
stack_pointer[0] = above;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
"""
extra = stack_pointer[-1 - oparg];
if (oparg == 0) { stack_pointer += -1 - oparg; goto somewhere; }
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
"""
if (oparg & 2) stack_pointer[-1 - (((oparg & 1) == 1) ? 1 : 0)] = output;
stack_pointer[-1 - (((oparg & 1) == 1) ? 1 : 0) + ((oparg & 2) ? 1 : 0)] = zz;
stack_pointer += -(((oparg & 1) == 1) ? 1 : 0) + ((oparg & 2) ? 1 : 0);
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
"""
if (oparg) stack_pointer[-2] = extra;
stack_pointer[-2 + ((oparg) ? 1 : 0)] = res;
stack_pointer += -1 + ((oparg) ? 1 : 0);
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
"""
stack_pointer[0] = val1;
stack_pointer[1] = val2;
stack_pointer += 2;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
"""
#define STACK_SHRINK(n) BASIC_STACKADJ(-(n))
#endif
+#define WITHIN_STACK_BOUNDS() \
+ (frame == &entry_frame || (STACK_LEVEL() >= 0 && STACK_LEVEL() <= STACK_SIZE()))
/* Data access macros */
#define FRAME_CO_CONSTS (_PyFrame_GetCode(frame)->co_consts)
Py_INCREF(value);
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_INCREF(value);
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_INCREF(value);
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_INCREF(value);
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_INCREF(value);
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_INCREF(value);
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_INCREF(value);
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_INCREF(value);
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_INCREF(value);
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_INCREF(value);
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
GETLOCAL(oparg) = NULL;
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_INCREF(value);
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
value = stack_pointer[-1];
SETLOCAL(oparg, value);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
value = stack_pointer[-1];
SETLOCAL(oparg, value);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
value = stack_pointer[-1];
SETLOCAL(oparg, value);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
value = stack_pointer[-1];
SETLOCAL(oparg, value);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
value = stack_pointer[-1];
SETLOCAL(oparg, value);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
value = stack_pointer[-1];
SETLOCAL(oparg, value);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
value = stack_pointer[-1];
SETLOCAL(oparg, value);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
value = stack_pointer[-1];
SETLOCAL(oparg, value);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
value = stack_pointer[-1];
SETLOCAL(oparg, value);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
value = stack_pointer[-1];
Py_DECREF(value);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = NULL;
stack_pointer[0] = res;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_DECREF(receiver);
stack_pointer[-2] = value;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (res == NULL) JUMP_TO_ERROR();
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (res == NULL) JUMP_TO_ERROR();
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (res == NULL) JUMP_TO_ERROR();
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
DECREF_INPUTS_AND_REUSE_FLOAT(left, right, dres, res);
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
DECREF_INPUTS_AND_REUSE_FLOAT(left, right, dres, res);
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
DECREF_INPUTS_AND_REUSE_FLOAT(left, right, dres, res);
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (res == NULL) JUMP_TO_ERROR();
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (res == NULL) JUMP_TO_ERROR();
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (res == NULL) JUMP_TO_ERROR();
stack_pointer[-3] = res;
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_DECREF(container);
if (err) JUMP_TO_ERROR();
stack_pointer += -4;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_DECREF(list);
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_DECREF(str);
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_DECREF(tuple);
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
// not found or error
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
list = stack_pointer[-2 - (oparg-1)];
if (_PyList_AppendTakeRef((PyListObject *)list, v) < 0) JUMP_TO_ERROR();
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_DECREF(v);
if (err) JUMP_TO_ERROR();
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_DECREF(sub);
if (err) JUMP_TO_ERROR();
stack_pointer += -3;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
_Py_DECREF_SPECIALIZED(sub, (destructor)PyObject_Free);
Py_DECREF(list);
stack_pointer += -3;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_DECREF(dict);
if (err) JUMP_TO_ERROR();
stack_pointer += -3;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_DECREF(sub);
if (err) JUMP_TO_ERROR();
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (res == NULL) JUMP_TO_ERROR();
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
assert(frame != &entry_frame);
#endif
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
_PyFrame_SetStackPointer(frame, stack_pointer);
assert(EMPTY());
_Py_LeaveRecursiveCallPy(tstate);
LLTRACE_RESUME_FRAME();
stack_pointer[0] = res;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[0] = awaitable;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
assert(oparg == 0 || oparg == 1);
gen->gi_frame_state = FRAME_SUSPENDED + oparg;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
_PyFrame_SetStackPointer(frame, stack_pointer);
tstate->exc_info = gen->gi_exc_state.previous_item;
gen->gi_exc_state.previous_item = NULL;
LLTRACE_RESUME_FRAME();
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
_PyErr_StackItem *exc_info = tstate->exc_info;
Py_XSETREF(exc_info->exc_value, exc_value == Py_None ? NULL : exc_value);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[0] = bc;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_DECREF(v);
if (err) JUMP_TO_ERROR();
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_DECREF(seq);
if (res == 0) JUMP_TO_ERROR();
stack_pointer += -1 + oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = val1;
stack_pointer[0] = val0;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
Py_DECREF(seq);
stack_pointer += -1 + oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
Py_DECREF(seq);
stack_pointer += -1 + oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_DECREF(seq);
if (res == 0) JUMP_TO_ERROR();
stack_pointer += (oparg >> 8) + (oparg & 0xFF);
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_DECREF(owner);
if (err) JUMP_TO_ERROR();
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_DECREF(owner);
if (err) JUMP_TO_ERROR();
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_DECREF(v);
if (err) JUMP_TO_ERROR();
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_INCREF(locals);
stack_pointer[0] = locals;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[0] = res;
if (oparg & 1) stack_pointer[1] = null;
stack_pointer += 1 + (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[0] = res;
if (oparg & 1) stack_pointer[1] = null;
stack_pointer += 1 + (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[0] = res;
if (oparg & 1) stack_pointer[1] = null;
stack_pointer += 1 + (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
PyCellObject *cell = (PyCellObject *)GETLOCAL(oparg);
PyCell_SetTakeRef(cell, v);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (str == NULL) JUMP_TO_ERROR();
stack_pointer[-oparg] = str;
stack_pointer += 1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (tup == NULL) JUMP_TO_ERROR();
stack_pointer[-oparg] = tup;
stack_pointer += 1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (list == NULL) JUMP_TO_ERROR();
stack_pointer[-oparg] = list;
stack_pointer += 1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
assert(Py_IsNone(none_val));
Py_DECREF(iterable);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_DECREF(iterable);
if (err < 0) JUMP_TO_ERROR();
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (map == NULL) JUMP_TO_ERROR();
stack_pointer[-oparg*2] = map;
stack_pointer += 1 - oparg*2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (map == NULL) JUMP_TO_ERROR();
stack_pointer[-1 - oparg] = map;
stack_pointer += -oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
Py_DECREF(update);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
Py_DECREF(update);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
// Do not DECREF INPUTS because the function steals the references
if (_PyDict_SetItem_Take2((PyDictObject *)dict, key, value) != 0) JUMP_TO_ERROR();
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (attr == NULL) JUMP_TO_ERROR();
stack_pointer[-3] = attr;
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-3] = attr;
stack_pointer[-2] = self_or_null;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = attr;
if (oparg & 1) stack_pointer[0] = self_or_null;
stack_pointer += (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = attr;
stack_pointer[0] = null;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = attr;
if (oparg & 1) stack_pointer[0] = null;
stack_pointer += (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = attr;
if (oparg & 1) stack_pointer[0] = null;
stack_pointer += (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = attr;
stack_pointer[0] = null;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = attr;
stack_pointer[0] = null;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
Py_DECREF(owner);
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
dict->ma_version_tag = new_version;
Py_DECREF(owner);
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_XDECREF(old_value);
Py_DECREF(owner);
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
// It's always a bool, so we don't care about oparg & 16.
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
// It's always a bool, so we don't care about oparg & 16.
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
// It's always a bool, so we don't care about oparg & 16.
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
b = res ? Py_True : Py_False;
stack_pointer[-2] = b;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
b = (res ^ oparg) ? Py_True : Py_False;
stack_pointer[-2] = b;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
b = (res ^ oparg) ? Py_True : Py_False;
stack_pointer[-2] = b;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
b = (res ^ oparg) ? Py_True : Py_False;
stack_pointer[-2] = b;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (len_o == NULL) JUMP_TO_ERROR();
stack_pointer[0] = len_o;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[-3] = attrs;
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = match ? Py_True : Py_False;
stack_pointer[0] = res;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = match ? Py_True : Py_False;
stack_pointer[0] = res;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (values_or_none == NULL) JUMP_TO_ERROR();
stack_pointer[0] = values_or_none;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
// Common case: no jump, leave it to the code generator
stack_pointer[0] = next;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
next = Py_NewRef(PyList_GET_ITEM(seq, it->it_index++));
stack_pointer[0] = next;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
next = Py_NewRef(PyTuple_GET_ITEM(seq, it->it_index++));
stack_pointer[0] = next;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (next == NULL) JUMP_TO_ERROR();
stack_pointer[0] = next;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
frame->return_offset = (uint16_t)(1 + INLINE_CACHE_ENTRIES_FOR_ITER + oparg);
stack_pointer[0] = (PyObject *)gen_frame;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = attr;
stack_pointer[0] = self_or_null;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (res == NULL) JUMP_TO_ERROR();
stack_pointer[0] = res;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = prev_exc;
stack_pointer[0] = new_exc;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = attr;
stack_pointer[0] = self;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = attr;
stack_pointer[0] = self;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = attr;
stack_pointer[0] = self;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
// The frame has stolen all the arguments from the stack,
// so there is no need to clean them up.
stack_pointer += -2 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
if (new_frame == NULL) {
JUMP_TO_ERROR();
}
stack_pointer[0] = (PyObject *)new_frame;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (res == NULL) JUMP_TO_ERROR();
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[-2 - oparg] = (PyObject *)new_frame;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[-2 - oparg] = (PyObject *)new_frame;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[-2 - oparg] = (PyObject *)new_frame;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[-2 - oparg] = (PyObject *)new_frame;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[-2 - oparg] = (PyObject *)new_frame;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[-2 - oparg] = (PyObject *)new_frame;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
// Eventually this should be the only occurrence of this code.
assert(tstate->interp->eval_frame == NULL);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
_PyFrame_SetStackPointer(frame, stack_pointer);
new_frame->previous = frame;
CALL_STAT_INC(inlined_py_calls);
Py_DECREF(arg);
stack_pointer[-3] = res;
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (res == NULL) JUMP_TO_ERROR();
stack_pointer[-3] = res;
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (res == NULL) JUMP_TO_ERROR();
stack_pointer[-3] = res;
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
JUMP_TO_ERROR();
}
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (res == NULL) JUMP_TO_ERROR();
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (res == NULL) JUMP_TO_ERROR();
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (res == NULL) JUMP_TO_ERROR();
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (res == NULL) JUMP_TO_ERROR();
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_DECREF(arg);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
Py_DECREF(callable);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (res == NULL) JUMP_TO_ERROR();
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (res == NULL) JUMP_TO_ERROR();
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (res == NULL) JUMP_TO_ERROR();
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (res == NULL) JUMP_TO_ERROR();
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[-2] = func;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
LLTRACE_RESUME_FRAME();
stack_pointer[0] = res;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (slice == NULL) JUMP_TO_ERROR();
stack_pointer[-2 - ((oparg == 3) ? 1 : 0)] = slice;
stack_pointer += -1 - ((oparg == 3) ? 1 : 0);
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (res == NULL) JUMP_TO_ERROR();
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
top = Py_NewRef(bottom);
stack_pointer[0] = top;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
if (res == NULL) JUMP_TO_ERROR();
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
PyObject *flag;
flag = stack_pointer[-1];
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
if (!Py_IsTrue(flag)) {
UOP_STAT_INC(uopcode, miss);
JUMP_TO_JUMP_TARGET();
PyObject *flag;
flag = stack_pointer[-1];
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
if (!Py_IsFalse(flag)) {
UOP_STAT_INC(uopcode, miss);
JUMP_TO_JUMP_TARGET();
PyObject *val;
val = stack_pointer[-1];
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
if (!Py_IsNone(val)) {
Py_DECREF(val);
if (1) {
PyObject *val;
val = stack_pointer[-1];
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
if (Py_IsNone(val)) {
UOP_STAT_INC(uopcode, miss);
JUMP_TO_JUMP_TARGET();
value = Py_NewRef(ptr);
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
value = ptr;
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[0] = value;
stack_pointer[1] = null;
stack_pointer += 2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[0] = value;
stack_pointer[1] = null;
stack_pointer += 2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
_PyCounterOptimizerObject *exe = (_PyCounterOptimizerObject *)opt;
exe->count++;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
uint32_t target = (uint32_t)CURRENT_OPERAND();
frame->instr_ptr = ((_Py_CODEUNIT *)_PyFrame_GetCode(frame)->co_code_adaptive) + target;
stack_pointer += -oparg;
+ assert(WITHIN_STACK_BOUNDS());
GOTO_UNWIND();
break;
}
}
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
SKIP_OVER(1);
}
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
if (res == NULL) goto pop_3_error;
stack_pointer[-3] = res;
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
// not found or error
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
Py_DECREF(list);
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
Py_DECREF(str);
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
Py_DECREF(tuple);
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
if (map == NULL) { stack_pointer += -1 - oparg; goto error; }
stack_pointer[-1 - oparg] = map;
stack_pointer += -oparg;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
if (list == NULL) { stack_pointer += -oparg; goto error; }
stack_pointer[-oparg] = list;
stack_pointer += 1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
if (map == NULL) { stack_pointer += -oparg*2; goto error; }
stack_pointer[-oparg*2] = map;
stack_pointer += 1 - oparg*2;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[-oparg] = set;
stack_pointer += 1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
if (slice == NULL) { stack_pointer += -2 - ((oparg == 3) ? 1 : 0); goto error; }
stack_pointer[-2 - ((oparg == 3) ? 1 : 0)] = slice;
stack_pointer += -1 - ((oparg == 3) ? 1 : 0);
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
if (str == NULL) { stack_pointer += -oparg; goto error; }
stack_pointer[-oparg] = str;
stack_pointer += 1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
if (tup == NULL) { stack_pointer += -oparg; goto error; }
stack_pointer[-oparg] = tup;
stack_pointer += 1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
CHECK_EVAL_BREAKER();
DISPATCH();
}
// Eventually this should be the only occurrence of this code.
assert(tstate->interp->eval_frame == NULL);
stack_pointer += -2 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
_PyFrame_SetStackPointer(frame, stack_pointer);
new_frame->previous = frame;
CALL_STAT_INC(inlined_py_calls);
// The frame has stolen all the arguments from the stack,
// so there is no need to clean them up.
stack_pointer += -2 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
if (new_frame == NULL) {
goto error;
}
}
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
CHECK_EVAL_BREAKER();
DISPATCH();
}
}
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
CHECK_EVAL_BREAKER();
DISPATCH();
}
}
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
CHECK_EVAL_BREAKER();
DISPATCH();
}
}
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
CHECK_EVAL_BREAKER();
DISPATCH();
}
if (result == NULL) { stack_pointer += -3 - (oparg & 1); goto error; }
stack_pointer[-3 - (oparg & 1)] = result;
stack_pointer += -2 - (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
CHECK_EVAL_BREAKER();
DISPATCH();
}
if (res == NULL) goto pop_2_error;
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
Py_DECREF(callable);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
if (res == NULL) { stack_pointer += -3 - oparg; goto error; }
stack_pointer[-3 - oparg] = res;
stack_pointer += -2 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
CHECK_EVAL_BREAKER();
DISPATCH();
}
Py_DECREF(arg);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
CHECK_EVAL_BREAKER();
DISPATCH();
}
}
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
CHECK_EVAL_BREAKER();
DISPATCH();
}
}
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
CHECK_EVAL_BREAKER();
DISPATCH();
}
}
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
CHECK_EVAL_BREAKER();
DISPATCH();
}
}
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
CHECK_EVAL_BREAKER();
DISPATCH();
}
// Eventually this should be the only occurrence of this code.
assert(tstate->interp->eval_frame == NULL);
stack_pointer += -2 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
_PyFrame_SetStackPointer(frame, stack_pointer);
new_frame->previous = frame;
CALL_STAT_INC(inlined_py_calls);
// The frame has stolen all the arguments from the stack,
// so there is no need to clean them up.
stack_pointer += -2 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
if (new_frame == NULL) {
goto error;
}
}
stack_pointer[-3] = res;
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
CHECK_EVAL_BREAKER();
DISPATCH();
}
}
stack_pointer[-3] = res;
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
CHECK_EVAL_BREAKER();
DISPATCH();
}
Py_DECREF(arg);
stack_pointer[-3] = res;
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
stack_pointer[-3] = none;
stack_pointer[-2] = value;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[-2] = b;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
b = (res ^ oparg) ? Py_True : Py_False;
stack_pointer[-2] = b;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
b = (res ^ oparg) ? Py_True : Py_False;
stack_pointer[-2] = b;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
top = Py_NewRef(bottom);
stack_pointer[0] = top;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
Py_DECREF(owner);
if (err) goto pop_1_error;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
Py_DECREF(sub);
if (err) goto pop_2_error;
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
Py_DECREF(update);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
Py_DECREF(update);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
goto exception_unwind;
}
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
value = stack_pointer[-1];
Py_DECREF(value);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
Py_DECREF(receiver);
stack_pointer[-2] = value;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
goto error;
}
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
if (res == NULL) goto pop_2_error;
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[0] = next;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[0] = next;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[0] = next;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[0] = next;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[0] = awaitable;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
if (len_o == NULL) goto error;
stack_pointer[0] = len_o;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
if (res == NULL) goto error;
stack_pointer[0] = res;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
if (res == NULL) goto pop_2_error;
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
Py_DECREF(value);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
Py_DECREF(receiver);
stack_pointer[-2] = value;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
b = res ? Py_True : Py_False;
stack_pointer[-2] = b;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
list = stack_pointer[-2 - (oparg-1)];
if (_PyList_AppendTakeRef((PyListObject *)list, v) < 0) goto pop_1_error;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
assert(Py_IsNone(none_val));
Py_DECREF(iterable);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
stack_pointer[-1] = attr;
if (oparg & 1) stack_pointer[0] = self_or_null;
stack_pointer += (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
stack_pointer[-1] = attr;
if (oparg & 1) stack_pointer[0] = null;
stack_pointer += (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
stack_pointer[-1] = attr;
if (oparg & 1) stack_pointer[0] = null;
stack_pointer += (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
stack_pointer[-1] = attr;
stack_pointer[0] = self;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
stack_pointer[-1] = attr;
stack_pointer[0] = self;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
stack_pointer[-1] = attr;
stack_pointer[0] = self;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
stack_pointer[-1] = attr;
if (oparg & 1) stack_pointer[0] = null;
stack_pointer += (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
stack_pointer[-1] = attr;
if (oparg & 1) stack_pointer[0] = null;
stack_pointer += (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
stack_pointer[-1] = attr;
if (oparg & 1) stack_pointer[0] = null;
stack_pointer += (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[0] = bc;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
Py_INCREF(value);
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
Py_INCREF(value);
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
GETLOCAL(oparg) = NULL;
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
Py_INCREF(value);
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
stack_pointer[0] = value1;
stack_pointer[1] = value2;
stack_pointer += 2;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
stack_pointer[0] = res;
if (oparg & 1) stack_pointer[1] = null;
stack_pointer += 1 + (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
stack_pointer[0] = res;
if (oparg & 1) stack_pointer[1] = null;
stack_pointer += 1 + (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
stack_pointer[0] = res;
if (oparg & 1) stack_pointer[1] = null;
stack_pointer += 1 + (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
Py_INCREF(locals);
stack_pointer[0] = locals;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[0] = v;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
stack_pointer[-1] = attr;
stack_pointer[0] = self_or_null;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
stack_pointer[-3] = attr;
if (oparg & 1) stack_pointer[-2] = null;
stack_pointer += -2 + (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
if (attr == NULL) goto pop_3_error;
stack_pointer[-3] = attr;
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
stack_pointer[-3] = attr;
stack_pointer[-2] = self_or_null;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
// Do not DECREF INPUTS because the function steals the references
if (_PyDict_SetItem_Take2((PyDictObject *)dict, key, value) != 0) goto pop_2_error;
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[-3] = attrs;
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
if (values_or_none == NULL) goto error;
stack_pointer[0] = values_or_none;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
res = match ? Py_True : Py_False;
stack_pointer[0] = res;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
res = match ? Py_True : Py_False;
stack_pointer[0] = res;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
_PyErr_StackItem *exc_info = tstate->exc_info;
Py_XSETREF(exc_info->exc_value, exc_value == Py_None ? NULL : exc_value);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
#endif
JUMPBY(oparg * flag);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
JUMPBY(oparg * flag);
}
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
JUMPBY(oparg * flag);
}
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
#endif
JUMPBY(oparg * flag);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
value = stack_pointer[-1];
Py_DECREF(value);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
stack_pointer[-1] = prev_exc;
stack_pointer[0] = new_exc;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
res = NULL;
stack_pointer[0] = res;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[0] = res;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
LLTRACE_RESUME_FRAME();
stack_pointer[0] = res;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
assert(frame != &entry_frame);
#endif
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
_PyFrame_SetStackPointer(frame, stack_pointer);
assert(EMPTY());
_Py_LeaveRecursiveCallPy(tstate);
LLTRACE_RESUME_FRAME();
stack_pointer[0] = res;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
Py_DECREF(v);
if (err) goto pop_1_error;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
stack_pointer[-2] = func;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
Py_DECREF(iterable);
if (err < 0) goto pop_1_error;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
if (err) goto pop_2_error;
}
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
Py_DECREF(owner);
}
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
Py_DECREF(owner);
}
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
Py_DECREF(owner);
}
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
PyCellObject *cell = (PyCellObject *)GETLOCAL(oparg);
PyCell_SetTakeRef(cell, v);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
value = stack_pointer[-1];
SETLOCAL(oparg, value);
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
SETLOCAL(oparg1, value1);
SETLOCAL(oparg2, value2);
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
Py_DECREF(v);
if (err) goto pop_1_error;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
Py_DECREF(v);
if (err) goto pop_1_error;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
Py_DECREF(container);
if (err) goto pop_4_error;
stack_pointer += -4;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
if (err) goto pop_3_error;
}
stack_pointer += -3;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
Py_DECREF(dict);
if (err) goto pop_3_error;
stack_pointer += -3;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
_Py_DECREF_SPECIALIZED(sub, (destructor)PyObject_Free);
Py_DECREF(list);
stack_pointer += -3;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
Py_DECREF(seq);
if (res == 0) goto pop_1_error;
stack_pointer += (oparg >> 8) + (oparg & 0xFF);
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
if (res == 0) goto pop_1_error;
}
stack_pointer += -1 + oparg;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
Py_DECREF(seq);
stack_pointer += -1 + oparg;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
}
Py_DECREF(seq);
stack_pointer += -1 + oparg;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
stack_pointer[-1] = val1;
stack_pointer[0] = val0;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
if (res == NULL) goto error;
stack_pointer[0] = res;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
assert(oparg == 0 || oparg == 1);
gen->gi_frame_state = FRAME_SUSPENDED + oparg;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
_PyFrame_SetStackPointer(frame, stack_pointer);
tstate->exc_info = gen->gi_exc_state.previous_item;
gen->gi_exc_state.previous_item = NULL;
LLTRACE_RESUME_FRAME();
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
#undef TIER_ONE
#define STACK_LEVEL() ((int)(stack_pointer - ctx->frame->stack))
+#define STACK_SIZE() ((int)(ctx->frame->stack_len))
+
+#define WITHIN_STACK_BOUNDS() \
+ (STACK_LEVEL() >= 0 && STACK_LEVEL() <= STACK_SIZE())
+
#define GETLOCAL(idx) ((ctx->frame->locals[idx]))
}
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
value = GETLOCAL(oparg);
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
GETLOCAL(oparg) = temp;
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
value = sym_new_const(ctx, val);
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
value = stack_pointer[-1];
GETLOCAL(oparg) = value;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _POP_TOP: {
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_null(ctx);
stack_pointer[0] = res;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
value = sym_new_not_null(ctx);
stack_pointer[-2] = value;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[-3] = res;
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _STORE_SLICE: {
stack_pointer += -4;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _LIST_APPEND: {
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _SET_ADD: {
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _STORE_SUBSCR: {
stack_pointer += -3;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _STORE_SUBSCR_LIST_INT: {
stack_pointer += -3;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _STORE_SUBSCR_DICT: {
stack_pointer += -3;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _DELETE_SUBSCR: {
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
_Py_UopsSymbol *res;
retval = stack_pointer[-1];
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
ctx->frame->stack_pointer = stack_pointer;
frame_pop(ctx);
stack_pointer = ctx->frame->stack_pointer;
}
stack_pointer[0] = res;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
awaitable = sym_new_not_null(ctx);
stack_pointer[0] = awaitable;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _POP_EXCEPT: {
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
value = sym_new_not_null(ctx);
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
bc = sym_new_not_null(ctx);
stack_pointer[0] = bc;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _STORE_NAME: {
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
values[i] = sym_new_unknown(ctx);
}
stack_pointer += -1 + oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = val1;
stack_pointer[0] = val0;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
values[_i] = sym_new_not_null(ctx);
}
stack_pointer += -1 + oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
values[_i] = sym_new_not_null(ctx);
}
stack_pointer += -1 + oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
values[i] = sym_new_unknown(ctx);
}
stack_pointer += (oparg >> 8) + (oparg & 0xFF);
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _STORE_ATTR: {
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _DELETE_ATTR: {
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _STORE_GLOBAL: {
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
locals = sym_new_not_null(ctx);
stack_pointer[0] = locals;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[0] = res;
if (oparg & 1) stack_pointer[1] = null;
stack_pointer += 1 + (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[0] = res;
if (oparg & 1) stack_pointer[1] = null;
stack_pointer += 1 + (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[0] = res;
if (oparg & 1) stack_pointer[1] = null;
stack_pointer += 1 + (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
break;
}
value = sym_new_not_null(ctx);
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _STORE_DEREF: {
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
str = sym_new_not_null(ctx);
stack_pointer[-oparg] = str;
stack_pointer += 1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
tup = sym_new_not_null(ctx);
stack_pointer[-oparg] = tup;
stack_pointer += 1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
list = sym_new_not_null(ctx);
stack_pointer[-oparg] = list;
stack_pointer += 1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _LIST_EXTEND: {
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _SET_UPDATE: {
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
map = sym_new_not_null(ctx);
stack_pointer[-oparg*2] = map;
stack_pointer += 1 - oparg*2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
map = sym_new_not_null(ctx);
stack_pointer[-1 - oparg] = map;
stack_pointer += -oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _DICT_UPDATE: {
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _DICT_MERGE: {
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _MAP_ADD: {
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
attr = sym_new_not_null(ctx);
stack_pointer[-3] = attr;
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-3] = attr;
stack_pointer[-2] = self_or_null;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = attr;
if (oparg & 1) stack_pointer[0] = self_or_null;
stack_pointer += (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = attr;
if (oparg & 1) stack_pointer[0] = null;
stack_pointer += (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = attr;
if (oparg & 1) stack_pointer[0] = null;
stack_pointer += (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = attr;
if (oparg & 1) stack_pointer[0] = null;
stack_pointer += (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = attr;
if (oparg & 1) stack_pointer[0] = null;
stack_pointer += (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = attr;
if (oparg & 1) stack_pointer[0] = null;
stack_pointer += (oparg & 1);
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _STORE_ATTR_INSTANCE_VALUE: {
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _STORE_ATTR_WITH_HINT: {
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _STORE_ATTR_SLOT: {
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_type(ctx, &PyBool_Type);
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_type(ctx, &PyBool_Type);
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_type(ctx, &PyBool_Type);
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_type(ctx, &PyBool_Type);
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_type(ctx, &PyBool_Type);
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
b = sym_new_not_null(ctx);
stack_pointer[-2] = b;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
b = sym_new_not_null(ctx);
stack_pointer[-2] = b;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
len_o = sym_new_not_null(ctx);
stack_pointer[0] = len_o;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
attrs = sym_new_not_null(ctx);
stack_pointer[-3] = attrs;
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[0] = res;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[0] = res;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
values_or_none = sym_new_not_null(ctx);
stack_pointer[0] = values_or_none;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
next = sym_new_not_null(ctx);
stack_pointer[0] = next;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
next = sym_new_not_null(ctx);
stack_pointer[0] = next;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
next = sym_new_not_null(ctx);
stack_pointer[0] = next;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
(void)iter;
stack_pointer[0] = next;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = attr;
stack_pointer[0] = self_or_null;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[0] = res;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = prev_exc;
stack_pointer[0] = new_exc;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = attr;
stack_pointer[0] = self;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = attr;
stack_pointer[0] = self;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[-1] = attr;
stack_pointer[0] = self;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
ctx->done = true;
stack_pointer[-2 - oparg] = (_Py_UopsSymbol *)new_frame;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[-2 - oparg] = (_Py_UopsSymbol *)new_frame;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
_Py_UOpsAbstractFrame *new_frame;
new_frame = (_Py_UOpsAbstractFrame *)stack_pointer[-1];
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
ctx->frame->stack_pointer = stack_pointer;
ctx->frame = new_frame;
ctx->curr_frame_depth++;
res = sym_new_not_null(ctx);
stack_pointer[-3] = res;
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[-3] = res;
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[-3] = res;
stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _EXIT_INIT_CHECK: {
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
func = sym_new_not_null(ctx);
stack_pointer[-2] = func;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
}
stack_pointer[0] = res;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
slice = sym_new_not_null(ctx);
stack_pointer[-2 - ((oparg == 3) ? 1 : 0)] = slice;
stack_pointer += -1 - ((oparg == 3) ? 1 : 0);
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_not_null(ctx);
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
top = bottom;
stack_pointer[0] = top;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
res = sym_new_unknown(ctx);
stack_pointer[-2] = res;
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
eliminate_pop_guard(this_instr, value != Py_True);
}
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
eliminate_pop_guard(this_instr, value != Py_False);
}
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
eliminate_pop_guard(this_instr, true);
}
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
eliminate_pop_guard(this_instr, false);
}
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
value = sym_new_const(ctx, ptr);
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
value = sym_new_const(ctx, ptr);
stack_pointer[0] = value;
stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[0] = value;
stack_pointer[1] = null;
stack_pointer += 2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
stack_pointer[0] = value;
stack_pointer[1] = null;
stack_pointer += 2;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _INTERNAL_INCREMENT_OPT_COUNTER: {
stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
case _ERROR_POP_N: {
stack_pointer += -oparg;
+ assert(WITHIN_STACK_BOUNDS());
break;
}
number = self.base_offset.to_c()
if number != "0":
out.emit(f"stack_pointer += {number};\n")
+ out.emit("assert(WITHIN_STACK_BOUNDS());\n")
self.variables = []
self.base_offset.clear()
self.top_offset.clear()
#undef JUMP_TO_ERROR
#define JUMP_TO_ERROR() PATCH_JUMP(_JIT_ERROR_TARGET)
+#undef WITHIN_STACK_BOUNDS
+#define WITHIN_STACK_BOUNDS() 1
+
_Py_CODEUNIT *
_JIT_ENTRY(_PyInterpreterFrame *frame, PyObject **stack_pointer, PyThreadState *tstate)
{