diff --git a/src/interpreter/frame.c b/src/interpreter/frame.c index 6ba02eb6..260971c2 100644 --- a/src/interpreter/frame.c +++ b/src/interpreter/frame.c @@ -104,6 +104,7 @@ UnwindTarget* Frame__find_unwind_target(py_Frame* self, int iblock) { void Frame__set_unwind_target(py_Frame* self, py_TValue* sp) { int iblock = Frame__iblock(self); + assert(iblock >= 0); UnwindTarget* existing = Frame__find_unwind_target(self, iblock); if(existing) { existing->offset = sp - self->p0; @@ -121,15 +122,14 @@ void Frame__gc_mark(py_Frame* self) { int Frame__lineno(const py_Frame* self) { int ip = self->ip; - if(ip >= 0) - return c11__getitem(BytecodeEx, &self->co->codes_ex, ip).lineno; - if(!self->is_locals_special) - return self->co->start_line; + if(ip >= 0) return c11__getitem(BytecodeEx, &self->co->codes_ex, ip).lineno; + if(!self->is_locals_special) return self->co->start_line; return 0; } int Frame__iblock(const py_Frame* self) { int ip = self->ip; + if(ip < 0) return -1; return c11__getitem(BytecodeEx, &self->co->codes_ex, ip).iblock; }