if (! NODE_IS_RECURSION(node)) {
NODE_STATUS_ADD(node, MARK1);
r = recursive_call_check(NODE_BODY(node));
- if (r != 0)
+ if (r != 0) {
NODE_STATUS_ADD(node, RECURSION);
+ MEM_STATUS_ON(env->backtrack_mem, en->m.regnum);
+ }
NODE_STATUS_REMOVE(node, MARK1);
}
if ((state & (IN_ALT | IN_NOT | IN_VAR_REPEAT | IN_MULTI_ENTRY)) != 0
|| NODE_IS_RECURSION(node)) {
MEM_STATUS_ON(env->st_mem_start, en->m.regnum);
+ MEM_STATUS_ON(env->backtrack_mem, en->m.regnum);
}
r = setup_tree(NODE_BODY(node), reg, state, env);
break;
MEM_STATUS_CLEAR(env->cap_history);
MEM_STATUS_CLEAR(env->st_mem_start);
MEM_STATUS_CLEAR(env->st_mem_end);
+ MEM_STATUS_CLEAR(env->backtrack_mem);
MEM_STATUS_CLEAR(env->backrefed_mem);
env->error = (UChar* )NULL;
env->error_end = (UChar* )NULL;
MemStatusType cap_history;
MemStatusType st_mem_start;
MemStatusType st_mem_end;
+ MemStatusType backtrack_mem; /* backtrack/recursion */
MemStatusType backrefed_mem;
UChar* pattern;
UChar* pattern_end;