aboutsummaryrefslogtreecommitdiff
path: root/types.c
diff options
context:
space:
mode:
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;