api/internal: Remove set field from Error type.

This commit is contained in:
Justin M. Keyes
2017-04-23 19:58:13 +02:00
parent 62c3f436a9
commit 2ed91f222f
9 changed files with 26 additions and 23 deletions

View File

@@ -8,9 +8,11 @@
#define ARRAY_DICT_INIT {.size = 0, .capacity = 0, .items = NULL}
#define STRING_INIT {.data = NULL, .size = 0}
#define OBJECT_INIT { .type = kObjectTypeNil }
#define ERROR_INIT { .set = false, .msg = NULL }
#define ERROR_INIT { .type = kErrorTypeNone, .msg = NULL }
#define REMOTE_TYPE(type) typedef handle_T type
#define ERROR_SET(e) ((e)->type != kErrorTypeNone)
#ifdef INCLUDE_GENERATED_DECLARATIONS
# define ArrayOf(...) Array
# define DictionaryOf(...) Dictionary
@@ -20,6 +22,7 @@ typedef int handle_T;
// Basic types
typedef enum {
kErrorTypeNone = -1,
kErrorTypeException,
kErrorTypeValidation
} ErrorType;
@@ -39,7 +42,6 @@ typedef enum {
typedef struct {
ErrorType type;
char *msg;
bool set;
} Error;
typedef bool Boolean;

View File

@@ -69,7 +69,7 @@ bool try_end(Error *err)
ET_ERROR,
NULL,
&should_free);
_api_set_error(err, err->type, "%s", msg);
_api_set_error(err, kErrorTypeException, "%s", msg);
free_global_msglist();
if (should_free) {
@@ -80,7 +80,7 @@ bool try_end(Error *err)
discard_current_exception();
}
return err->set;
return ERROR_SET(err);
}
/// Recursively expands a vimscript value in a dict
@@ -803,11 +803,12 @@ void api_free_dictionary(Dictionary value)
void api_clear_error(Error *value)
FUNC_ATTR_NONNULL_ALL
{
if (!value->set) {
if (!ERROR_SET(value)) {
return;
}
xfree(value->msg);
value->msg = NULL;
value->type = kErrorTypeNone;
}
Dictionary api_metadata(void)
@@ -953,7 +954,7 @@ static void set_option_value_for(char *key,
break;
}
if (err->set) {
if (ERROR_SET(err)) {
return;
}
@@ -981,6 +982,7 @@ static void set_option_value_err(char *key,
void _api_set_error(Error *err, ErrorType errType, const char *format, ...)
FUNC_ATTR_NONNULL_ALL
{
assert(kErrorTypeNone != errType);
va_list args1;
va_list args2;
va_start(args1, format);
@@ -994,6 +996,5 @@ void _api_set_error(Error *err, ErrorType errType, const char *format, ...)
vsnprintf(err->msg, bufsize, format, args2);
va_end(args2);
err->set = true;
err->type = errType;
}