I see same kind of names in Opal exceptions
Maybe the intention was to clearly distinguish Error from Warning (proceedable), but the hierarchy tells already.
OCSemanticError
OCStoreIntoReadOnlyVariableError could be just OCStoreIntoReadOnlyVariable
OCStoreIntoSpecialVariableError -> OCStoreIntoSpecialVariable
OCSemanticWarning
OCShadowVariableWarning
OCUndeclaredVariableWarning
Note that removing the Warning suffix might lead to ambiguous names...
OCUndeclaredVariable might be confused as being a Variable.
So maybe OCVariableUndeclared or OCVariableIsUndeclared