From 5eb916ec7b845094ef121be13027690418395814 Mon Sep 17 00:00:00 2001 From: Sergio Queiroz Date: Wed, 21 Sep 2016 16:33:14 -0300 Subject: Now captures seems to work as expected in case of a recovery --- lpvm.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lpvm.c b/lpvm.c index e8ff287..b200dce 100644 --- a/lpvm.c +++ b/lpvm.c @@ -351,17 +351,18 @@ const char *match (lua_State *L, const char *o, const char *s, const char *e, if (pstack->p == &giveup || pstack->s != NULL) { /* labeled failure: giveup or backtrack frame */ stack = pstack; s = stack->s; + if (ndyncap > 0) /* is there matchtime captures? */ + ndyncap -= removedyncap(L, capture, stack->caplevel, captop); + captop = stack->caplevel; } else { /* labeled failure: recovery frame */ if (stack == stacklimit) stack = doublestack(L, &stacklimit, ptop); stack->s = NULL; stack->p = pk; /* save return address */ stack->ls = NULL; + stack->caplevel = captop; /* TODO: necessary?? */ stack++; } - if (ndyncap > 0) /* is there matchtime captures? */ - ndyncap -= removedyncap(L, capture, pstack->caplevel, captop); - captop = pstack->caplevel; p = pstack->p; continue; } -- cgit v1.2.3-55-g6feb