diff options
-rw-r--r-- | src/lj_record.c | 1 | ||||
-rw-r--r-- | src/lj_snap.c | 9 |
2 files changed, 8 insertions, 2 deletions
diff --git a/src/lj_record.c b/src/lj_record.c index df428818..9e41ce05 100644 --- a/src/lj_record.c +++ b/src/lj_record.c | |||
@@ -211,6 +211,7 @@ static TRef getcurrf(jit_State *J) | |||
211 | { | 211 | { |
212 | if (J->base[-1-LJ_FR2]) | 212 | if (J->base[-1-LJ_FR2]) |
213 | return J->base[-1-LJ_FR2]; | 213 | return J->base[-1-LJ_FR2]; |
214 | /* Non-base frame functions ought to be loaded already. */ | ||
214 | lj_assertJ(J->baseslot == 1+LJ_FR2, "bad baseslot"); | 215 | lj_assertJ(J->baseslot == 1+LJ_FR2, "bad baseslot"); |
215 | return sloadt(J, -1-LJ_FR2, IRT_FUNC, IRSLOAD_READONLY); | 216 | return sloadt(J, -1-LJ_FR2, IRT_FUNC, IRSLOAD_READONLY); |
216 | } | 217 | } |
diff --git a/src/lj_snap.c b/src/lj_snap.c index a21894f6..36f81528 100644 --- a/src/lj_snap.c +++ b/src/lj_snap.c | |||
@@ -85,8 +85,13 @@ static MSize snapshot_slots(jit_State *J, SnapEntry *map, BCReg nslots) | |||
85 | IRIns *ir = &J->cur.ir[ref]; | 85 | IRIns *ir = &J->cur.ir[ref]; |
86 | if ((LJ_FR2 || !(sn & (SNAP_CONT|SNAP_FRAME))) && | 86 | if ((LJ_FR2 || !(sn & (SNAP_CONT|SNAP_FRAME))) && |
87 | ir->o == IR_SLOAD && ir->op1 == s && ref > retf) { | 87 | ir->o == IR_SLOAD && ir->op1 == s && ref > retf) { |
88 | /* No need to snapshot unmodified non-inherited slots. */ | 88 | /* |
89 | if (!(ir->op2 & IRSLOAD_INHERIT)) | 89 | ** No need to snapshot unmodified non-inherited slots. |
90 | ** But always snapshot the function below a frame in LJ_FR2 mode. | ||
91 | */ | ||
92 | if (!(ir->op2 & IRSLOAD_INHERIT) && | ||
93 | (!LJ_FR2 || s == 0 || s+1 == nslots || | ||
94 | !(J->slot[s+1] & (TREF_CONT|TREF_FRAME)))) | ||
90 | continue; | 95 | continue; |
91 | /* No need to restore readonly slots and unmodified non-parent slots. */ | 96 | /* No need to restore readonly slots and unmodified non-parent slots. */ |
92 | if (!(LJ_DUALNUM && (ir->op2 & IRSLOAD_CONVERT)) && | 97 | if (!(LJ_DUALNUM && (ir->op2 & IRSLOAD_CONVERT)) && |