This for loop should be reversed, and run from the back of this_patterns to the front. That is a minor performance increase, because if there are any negations they will be at the end, and if any of them are true we want to get out as quick as possible.