This commit introduces a C interface for the ORC runtime's Error
handling system, enabling C clients and language bindings to work with
ORC errors.
The ORC_RT_C_ABI macro applies __attribute__((visibility("default")))
(on platforms that support it), ensuring C API symbols are exported when
building the ORC runtime as a shared library. In the future I expect
that this will be extended to support other platforms (e.g. dllexport on
Windows).
81 lines
2.9 KiB
C
81 lines
2.9 KiB
C
/*===----------- Error.h - C API for ORC Runtime Errors -----------*- C -*-===*\
|
|
|* *|
|
|
|* Part of the LLVM Project, under the Apache License v2.0 with LLVM *|
|
|
|* Exceptions. *|
|
|
|* See https://llvm.org/LICENSE.txt for license information. *|
|
|
|* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception *|
|
|
|* *|
|
|
|*===----------------------------------------------------------------------===*|
|
|
|* *|
|
|
|* This file defines the C interface to LLVM's Error class. *|
|
|
|* *|
|
|
|* TODO: Explain ownership model. *|
|
|
|* *|
|
|
\*===----------------------------------------------------------------------===*/
|
|
|
|
#ifndef ORC_RT_C_ERROR_H
|
|
#define ORC_RT_C_ERROR_H
|
|
|
|
#include "orc-rt-c/CoreTypes.h"
|
|
#include "orc-rt-c/ExternC.h"
|
|
#include "orc-rt-c/Visibility.h"
|
|
|
|
ORC_RT_C_EXTERN_C_BEGIN
|
|
|
|
#define orc_rt_ErrorSuccess ((orc_rt_ErrorRef)0)
|
|
|
|
/**
|
|
* Error type identifier.
|
|
*/
|
|
typedef const void *orc_rt_Error_TypeId;
|
|
|
|
/**
|
|
* Returns the type id for the given error instance, which must be a failure
|
|
* value (i.e. non-null).
|
|
*/
|
|
ORC_RT_C_ABI orc_rt_Error_TypeId orc_rt_Error_getTypeId(orc_rt_ErrorRef Err);
|
|
|
|
/**
|
|
* Dispose of the given error without handling it. This operation consumes the
|
|
* error, and the given orc_rt_ErrorRef value is not usable once this call
|
|
* returns.
|
|
* Note: This method *only* needs to be called if the error is not being passed
|
|
* to some other consuming operation, e.g. LLVMGetErrorMessage.
|
|
*/
|
|
ORC_RT_C_ABI void orc_rt_Error_consume(orc_rt_ErrorRef Err);
|
|
|
|
/**
|
|
* Report a fatal error if Err is a failure value.
|
|
*
|
|
* This function can be used to wrap calls to fallible functions ONLY when it is
|
|
* known that the Error will always be a success value.
|
|
*/
|
|
ORC_RT_C_ABI void orc_rt_Error_cantFail(orc_rt_ErrorRef Err);
|
|
|
|
/**
|
|
* Returns the given string's error message. This operation consumes the error,
|
|
* and the given orc_rt_ErrorRef value is not usable once this call returns.
|
|
* The caller is responsible for disposing of the string by calling
|
|
* LLVMDisposeErrorMessage.
|
|
*/
|
|
ORC_RT_C_ABI char *orc_rt_Error_toString(orc_rt_ErrorRef Err);
|
|
|
|
/**
|
|
* Dispose of the given error message.
|
|
*/
|
|
ORC_RT_C_ABI void orc_rt_Error_freeErrorMessage(char *ErrMsg);
|
|
|
|
/**
|
|
* Returns the type id for llvm StringError.
|
|
*/
|
|
ORC_RT_C_ABI orc_rt_Error_TypeId orc_rt_StringError_getTypeId(void);
|
|
|
|
/**
|
|
* Create a StringError.
|
|
*/
|
|
ORC_RT_C_ABI orc_rt_ErrorRef orc_rt_StringError_create(const char *ErrMsg);
|
|
|
|
ORC_RT_C_EXTERN_C_END
|
|
|
|
#endif // ORC_RT_C_ERROR_H
|