From d804b09b02b9c4a6ea6b16ae85524a704796cbc1 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Sun, 18 Aug 2024 20:28:16 -0400 Subject: Added a .length field to arrays/sets/tables, added a .max_size field to channels, and updated the API --- types.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'types.c') 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; } } -- cgit v1.2.3