gotos make for bad, error prone, and hard to follow/read code.
Replacing these improves the overall code quality and makes it easier to
follow/read.
In this case, there are numerous gotos that share the exact same label error. This name is also shared with variable names further complicating the code. In addition, having to scroll back and forth between the error label and its associated goto makes reading the code more difficult, especially with all the instances of error that occur in this file. Finally, the code following the error labels can be refactored to or are only 1-2 lines of code while removing unnecessary variables.