Minor parsing cleanup

This commit is contained in:
2022-11-16 22:55:55 -05:00
parent 2ae4e38400
commit d2c59352bb

View File

@@ -141,6 +141,9 @@ struct ucl_object *ucl_parse_token_atom(struct ucl_object *maybe_atom) {
case UCL_TYPE_INT:
atom = ucl_int_create(maybe_atom->integer);
break;
case UCL_TYPE_ERROR:
case UCL_TYPE_BUILTIN:
case UCL_TYPE_SPECIAL:
case UCL_TYPE_COUNT:
assert(false);
}
@@ -150,6 +153,10 @@ struct ucl_object *ucl_parse_token_atom(struct ucl_object *maybe_atom) {
return atom;
}
static void advance_token_iter(struct ucl_object **token_iter) {
*token_iter = (*token_iter)->cell.cdr;
}
static struct ucl_object *ucl_parse_tokens_recursive(struct ucl_object **token_iter) {
// Invariants:
// - This function returns NULL if it encounters the first unmatched END_LIST_CHAR
@@ -168,7 +175,7 @@ static struct ucl_object *ucl_parse_tokens_recursive(struct ucl_object **token_i
}
struct ucl_object *next_sexp = ucl_parse_token_atom(token);
if (next_sexp != NULL) {
*token_iter = (*token_iter)->cell.cdr;
advance_token_iter(token_iter);
return next_sexp;
}
assert(token->type == UCL_TYPE_SYMBOL);
@@ -177,7 +184,7 @@ static struct ucl_object *ucl_parse_tokens_recursive(struct ucl_object **token_i
struct ucl_object *list = NULL;
struct ucl_object **next_node = &list;
// Consume the START_LIST_CHAR
*token_iter = (*token_iter)->cell.cdr;
advance_token_iter(token_iter);
while (1) {
if (*token_iter == NULL) {
// Unexpected end of parsing
@@ -187,7 +194,7 @@ static struct ucl_object *ucl_parse_tokens_recursive(struct ucl_object **token_i
token = (*token_iter)->cell.car;
if (token->type == UCL_TYPE_SYMBOL && token->symbol[0] == END_LIST_CHAR) {
*token_iter = (*token_iter)->cell.cdr;
advance_token_iter(token_iter);
if (list == NULL) {
list = ucl_cell_create(NULL, NULL);
}