aboutsummaryrefslogtreecommitdiff
path: root/types.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-08-18 20:28:16 -0400
committerBruce Hill <bruce@bruce-hill.com>2024-08-18 20:28:39 -0400
commitd804b09b02b9c4a6ea6b16ae85524a704796cbc1 (patch)
tree3379d64b028a80825a892c87176b6bb6d6cc3484 /types.c
parentc338c3f08c6a13242e975dd344bad63a3cec9eee (diff)
Added a .length field to arrays/sets/tables, added a .max_size field to
channels, and updated the API
Diffstat (limited to 'types.c')
-rw-r--r--types.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/types.c b/types.c
index f666f667..cd388304 100644
--- a/types.c
+++ b/types.c
@@ -595,14 +595,16 @@ type_t *get_field_type(type_t *t, const char *field_name)
return NULL;
}
case SetType: {
- if (streq(field_name, "items"))
+ if (streq(field_name, "length"))
+ return INT_TYPE;
+ else if (streq(field_name, "items"))
return Type(ArrayType, .item_type=Match(t, SetType)->item_type);
- else if (streq(field_name, "fallback"))
- return Type(PointerType, .pointed=t, .is_readonly=true, .is_optional=true);
return NULL;
}
case TableType: {
- if (streq(field_name, "keys"))
+ if (streq(field_name, "length"))
+ return INT_TYPE;
+ else if (streq(field_name, "keys"))
return Type(ArrayType, Match(t, TableType)->key_type);
else if (streq(field_name, "values"))
return Type(ArrayType, Match(t, TableType)->value_type);
@@ -612,6 +614,14 @@ type_t *get_field_type(type_t *t, const char *field_name)
return Type(PointerType, .pointed=t, .is_readonly=true, .is_optional=true);
return NULL;
}
+ case ArrayType: {
+ if (streq(field_name, "length")) return INT_TYPE;
+ return NULL;
+ }
+ case ChannelType: {
+ if (streq(field_name, "max_size")) return INT_TYPE;
+ return NULL;
+ }
default: return NULL;
}
}