From 48fb330f47478fc28f0c2738e496fb2d48176a31 Mon Sep 17 00:00:00 2001 From: Max Wash Date: Mon, 8 Sep 2025 15:43:29 +0100 Subject: [PATCH] common: re-define status codes to be compatible with b_result --- common/include/ivy/status.h | 30 ++++++++++++------- common/status.c | 58 ++++++++++++++++++++++++------------- 2 files changed, 57 insertions(+), 31 deletions(-) diff --git a/common/include/ivy/status.h b/common/include/ivy/status.h index 3c79d29..acc4c9a 100644 --- a/common/include/ivy/status.h +++ b/common/include/ivy/status.h @@ -3,24 +3,32 @@ #include +#define IVY_ERROR_VENDOR (ivy_error_vendor()) + enum b_status; +struct b_error_vendor; + enum ivy_status { IVY_OK = 0, - IVY_ERR_EOF = -1, - IVY_ERR_IO_FAILURE = -2, - IVY_ERR_BAD_SYNTAX = -3, - IVY_ERR_NO_MEMORY = -4, - IVY_ERR_NOT_SUPPORTED = -5, - IVY_ERR_INTERNAL_FAILURE = -6, - IVY_ERR_BAD_STATE = -7, - IVY_ERR_INVALID_VALUE = -8, - IVY_ERR_NO_ENTRY = -9, - IVY_ERR_NAME_EXISTS = -10, - IVY_ERR_BAD_FORMAT = -11, + IVY_ERR_EOF, + IVY_ERR_IO_FAILURE, + IVY_ERR_BAD_SYNTAX, + IVY_ERR_NO_MEMORY, + IVY_ERR_NOT_SUPPORTED, + IVY_ERR_INTERNAL_FAILURE, + IVY_ERR_BAD_STATE, + IVY_ERR_INVALID_VALUE, + IVY_ERR_NO_ENTRY, + IVY_ERR_NAME_EXISTS, + IVY_ERR_BAD_FORMAT, + + IVY_ERR_PARSE_FAILURE, + IVY_ERR_CODEGEN_FAILURE, }; IVY_API const char *ivy_status_to_string(enum ivy_status status); +IVY_API const struct b_error_vendor *ivy_error_vendor(void); IVY_API enum ivy_status ivy_status_from_b_status(enum b_status status); IVY_API enum ivy_status ivy_status_from_errno(int err); diff --git a/common/status.c b/common/status.c index e2f5166..d7e0386 100644 --- a/common/status.c +++ b/common/status.c @@ -1,29 +1,47 @@ -#include +#include #include #include -#define ENUM_STR(x) \ - case x: \ - return #x +static const b_error_definition error_defs[] = { + B_ERROR_DEFINITION(IVY_OK, "OK", "Success"), + B_ERROR_DEFINITION(IVY_ERR_EOF, "EOF", "Unexpected end of file"), + B_ERROR_DEFINITION(IVY_ERR_IO_FAILURE, "IO_FAILURE", "I/O failure"), + B_ERROR_DEFINITION(IVY_ERR_BAD_SYNTAX, "BAD_SYNTAX", "Invalid syntax"), + B_ERROR_DEFINITION(IVY_ERR_NO_MEMORY, "NO_MEMORY", "Out of memory"), + B_ERROR_DEFINITION( + IVY_ERR_NOT_SUPPORTED, "NOT_SUPPORTED", + "Operation not supported"), + B_ERROR_DEFINITION( + IVY_ERR_INTERNAL_FAILURE, "INTERNAL_FAILURE", + "Internal failure"), + B_ERROR_DEFINITION(IVY_ERR_BAD_STATE, "BAD_STATE", "Bad state"), + B_ERROR_DEFINITION( + IVY_ERR_INVALID_VALUE, "INVALID_VALUE", "Invalid value"), + B_ERROR_DEFINITION(IVY_ERR_NO_ENTRY, "NO_ENTRY", "Name does not exist"), + B_ERROR_DEFINITION( + IVY_ERR_NAME_EXISTS, "NAME_EXISTS", "Name already exists"), + B_ERROR_DEFINITION(IVY_ERR_BAD_FORMAT, "BAD_FORMAT", "Bad format"), + B_ERROR_DEFINITION( + IVY_ERR_PARSE_FAILURE, "PARSE_FAILURE", "Parse failure"), + B_ERROR_DEFINITION( + IVY_ERR_CODEGEN_FAILURE, "CODEGEN_FAILURE", + "Code generation failure"), +}; + +static const b_error_vendor error_vendor = { + .v_name = "Ivy", + .v_error_definitions = error_defs, + .v_error_definitions_length = sizeof error_defs, +}; const char *ivy_status_to_string(enum ivy_status status) { - switch (status) { - ENUM_STR(IVY_OK); - ENUM_STR(IVY_ERR_EOF); - ENUM_STR(IVY_ERR_IO_FAILURE); - ENUM_STR(IVY_ERR_BAD_SYNTAX); - ENUM_STR(IVY_ERR_NO_MEMORY); - ENUM_STR(IVY_ERR_NOT_SUPPORTED); - ENUM_STR(IVY_ERR_INTERNAL_FAILURE); - ENUM_STR(IVY_ERR_BAD_STATE); - ENUM_STR(IVY_ERR_INVALID_VALUE); - ENUM_STR(IVY_ERR_NO_ENTRY); - ENUM_STR(IVY_ERR_NAME_EXISTS); - ENUM_STR(IVY_ERR_BAD_FORMAT); - default: - return ""; - } + return error_defs[status].err_message; +} + +const struct b_error_vendor *ivy_error_vendor(void) +{ + return &error_vendor; } #define ENUM_CONVERT(from, to) \