blueloveTH 11 ماه پیش
والد
کامیت
eba88e5541
1فایلهای تغییر یافته به همراه4 افزوده شده و 4 حذف شده
  1. 4 4
      src/interpreter/frame.c

+ 4 - 4
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) {
 void Frame__set_unwind_target(py_Frame* self, py_TValue* sp) {
     int iblock = Frame__iblock(self);
     int iblock = Frame__iblock(self);
+    assert(iblock >= 0);
     UnwindTarget* existing = Frame__find_unwind_target(self, iblock);
     UnwindTarget* existing = Frame__find_unwind_target(self, iblock);
     if(existing) {
     if(existing) {
         existing->offset = sp - self->p0;
         existing->offset = sp - self->p0;
@@ -121,15 +122,14 @@ void Frame__gc_mark(py_Frame* self) {
 
 
 int Frame__lineno(const py_Frame* self) {
 int Frame__lineno(const py_Frame* self) {
     int ip = self->ip;
     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;
     return 0;
 }
 }
 
 
 int Frame__iblock(const py_Frame* self) {
 int Frame__iblock(const py_Frame* self) {
     int ip = self->ip;
     int ip = self->ip;
+    if(ip < 0) return -1;
     return c11__getitem(BytecodeEx, &self->co->codes_ex, ip).iblock;
     return c11__getitem(BytecodeEx, &self->co->codes_ex, ip).iblock;
 }
 }