Implement defensive checks when managing error state to prevent overwriting existing errors and add safeguards even when theoretically unnecessary. This approach helps avoid subtle bugs and makes code more robust against future modifications.
Key practices:
Example from the codebase:
// Before: Risk of overwriting existing error
if self.readMore() {
goto try_skip
} else {
err = SyntaxError{e, self.s, types.ParsingError(-s), ""}
self.setErr(err)
return
}
// After: Defensive check prevents overwriting
if self.readMore() {
goto try_skip
}
if self.err == nil {
self.setErr(SyntaxError{e, self.s, types.ParsingError(-s), ""})
}
return self.err
This defensive approach prevents losing important error context and makes the code more maintainable as it evolves.
Enter the URL of a public GitHub repository