aboutsummaryrefslogtreecommitdiff
path: root/types.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-02-25 14:35:25 -0500
committerBruce Hill <bruce@bruce-hill.com>2024-02-25 14:35:25 -0500
commitd06c63c70c67af6db46cd2a1e3ed002e4b280a8b (patch)
tree5e6eca9c2f42b4b9a00037e216cdd79033db5b32 /types.c
parent5344789d8aed3beef2cdeaf2678cff554e29456a (diff)
Table field access for .keys, .values, .default, .fallback
Diffstat (limited to 'types.c')
-rw-r--r--types.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/types.c b/types.c
index 1fd671f1..5e37536b 100644
--- a/types.c
+++ b/types.c
@@ -524,18 +524,15 @@ type_t *get_field_type(type_t *t, const char *field_name)
}
return NULL;
}
- case ArrayType: {
- if (streq(field_name, "length"))
- return Type(IntType, .bits=64);
- return NULL;
- }
case TableType: {
- if (streq(field_name, "length"))
- return Type(IntType, .bits=64);
- else if (streq(field_name, "keys"))
+ 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);
+ else if (streq(field_name, "default"))
+ return Type(PointerType, .pointed=Match(t, TableType)->value_type, .is_readonly=true, .is_optional=true);
+ else if (streq(field_name, "fallback"))
+ return Type(PointerType, .pointed=t, .is_readonly=true, .is_optional=true);
return NULL;
}
default: return NULL;