Use OOP to avoid code duplication for eval error tracking. This results in much more robust stack error reporting and 400 LOC less.