I noticed a really weird behaviour with get_matches.
Try to go to Special:AbuseFilter/tools and insert the following expression:
```
a := [false, false];
b := [false, false];
a[0] != false & b[1] != false
```
and hit "Check syntax". Hooray, syntax is fine, let's evaluate it; try it, and you'll get an unknown error. Examinating the API response, an AFPUserVisibleException is thrown because, according to the message, you're trying to get an element from something that is not an array. However, both variables are of course arrays of length 2.
Apparently something is highly broken in there. And there's even more: if you replace the last line with its first or second condition, they work as expected, and the error only happens when there are both.
Important note: this doesn't only happen on Special:AbuseFilter/tools. In fact, try to create a filter with the code above but change the last line to
```
(a[0] != false & b[1] != false) | 1===1
```
the filter should always match, but if you make an edit, it actually won't.
UPDATE: this is not a regression, since it also happened at the time of [[https://gerrit.wikimedia.org/g/mediawiki/extensions/AbuseFilter/+/4e20c933f4e89fb2375b9f3be4e1984fe1405b72|get_matches introduction]] (which I first thought was the cause here).