Minimal C scaffolding for the Error proto. The object carries no C payload of its own — error information lives entirely in Io-level slots such as "message" — so this file only supplies the tag, proto registration, and a pair of convenience constructors used by C code that wants to hand an Error up through the VM. The richer exception flow (raise, catch, pass) is implemented in Io on top of Exception; IoError is the lightweight structural representative returned by primitives that report failure without raising.
Convenience constructor: clone the registered proto. Callers who want a message should use IoError_newWithMessageFormat_ or IoError_newWithCStringMessage_, both of which populate the "message" slot that Io-level code inspects.
Builds the Error tag. Only a cloneFunc is installed — Error has no owned C memory, so no free/mark/compare hooks are needed; the GC treats it like any plain IoObject.
Simpler variant: wraps a plain C string as an IoSeq and stores it on "message". Differs from IoError_newWithMessageFormat_ in that the message becomes a mutable Sequence rather than an interned Symbol, which matters when callers append context before propagating.
printf-style Error constructor. Formats the message via UArray_newWithVargs_, interns it as a Symbol, and stores it on the new Error's "message" slot. Used by primitives that want to return a descriptive Error without going through IoState_error_ / raise.
Creates and registers the Error proto. The method table is empty; all user-visible behavior is attached from Io-level code in the standard library, so this just establishes the type identity so IoObject_tag comparisons and ISERROR-style predicates work.
Tag cloneFunc. Delegates entirely to IoObject_rawClonePrimitive — there is no Error-specific C data to duplicate; slot inheritance already carries the "message" field and anything else the caller set.