aboutsummaryrefslogtreecommitdiff
path: root/src/stdlib/cli.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2025-10-02 23:57:30 -0400
committerBruce Hill <bruce@bruce-hill.com>2025-10-02 23:57:30 -0400
commitbaea09062482674220a3686d488a283e6b9b8821 (patch)
tree33df470af1db2be53fabac50762c375951acb84e /src/stdlib/cli.c
parent126050a6357d7ec1fd9901256de50923b6dd7c49 (diff)
parent597699243a6f935231ad83e63d22bf6ff9e4e547 (diff)
Merge branch 'zero-nones' into dev
Diffstat (limited to 'src/stdlib/cli.c')
-rw-r--r--src/stdlib/cli.c28
1 files changed, 15 insertions, 13 deletions
diff --git a/src/stdlib/cli.c b/src/stdlib/cli.c
index 62174f19..d5bb0ea2 100644
--- a/src/stdlib/cli.c
+++ b/src/stdlib/cli.c
@@ -45,24 +45,24 @@ static bool parse_single_arg(const TypeInfo_t *info, char *arg, void *dest) {
return parsed.small != 0;
} else if (info == &Int64$info) {
OptionalInt64_t parsed = Int64$parse(Text$from_str(arg), NULL);
- if (!parsed.is_none) *(OptionalInt64_t *)dest = parsed;
- return !parsed.is_none;
+ if (parsed.has_value) *(OptionalInt64_t *)dest = parsed;
+ return parsed.has_value;
} else if (info == &Int32$info) {
OptionalInt32_t parsed = Int32$parse(Text$from_str(arg), NULL);
- if (!parsed.is_none) *(OptionalInt32_t *)dest = parsed;
- return !parsed.is_none;
+ if (parsed.has_value) *(OptionalInt32_t *)dest = parsed;
+ return parsed.has_value;
} else if (info == &Int16$info) {
OptionalInt16_t parsed = Int16$parse(Text$from_str(arg), NULL);
- if (!parsed.is_none) *(OptionalInt16_t *)dest = parsed;
- return !parsed.is_none;
+ if (parsed.has_value) *(OptionalInt16_t *)dest = parsed;
+ return parsed.has_value;
} else if (info == &Int8$info) {
OptionalInt8_t parsed = Int8$parse(Text$from_str(arg), NULL);
- if (!parsed.is_none) *(OptionalInt8_t *)dest = parsed;
- return !parsed.is_none;
+ if (parsed.has_value) *(OptionalInt8_t *)dest = parsed;
+ return parsed.has_value;
} else if (info == &Byte$info) {
OptionalByte_t parsed = Byte$parse(Text$from_str(arg), NULL);
- if (!parsed.is_none) *(OptionalByte_t *)dest = parsed;
- return !parsed.is_none;
+ if (parsed.has_value) *(OptionalByte_t *)dest = parsed;
+ return parsed.has_value;
} else if (info == &Bool$info) {
OptionalBool_t parsed = Bool$parse(Text$from_str(arg), NULL);
if (parsed != NONE_BOOL) *(OptionalBool_t *)dest = parsed;
@@ -124,9 +124,10 @@ static List_t parse_list(const TypeInfo_t *item_info, int n, char *args[]) {
if ((padded_size % item_info->align) > 0)
padded_size = padded_size + item_info->align - (padded_size % item_info->align);
+ uint64_t u = (uint64_t)n;
List_t items = {
.stride = padded_size,
- .length = n,
+ .length = u,
.data = GC_MALLOC((size_t)(padded_size * n)),
};
for (int i = 0; i < n; i++) {
@@ -145,9 +146,10 @@ static Table_t parse_table(const TypeInfo_t *table, int n, char *args[]) {
padded_size += value->size;
if ((padded_size % key->align) > 0) padded_size = padded_size + key->align - (padded_size % key->align);
+ uint64_t u = (uint64_t)n;
List_t entries = {
.stride = padded_size,
- .length = n,
+ .length = u,
.data = GC_MALLOC((size_t)(padded_size * n)),
};
for (int i = 0; i < n; i++) {
@@ -378,7 +380,7 @@ void _tomo_parse_args(int argc, char *argv[], Text_t usage, Text_t help, const c
for (int s = 0; s < spec_len; s++) {
if (!populated_args[s] && spec[s].required) {
- if (spec[s].type->tag == ListInfo) *(OptionalList_t *)spec[s].dest = (List_t){};
+ if (spec[s].type->tag == ListInfo) *(OptionalList_t *)spec[s].dest = EMPTY_LIST;
else if (spec[s].type->tag == TableInfo) *(OptionalTable_t *)spec[s].dest = (Table_t){};
else print_err("The required argument '", spec[s].name, "' was not provided\n", usage);
}