if (sym_is_null(value)) {
ctx->done = true;
}
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = value;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _LOAD_FAST: {
JitOptRef value;
value = GETLOCAL(oparg);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = value;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _LOAD_FAST_BORROW: {
JitOptRef value;
value = PyJitRef_Borrow(GETLOCAL(oparg));
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = value;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
value = GETLOCAL(oparg);
JitOptRef temp = sym_new_null(ctx);
GETLOCAL(oparg) = temp;
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = value;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
PyObject *val = PyTuple_GET_ITEM(co->co_consts, oparg);
REPLACE_OP(this_instr, _LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)val);
value = PyJitRef_Borrow(sym_new_const(ctx, val));
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = value;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
assert(_Py_IsImmortal(val));
REPLACE_OP(this_instr, _LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)val);
value = PyJitRef_Borrow(sym_new_const(ctx, val));
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = value;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
JitOptRef value;
value = stack_pointer[-1];
GETLOCAL(oparg) = value;
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
else if (typ == &PyUnicode_Type) {
REPLACE_OP(this_instr, _POP_TOP_UNICODE, 0, 0);
}
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
case _POP_TOP_NOP: {
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
case _POP_TOP_INT: {
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
case _POP_TOP_FLOAT: {
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
case _POP_TOP_UNICODE: {
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
case _POP_TWO: {
+ CHECK_STACK_BOUNDS(-2);
stack_pointer += -2;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
case _PUSH_NULL: {
JitOptRef res;
res = sym_new_null(ctx);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = res;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
}
case _END_FOR: {
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
case _POP_ITER: {
+ CHECK_STACK_BOUNDS(-2);
stack_pointer += -2;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
case _END_SEND: {
JitOptRef val;
val = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = val;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
REPLACE_OP(this_instr, _POP_TWO_LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)result);
}
}
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
res = sym_new_compact_int(ctx);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
REPLACE_OP(this_instr, _POP_TWO_LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)result);
}
}
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
res = sym_new_compact_int(ctx);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
REPLACE_OP(this_instr, _POP_TWO_LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)result);
}
}
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
res = sym_new_compact_int(ctx);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
REPLACE_OP(this_instr, _POP_TWO_LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)result);
}
}
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
if (PyJitRef_IsBorrowed(left) && PyJitRef_IsBorrowed(right)) {
REPLACE_OP(this_instr, op_without_decref_inputs[opcode], oparg, 0);
}
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
REPLACE_OP(this_instr, _POP_TWO_LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)result);
}
}
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
if (PyJitRef_IsBorrowed(left) && PyJitRef_IsBorrowed(right)) {
REPLACE_OP(this_instr, op_without_decref_inputs[opcode], oparg, 0);
}
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
REPLACE_OP(this_instr, _POP_TWO_LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)result);
}
}
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
if (PyJitRef_IsBorrowed(left) && PyJitRef_IsBorrowed(right)) {
REPLACE_OP(this_instr, op_without_decref_inputs[opcode], oparg, 0);
}
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
REPLACE_OP(this_instr, _POP_TWO_LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)result);
}
}
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
res = sym_new_type(ctx, &PyUnicode_Type);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
res = sym_new_type(ctx, &PyUnicode_Type);
}
GETLOCAL(this_instr->operand0) = res;
+ CHECK_STACK_BOUNDS(-2);
stack_pointer += -2;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
case _BINARY_OP_EXTEND: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
else {
res = sym_new_not_null(ctx);
}
+ CHECK_STACK_BOUNDS(-2);
stack_pointer[-3] = res;
stack_pointer += -2;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
}
case _STORE_SLICE: {
+ CHECK_STACK_BOUNDS(-4);
stack_pointer += -4;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
case _BINARY_OP_SUBSCR_LIST_INT: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _BINARY_OP_SUBSCR_LIST_SLICE: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _BINARY_OP_SUBSCR_STR_INT: {
JitOptRef res;
res = sym_new_type(ctx, &PyUnicode_Type);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
else {
res = sym_new_not_null(ctx);
}
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _BINARY_OP_SUBSCR_DICT: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _BINARY_OP_SUBSCR_CHECK_FUNC: {
JitOptRef getitem;
getitem = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = getitem;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
JitOptRef new_frame;
new_frame = PyJitRef_NULL;
ctx->done = true;
+ CHECK_STACK_BOUNDS(-2);
stack_pointer[-3] = new_frame;
stack_pointer += -2;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
}
case _LIST_APPEND: {
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
case _SET_ADD: {
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
case _STORE_SUBSCR: {
+ CHECK_STACK_BOUNDS(-3);
stack_pointer += -3;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
case _STORE_SUBSCR_LIST_INT: {
+ CHECK_STACK_BOUNDS(-3);
stack_pointer += -3;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
case _STORE_SUBSCR_DICT: {
+ CHECK_STACK_BOUNDS(-3);
stack_pointer += -3;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
case _DELETE_SUBSCR: {
+ CHECK_STACK_BOUNDS(-2);
stack_pointer += -2;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
case _CALL_INTRINSIC_2: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
JitOptRef res;
retval = stack_pointer[-1];
JitOptRef temp = PyJitRef_StripReferenceInfo(retval);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
ctx->frame->stack_pointer = stack_pointer;
}
stack_pointer = ctx->frame->stack_pointer;
res = temp;
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = res;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _GET_ANEXT: {
JitOptRef awaitable;
awaitable = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = awaitable;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
JitOptRef value;
retval = stack_pointer[-1];
JitOptRef temp = PyJitRef_StripReferenceInfo(retval);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
ctx->frame->stack_pointer = stack_pointer;
}
stack_pointer = ctx->frame->stack_pointer;
value = temp;
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = value;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
}
case _POP_EXCEPT: {
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
case _LOAD_COMMON_CONSTANT: {
JitOptRef value;
value = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = value;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _LOAD_BUILD_CLASS: {
JitOptRef bc;
bc = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = bc;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
}
case _STORE_NAME: {
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
for (int i = 0; i < oparg; i++) {
values[i] = sym_new_unknown(ctx);
}
+ CHECK_STACK_BOUNDS(-1 + oparg);
stack_pointer += -1 + oparg;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
seq = stack_pointer[-1];
val0 = sym_tuple_getitem(ctx, seq, 0);
val1 = sym_tuple_getitem(ctx, seq, 1);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[-1] = val1;
stack_pointer[0] = val0;
stack_pointer += 1;
for (int i = 0; i < oparg; i++) {
values[i] = sym_tuple_getitem(ctx, seq, oparg - i - 1);
}
+ CHECK_STACK_BOUNDS(-1 + oparg);
stack_pointer += -1 + oparg;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
for (int _i = oparg; --_i >= 0;) {
values[_i] = sym_new_not_null(ctx);
}
+ CHECK_STACK_BOUNDS(-1 + oparg);
stack_pointer += -1 + oparg;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
for (int i = 0; i < totalargs; i++) {
values[i] = sym_new_unknown(ctx);
}
+ CHECK_STACK_BOUNDS((oparg & 0xFF) + (oparg >> 8));
stack_pointer += (oparg & 0xFF) + (oparg >> 8);
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
case _STORE_ATTR: {
+ CHECK_STACK_BOUNDS(-2);
stack_pointer += -2;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
case _DELETE_ATTR: {
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
case _STORE_GLOBAL: {
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
case _LOAD_LOCALS: {
JitOptRef locals;
locals = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = locals;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _LOAD_NAME: {
JitOptRef v;
v = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = v;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
JitOptRef *res;
res = &stack_pointer[0];
res[0] = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(1);
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
else {
REPLACE_OP(this_instr, _NOP, 0, 0);
}
+ CHECK_STACK_BOUNDS((oparg & 1));
stack_pointer += (oparg & 1);
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
else {
res = sym_new_const(ctx, cnst);
}
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = res;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
else {
res = sym_new_const(ctx, cnst);
}
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = res;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _LOAD_DEREF: {
JitOptRef value;
value = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = value;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
}
case _STORE_DEREF: {
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
case _BUILD_STRING: {
JitOptRef str;
str = sym_new_type(ctx, &PyUnicode_Type);
+ CHECK_STACK_BOUNDS(1 - oparg);
stack_pointer[-oparg] = str;
stack_pointer += 1 - oparg;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _BUILD_INTERPOLATION: {
JitOptRef interpolation;
interpolation = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1 - (oparg & 1));
stack_pointer[-2 - (oparg & 1)] = interpolation;
stack_pointer += -1 - (oparg & 1);
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _BUILD_TEMPLATE: {
JitOptRef template;
template = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = template;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
JitOptRef tup;
values = &stack_pointer[-oparg];
tup = sym_new_tuple(ctx, oparg, values);
+ CHECK_STACK_BOUNDS(1 - oparg);
stack_pointer[-oparg] = tup;
stack_pointer += 1 - oparg;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _BUILD_LIST: {
JitOptRef list;
list = sym_new_type(ctx, &PyList_Type);
+ CHECK_STACK_BOUNDS(1 - oparg);
stack_pointer[-oparg] = list;
stack_pointer += 1 - oparg;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
}
case _LIST_EXTEND: {
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
case _SET_UPDATE: {
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
case _BUILD_SET: {
JitOptRef set;
set = sym_new_type(ctx, &PySet_Type);
+ CHECK_STACK_BOUNDS(1 - oparg);
stack_pointer[-oparg] = set;
stack_pointer += 1 - oparg;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _BUILD_MAP: {
JitOptRef map;
map = sym_new_type(ctx, &PyDict_Type);
+ CHECK_STACK_BOUNDS(1 - oparg*2);
stack_pointer[-oparg*2] = map;
stack_pointer += 1 - oparg*2;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
}
case _DICT_UPDATE: {
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
case _DICT_MERGE: {
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
case _MAP_ADD: {
+ CHECK_STACK_BOUNDS(-2);
stack_pointer += -2;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
case _LOAD_SUPER_ATTR_ATTR: {
JitOptRef attr_st;
attr_st = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-2);
stack_pointer[-3] = attr_st;
stack_pointer += -2;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
JitOptRef self_or_null;
attr = sym_new_not_null(ctx);
self_or_null = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-3] = attr;
stack_pointer[-2] = self_or_null;
stack_pointer += -1;
if (oparg & 1) {
self_or_null[0] = sym_new_unknown(ctx);
}
+ CHECK_STACK_BOUNDS((oparg&1));
stack_pointer += (oparg&1);
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
case _STORE_ATTR_INSTANCE_VALUE: {
+ CHECK_STACK_BOUNDS(-2);
stack_pointer += -2;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
case _STORE_ATTR_WITH_HINT: {
+ CHECK_STACK_BOUNDS(-2);
stack_pointer += -2;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
case _STORE_ATTR_SLOT: {
+ CHECK_STACK_BOUNDS(-2);
stack_pointer += -2;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
REPLACE_OP(this_instr, _POP_TWO_LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)result);
}
}
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
else {
res = _Py_uop_sym_new_not_null(ctx);
}
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
REPLACE_OP(this_instr, _POP_TWO_LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)result);
}
}
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
res = sym_new_type(ctx, &PyBool_Type);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
REPLACE_OP(this_instr, _POP_TWO_LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)result);
}
}
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
res = sym_new_type(ctx, &PyBool_Type);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
REPLACE_OP(this_instr, _POP_TWO_LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)result);
}
}
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
res = sym_new_type(ctx, &PyBool_Type);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _IS_OP: {
JitOptRef b;
b = sym_new_type(ctx, &PyBool_Type);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = b;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
REPLACE_OP(this_instr, _POP_TWO_LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)result);
}
}
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = b;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
b = sym_new_type(ctx, &PyBool_Type);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = b;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _CONTAINS_OP_SET: {
JitOptRef b;
b = sym_new_type(ctx, &PyBool_Type);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = b;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _CONTAINS_OP_DICT: {
JitOptRef b;
b = sym_new_type(ctx, &PyBool_Type);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = b;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _IMPORT_NAME: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _IMPORT_FROM: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = res;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
REPLACE_OP(this_instr, _LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)temp);
}
len = sym_new_const(ctx, temp);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = len;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
Py_DECREF(temp);
stack_pointer += -1;
}
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = len;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _MATCH_CLASS: {
JitOptRef attrs;
attrs = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-2);
stack_pointer[-3] = attrs;
stack_pointer += -2;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _MATCH_MAPPING: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = res;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _MATCH_SEQUENCE: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = res;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _MATCH_KEYS: {
JitOptRef values_or_none;
values_or_none = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = values_or_none;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
iter = sym_new_not_null(ctx);
index_or_null = sym_new_unknown(ctx);
}
+ CHECK_STACK_BOUNDS(1);
stack_pointer[-1] = iter;
stack_pointer[0] = index_or_null;
stack_pointer += 1;
case _FOR_ITER_TIER_TWO: {
JitOptRef next;
next = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = next;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _ITER_NEXT_LIST_TIER_TWO: {
JitOptRef next;
next = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = next;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _ITER_NEXT_TUPLE: {
JitOptRef next;
next = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = next;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _ITER_NEXT_RANGE: {
JitOptRef next;
next = sym_new_type(ctx, &PyLong_Type);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = next;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
JitOptRef gen_frame;
gen_frame = PyJitRef_NULL;
ctx->done = true;
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = gen_frame;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
method_and_self = &stack_pointer[-1];
method_and_self[0] = sym_new_null(ctx);
method_and_self[1] = self;
+ CHECK_STACK_BOUNDS(1);
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
case _WITH_EXCEPT_START: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = res;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
JitOptRef new_exc;
prev_exc = sym_new_not_null(ctx);
new_exc = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[-1] = prev_exc;
stack_pointer[0] = new_exc;
stack_pointer += 1;
_LOAD_CONST_UNDER_INLINE_BORROW,
_LOAD_CONST_UNDER_INLINE);
self = owner;
+ CHECK_STACK_BOUNDS(1);
stack_pointer[-1] = attr;
stack_pointer[0] = self;
stack_pointer += 1;
_LOAD_CONST_UNDER_INLINE_BORROW,
_LOAD_CONST_UNDER_INLINE);
self = owner;
+ CHECK_STACK_BOUNDS(1);
stack_pointer[-1] = attr;
stack_pointer[0] = self;
stack_pointer += 1;
_LOAD_CONST_UNDER_INLINE_BORROW,
_LOAD_CONST_UNDER_INLINE);
self = owner;
+ CHECK_STACK_BOUNDS(1);
stack_pointer[-1] = attr;
stack_pointer[0] = self;
stack_pointer += 1;
break;
}
new_frame = PyJitRef_Wrap((JitOptSymbol *)frame_new(ctx, co, 0, NULL, 0));
+ CHECK_STACK_BOUNDS(-1 - oparg);
stack_pointer[-2 - oparg] = new_frame;
stack_pointer += -1 - oparg;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _CALL_NON_PY_GENERAL: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1 - oparg);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
} else {
new_frame = PyJitRef_Wrap((JitOptSymbol *)frame_new(ctx, co, 0, NULL, 0));
}
+ CHECK_STACK_BOUNDS(-1 - oparg);
stack_pointer[-2 - oparg] = new_frame;
stack_pointer += -1 - oparg;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _PUSH_FRAME: {
JitOptRef new_frame;
new_frame = stack_pointer[-1];
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
if (!CURRENT_FRAME_IS_INIT_SHIM()) {
else {
res = sym_new_not_null(ctx);
}
+ CHECK_STACK_BOUNDS(-2);
stack_pointer[-3] = res;
stack_pointer += -2;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
else {
res = sym_new_type(ctx, &PyUnicode_Type);
}
+ CHECK_STACK_BOUNDS(-2);
stack_pointer[-3] = res;
stack_pointer += -2;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
else {
res = sym_new_type(ctx, &PyTuple_Type);
}
+ CHECK_STACK_BOUNDS(-2);
stack_pointer[-3] = res;
stack_pointer += -2;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
assert((this_instr + 1)->opcode == _PUSH_FRAME);
PyCodeObject *co = get_code_with_logging((this_instr + 1));
init_frame = PyJitRef_Wrap((JitOptSymbol *)frame_new(ctx, co, 0, args-1, oparg+1));
+ CHECK_STACK_BOUNDS(-1 - oparg);
stack_pointer[-2 - oparg] = init_frame;
stack_pointer += -1 - oparg;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
}
case _EXIT_INIT_CHECK: {
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
case _CALL_BUILTIN_CLASS: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1 - oparg);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _CALL_BUILTIN_O: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1 - oparg);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _CALL_BUILTIN_FAST: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1 - oparg);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _CALL_BUILTIN_FAST_WITH_KEYWORDS: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1 - oparg);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
0, (uintptr_t)temp);
}
res = sym_new_const(ctx, temp);
+ CHECK_STACK_BOUNDS(-2);
stack_pointer[-3] = res;
stack_pointer += -2;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
Py_DECREF(temp);
stack_pointer += 2;
}
+ CHECK_STACK_BOUNDS(-2);
stack_pointer[-3] = res;
stack_pointer += -2;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
sym_set_const(res, out);
REPLACE_OP(this_instr, _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)out);
}
+ CHECK_STACK_BOUNDS(-3);
stack_pointer[-4] = res;
stack_pointer += -3;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
}
case _CALL_LIST_APPEND: {
+ CHECK_STACK_BOUNDS(-3);
stack_pointer += -3;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
case _CALL_METHOD_DESCRIPTOR_O: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1 - oparg);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1 - oparg);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _CALL_METHOD_DESCRIPTOR_NOARGS: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1 - oparg);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _CALL_METHOD_DESCRIPTOR_FAST: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1 - oparg);
stack_pointer[-2 - oparg] = res;
stack_pointer += -1 - oparg;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
new_frame = PyJitRef_Wrap((JitOptSymbol *)frame_new(ctx, co, 0, NULL, 0));
+ CHECK_STACK_BOUNDS(-2 - oparg);
stack_pointer[-3 - oparg] = new_frame;
stack_pointer += -2 - oparg;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _CALL_KW_NON_PY: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-2 - oparg);
stack_pointer[-3 - oparg] = res;
stack_pointer += -2 - oparg;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _SET_FUNCTION_ATTRIBUTE: {
JitOptRef func_out;
func_out = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = func_out;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
}
stack_pointer = ctx->frame->stack_pointer;
res = sym_new_unknown(ctx);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = res;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _BUILD_SLICE: {
JitOptRef slice;
slice = sym_new_type(ctx, &PySlice_Type);
+ CHECK_STACK_BOUNDS(1 - oparg);
stack_pointer[-oparg] = slice;
stack_pointer += 1 - oparg;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
case _FORMAT_WITH_SPEC: {
JitOptRef res;
res = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
bottom = stack_pointer[-1 - (oparg-1)];
assert(oparg > 0);
top = bottom;
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = top;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
REPLACE_OP(this_instr, _POP_TWO_LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)result);
}
}
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
else {
res = sym_new_type(ctx, &PyFloat_Type);
}
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = res;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
eliminate_pop_guard(this_instr, value != Py_True);
}
sym_set_const(flag, Py_True);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
eliminate_pop_guard(this_instr, value != Py_False);
}
sym_set_const(flag, Py_False);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
eliminate_pop_guard(this_instr, true);
}
sym_set_const(val, Py_None);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
assert(!sym_matches_type(val, &_PyNone_Type));
eliminate_pop_guard(this_instr, false);
}
+ CHECK_STACK_BOUNDS(-1);
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
JitOptRef value;
PyObject *ptr = (PyObject *)this_instr->operand0;
value = sym_new_const(ctx, ptr);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = value;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
JitOptRef value;
PyObject *ptr = (PyObject *)this_instr->operand0;
value = PyJitRef_Borrow(sym_new_const(ctx, ptr));
+ CHECK_STACK_BOUNDS(1);
stack_pointer[0] = value;
stack_pointer += 1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
}
case _POP_CALL: {
+ CHECK_STACK_BOUNDS(-2);
stack_pointer += -2;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
case _POP_CALL_ONE: {
+ CHECK_STACK_BOUNDS(-3);
stack_pointer += -3;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
}
case _POP_CALL_TWO: {
+ CHECK_STACK_BOUNDS(-4);
stack_pointer += -4;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
break;
case _POP_TWO_LOAD_CONST_INLINE_BORROW: {
JitOptRef value;
value = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = value;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
JitOptRef value;
PyObject *ptr = (PyObject *)this_instr->operand0;
value = PyJitRef_Borrow(sym_new_const(ctx, ptr));
+ CHECK_STACK_BOUNDS(-1);
stack_pointer[-2] = value;
stack_pointer += -1;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
JitOptRef value;
PyObject *ptr = (PyObject *)this_instr->operand0;
value = PyJitRef_Borrow(sym_new_const(ctx, ptr));
+ CHECK_STACK_BOUNDS(-2);
stack_pointer[-3] = value;
stack_pointer += -2;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
JitOptRef value;
PyObject *ptr = (PyObject *)this_instr->operand0;
value = PyJitRef_Borrow(sym_new_const(ctx, ptr));
+ CHECK_STACK_BOUNDS(-3);
stack_pointer[-4] = value;
stack_pointer += -3;
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
JitOptRef new;
value = sym_new_not_null(ctx);
new = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[-1] = value;
stack_pointer[0] = new;
stack_pointer += 1;
JitOptRef new;
value = sym_new_not_null(ctx);
new = sym_new_not_null(ctx);
+ CHECK_STACK_BOUNDS(1);
stack_pointer[-1] = value;
stack_pointer[0] = new;
stack_pointer += 1;