Op/3 binary with lower precedence somehow evaluated before unaries with higher precedence

This, as I said, is a bug. Pushed a fix. Any combination of operators that is valid according to the ISO standard should result in the term dictated by ISO. The issue of this topic is what to do with combinations that are invalid according to ISO as the given example is invalid.