On Tue, 9 Jul 2019, I wrote:

> I have put this on the wish list, but until I look at the code, I have 
> no idea whether it will be easy or straightforward to implement in the 
> interpreter. I will try to investigate soon. If it turns out to be 
> possible in the interpreter, it will up to Zoltan to decide whether to 
> add it to JIT.

It turned out to be very easy to implement in the interpreter, but there 
was quite a lot of necessary but straightforward work to add new opcodes 
and process them in the various scans of compiled patterns. Also, the 
documentation took some time.

I have done this work, and committed the patches. The new code supports 
both (*napla: and (*naplb: and although I haven't been able to think of 
a good example for the latter, here is a test example:

/(*naplb:(.)..|(.)...)(\1|\2)/
    abcdb
 0: b
 1: b
 2: <unset>
 3: b
    abcda
 0: a
 1: <unset>
 2: a
 3: a

For a non-atomic lookaround to be useful, it must change the captured 
groups after a backtrack, and the rest of the pattern must refer to a 
changed group. This means there is no point in even looking at the 
pcre2_dfa_match() code, because DFA matching does not support capturing.
At the moment, there is no JIT support for these new lookarounds; JIT 
compilation will fail.

It is quite possible that I have missed one or more places in the code 
that need updating for the new opcodes. Please test this if you can.

Philip

-- 
Philip Hazel

-- 
## List details at https://lists.exim.org/mailman/listinfo/pcre-dev 

Reply via email to