ErrorInterface is the base interface for errors. ErrorInterface itself cannot be instantiated, but there are several derived interfaces to indicate specific error conditions such as OutOfMemoryError, NullptrError or IllegalStateError.
An error typically contains file and line information (GetLocation()) and a message (GetMessage()). It may also have a stack trace (GetStackTrace()) and a cause (GetCause()), which is another error which caused this error.
Normally, errors shouldn't be used directly for return types of functions. Instead, you should use Result<T>
which can hold a result value and an error. The macros iferr and iferr_return support Result to facilitate error handling.
Errors are typically created in statements like
The usage of MAXON_SOURCE_LOCATION ensures that file and line information is set correctly in the error. The message is optional, and you can also pass a cause as third argument to the constructor. Some error classes may add specific constructors with additional arguments. But errors also support method chaining if you want so set additional values like the stack trace:
return IllegalStateError(
MAXON_SOURCE_LOCATION).SetMessage(
"Object already contained in hierarchy."_s).SetStackTrace();
To trigger a DebugStop() or CriticalStop() on creation of an error, add DbgStop() or CritStop() at the end of the creation as in
The ToString implementation of errors supports the following format statements:
- "NoStack" to suppress the output of the call stack.
- "NoLocation" to suppress the output of the code location.
- "NoCause" to suppress the output of the cause error.
- "NoMachine" to suppress the output of the machine. The machine is only printed out if it's not the local machine.
- "Class" to print error class.
- See also
- @CLANGDUMMY errors
|
Ptr | GetPtr () |
|
ConstPtr | GetPtr () const |
|
| MAXON_ADD_TO_COPY_ON_WRITE_REFERENCE_CLASS (protected:void Create(MAXON_SOURCE_LOCATION_DECLARATION) { *static_cast< typename S::DirectlyReferencedType::Hxx1::ReferenceClass * >(this)=S::DirectlyReferencedType::Hxx1::ErrObj::GetInstance()();typename S::DirectlyReferencedType::Ptr e=this->MakeWritable(false).GetPointer();e.SetLocation(MAXON_SOURCE_LOCATION_FORWARD);} void Create(MAXON_SOURCE_LOCATION_DECLARATION, const String &msg) { *static_cast< typename S::DirectlyReferencedType::Hxx1::ReferenceClass * >(this)=S::DirectlyReferencedType::Hxx1::ErrObj::GetInstance()();typename S::DirectlyReferencedType::Ptr e=this->MakeWritable(false).GetPointer();e.SetLocation(MAXON_SOURCE_LOCATION_FORWARD);e.SetMessage(msg);} void Create(MAXON_SOURCE_LOCATION_DECLARATION, const String &msg, const Error &cause) { *static_cast< typename S::DirectlyReferencedType::Hxx1::ReferenceClass * >(this)=S::DirectlyReferencedType::Hxx1::ErrObj::GetInstance()();typename S::DirectlyReferencedType::Ptr e=this->MakeWritable(false).GetPointer();e.SetLocation(MAXON_SOURCE_LOCATION_FORWARD);e.SetMessage(msg);e.SetCause(cause);}) |
|
| MAXON_ADD_TO_CONST_REFERENCE_CLASS (RefMemberType< S > DbgStop() { DebugOutput(OUTPUT::DIAGNOSTIC, static_cast< const typename S::ReferenceClass * >(this) ->ToString(nullptr));DebugStop();return this->PrivateGetRefMember();} RefMemberType< S > CritStop() { CriticalOutput(static_cast< const typename S::ReferenceClass * >(this) ->ToString(nullptr));return this->PrivateGetRefMember();} RefMemberType< S > DiagOutput() { DiagnosticOutput(static_cast< const typename S::ReferenceClass * >(this) ->ToString(nullptr));return this->PrivateGetRefMember();}) |
|
const MAXON_METHOD SourceLocation & | GetLocation () const |
|
MAXON_METHOD void | SetLocation (MAXON_SOURCE_LOCATION_DECLARATION) |
|
MAXON_METHOD Block< void *const > | GetStackTrace () const |
|
MAXON_METHOD void | SetStackTrace (const Block< void *const > &trace) |
|
MAXON_FUNCTION void | SetStackTrace (Int skip=STACKTRACE_SKIP) |
|
MAXON_METHOD String | GetMessage () const |
|
MAXON_METHOD void | SetMessage (const String &message) |
|
const MAXON_METHOD Error & | GetCause () const |
|
MAXON_METHOD void | SetCause (const Error &cause) |
|
MAXON_METHOD void | GetMachine (MachineRef &machine) const |
|
MAXON_METHOD void | SetMachine (const MachineRef &machine) |
|
MAXON_METHOD Int | PrivateGetCode () const |
|
MAXON_METHOD void | PrivateSetCode (Int code) |
|
MAXON_METHOD void | PrivateSetPreallocation (ThreadReferencedError preallocation) const |
|
MAXON_METHOD ThreadReferencedError | PrivateGetPreallocation () const |
|
MAXON_METHOD void | PrivateSetDebugError (const Error &cause) const |
|
Ptr | GetPtr () |
|
ConstPtr | GetPtr () const |
|
template<typename INTERFACE = ObjectInterface> |
const MAXON_FUNCTION maxon::Class< typename INTERFACE::Hxx1::ReferenceClass > & | GetClass () const |
|
const MAXON_FUNCTION ClassInfo * | GetClassInfo () const |
|
template<typename REF > |
const ComponentInfo & | GetComponentInfoOfSuper (const REF *sptr, OverloadRank0) const MAXON_IF_TARGET_DEBUG( |
|
template<typename REF , typename = typename REF::Component::ComponentClass> |
const ComponentInfo & | GetComponentInfoOfSuper (const REF *sptr, OverloadRank1) const |
|
MAXON_FUNCTION Bool | HasSameClass (const ObjectInterface *obj) const |
|
Result< void > | CopyFrom (const ObjectInterface *src) |
|
Result< ObjectInterface * > | Clone () const |
|
template<typename REFCLASS > |
MAXON_FUNCTION Result< REFCLASS > | Clone () const |
|
template<typename I > |
MAXON_FUNCTION Bool | IsInstanceOf () const |
|
MAXON_FUNCTION Bool | IsInstanceOf (const DataType &type) const |
|
MAXON_METHOD String | ToString (const FormatStatement *formatStatement) const |
|
MAXON_METHOD Result< void > | InitObject () |
|
MAXON_METHOD Bool | IsEqual (const maxon::ObjectInterface *other) const |
|
MAXON_METHOD COMPARERESULT | Compare (const maxon::ObjectInterface *other) const |
|
MAXON_FUNCTION UInt | GetHashCode () const |
|
MAXON_METHOD UInt | GetHashCodeImpl () const |
|
| MAXON_ADD_TO_CONST_REFERENCE_CLASS (Bool operator==(std::nullptr_t) const { return RefCompare< MAXON_IS_COW_KIND(S::Handler::KIND), true >::template IsEqual< const ObjectInterface *, const ObjectInterface * >(this->GetPointer(), nullptr);}) |
|
| MAXON_ADD_TO_CONST_REFERENCE_CLASS (Bool operator!=(std::nullptr_t) const { return !RefCompare< MAXON_IS_COW_KIND(S::Handler::KIND), true >::template IsEqual< const ObjectInterface *, const ObjectInterface * >(this->GetPointer(), nullptr);}) |
|
| MAXON_ADD_TO_CONST_REFERENCE_CLASS (Bool operator==(const ObjectInterface *ref) const { return RefCompare< MAXON_IS_COW_KIND(S::Handler::KIND), true >::template IsEqual< const ObjectInterface *, const ObjectInterface * >(this->GetPointer(), ref);}) |
|
| MAXON_ADD_TO_CONST_REFERENCE_CLASS (Bool operator!=(const ObjectInterface *ref) const { return !RefCompare< MAXON_IS_COW_KIND(S::Handler::KIND), true >::template IsEqual< const ObjectInterface *, const ObjectInterface * >(this->GetPointer(), ref);}) |
|
| MAXON_ADD_TO_CONST_REFERENCE_CLASS (Bool operator==(ObjectInterface *ref) const { return RefCompare< MAXON_IS_COW_KIND(S::Handler::KIND), true >::template IsEqual< const ObjectInterface *, const ObjectInterface * >(this->GetPointer(), ref);}) |
|
| MAXON_ADD_TO_CONST_REFERENCE_CLASS (Bool operator!=(ObjectInterface *ref) const { return !RefCompare< MAXON_IS_COW_KIND(S::Handler::KIND), true >::template IsEqual< const ObjectInterface *, const ObjectInterface * >(this->GetPointer(), ref);}) |
|
| MAXON_ADD_TO_CONST_REFERENCE_CLASS (template< typename T > Bool operator==(T *ref) const { return RefCompare< MAXON_IS_COW_KIND(S::Handler::KIND), true >::template IsEqual< const ObjectInterface *, const ObjectInterface * >(this->GetPointer(), ref);}) |
|
| MAXON_ADD_TO_CONST_REFERENCE_CLASS (template< typename T > Bool operator!=(T *ref) const { return !RefCompare< MAXON_IS_COW_KIND(S::Handler::KIND), true >::template IsEqual< const ObjectInterface *, const ObjectInterface * >(this->GetPointer(), ref);}) |
|
Bool | PrivateIsInstanceOf (const DataType &type) const |
|