Browse Source

Fix top slot calculation for snapshots with continuations.

Mike Pall 11 years ago
parent
commit
111b2e8711
1 changed files with 3 additions and 2 deletions
  1. 3 2
      src/lj_snap.c

+ 3 - 2
src/lj_snap.c

@@ -104,8 +104,6 @@ static BCReg snapshot_framelinks(jit_State *J, SnapEntry *map)
     if (frame_islua(frame)) {
     if (frame_islua(frame)) {
       map[f++] = SNAP_MKPC(frame_pc(frame));
       map[f++] = SNAP_MKPC(frame_pc(frame));
       frame = frame_prevl(frame);
       frame = frame_prevl(frame);
-      if (frame + funcproto(frame_func(frame))->framesize > ftop)
-	ftop = frame + funcproto(frame_func(frame))->framesize;
     } else if (frame_iscont(frame)) {
     } else if (frame_iscont(frame)) {
       map[f++] = SNAP_MKFTSZ(frame_ftsz(frame));
       map[f++] = SNAP_MKFTSZ(frame_ftsz(frame));
       map[f++] = SNAP_MKPC(frame_contpc(frame));
       map[f++] = SNAP_MKPC(frame_contpc(frame));
@@ -114,7 +112,10 @@ static BCReg snapshot_framelinks(jit_State *J, SnapEntry *map)
       lua_assert(!frame_isc(frame));
       lua_assert(!frame_isc(frame));
       map[f++] = SNAP_MKFTSZ(frame_ftsz(frame));
       map[f++] = SNAP_MKFTSZ(frame_ftsz(frame));
       frame = frame_prevd(frame);
       frame = frame_prevd(frame);
+      continue;
     }
     }
+    if (frame + funcproto(frame_func(frame))->framesize > ftop)
+      ftop = frame + funcproto(frame_func(frame))->framesize;
   }
   }
   lua_assert(f == (MSize)(1 + J->framedepth));
   lua_assert(f == (MSize)(1 + J->framedepth));
   return (BCReg)(ftop - lim);
   return (BCReg)(ftop - lim);