diff options
| author | Mike Pall <mike> | 2011-05-04 21:34:21 +0200 |
|---|---|---|
| committer | Mike Pall <mike> | 2011-05-04 21:34:21 +0200 |
| commit | b4006ba9a8bf506c98d12f32c182219bb8d9cd4f (patch) | |
| tree | 2b8b12b5eca975875fa7a133d5182156191fc1d9 | |
| parent | 139175f8c48af3ceefb6838dabc0f1222fd150b1 (diff) | |
| download | luajit-b4006ba9a8bf506c98d12f32c182219bb8d9cd4f.tar.gz luajit-b4006ba9a8bf506c98d12f32c182219bb8d9cd4f.tar.bz2 luajit-b4006ba9a8bf506c98d12f32c182219bb8d9cd4f.zip | |
Fix stack slot updates for down-recursion.
| -rw-r--r-- | src/lj_record.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/lj_record.c b/src/lj_record.c index 41b2221a..472597b6 100644 --- a/src/lj_record.c +++ b/src/lj_record.c | |||
| @@ -666,7 +666,8 @@ void lj_record_ret(jit_State *J, BCReg rbase, ptrdiff_t gotresults) | |||
| 666 | GCproto *pt = funcproto(frame_func(frame - (cbase+1))); | 666 | GCproto *pt = funcproto(frame_func(frame - (cbase+1))); |
| 667 | if (J->framedepth == 0 && J->pt && frame == J->L->base - 1) { | 667 | if (J->framedepth == 0 && J->pt && frame == J->L->base - 1) { |
| 668 | if (check_downrec_unroll(J, pt)) { | 668 | if (check_downrec_unroll(J, pt)) { |
| 669 | J->maxslot = (BCReg)(rbase + nresults); | 669 | J->maxslot = (BCReg)(rbase + gotresults); |
| 670 | lj_snap_purge(J); | ||
| 670 | rec_stop(J, J->cur.traceno); /* Down-recursion. */ | 671 | rec_stop(J, J->cur.traceno); /* Down-recursion. */ |
| 671 | return; | 672 | return; |
| 672 | } | 673 | } |
