added ".count" to array-typed things
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 29 Sep 2021 17:52:14 +0000 (12:52 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 29 Sep 2021 17:52:14 +0000 (12:52 -0500)
bin/onyx
src/checker.c
src/types.c

index 98028881c39eb002e3173e0303be8d4655e71606..a2196a345d09bdab7b32cdb27e15d36d36ddd97c 100755 (executable)
Binary files a/bin/onyx and b/bin/onyx differ
index 80c03d494885b5871e17ad841e43fdbe1a9fb9a7..2681a4342494ab72906eb07a36ffc8cc0ae01df8 100644 (file)
@@ -1402,6 +1402,13 @@ CheckStatus check_field_access(AstFieldAccess** pfield) {
     }
 
     if (!type_lookup_member(field->expr->type, field->field, &smem)) {
+        if (field->expr->type->kind == Type_Kind_Array) {
+            if (!strcmp(field->field, "count")) {
+                *pfield = (AstFieldAccess *) make_int_literal(context.ast_alloc, field->expr->type->Array.count);
+                return Check_Success;
+            }
+        }
+
         AstType* type_node = field->expr->type->ast_type;
         AstNode* n = try_symbol_raw_resolve_from_node((AstNode *) type_node, field->field);
         if (n) {
index 785e3232d89974bbecbec5010e28209bfe628989..175e826a15c3aba87f8b9a8be977fd14b3701275 100644 (file)
@@ -1210,6 +1210,7 @@ b32 type_is_array_accessible(Type* type) {
 
 b32 type_is_structlike(Type* type) {
     if (type == NULL) return 0;
+    if (type->kind == Type_Kind_Array) return 1;
     if (type->kind == Type_Kind_Struct) return 1;
     if (type->kind == Type_Kind_Slice)  return 1;
     if (type->kind == Type_Kind_DynArray) return 1;