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.