From: Brendan Hansen Date: Tue, 12 Oct 2021 03:29:55 +0000 (-0500) Subject: maybe fixed array literals X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=2585746d6f108a09f304bfff00c502a7f524677d;p=onyx.git maybe fixed array literals --- diff --git a/bin/onyx b/bin/onyx index 00f961ef..bda45c07 100755 Binary files a/bin/onyx and b/bin/onyx differ diff --git a/src/astnodes.c b/src/astnodes.c index 2117092b..2d1f1e8b 100644 --- a/src/astnodes.c +++ b/src/astnodes.c @@ -535,7 +535,21 @@ b32 unify_node_and_type_(AstTyped** pnode, Type* type, b32 permanent) { // just assume that it works and don't submit the entities. if (!permanent) return 1; - node->type = type; + Type* array_type=NULL; + switch (type->kind) { + case Type_Kind_Array: array_type = type; break; + case Type_Kind_Slice: { + Type* elem_type = type->Slice.elem; + AstArrayLiteral* al = (AstArrayLiteral *) node; + array_type = type_make_array(context.ast_alloc, elem_type, bh_arr_length(al->values)); + + break; + } + + default: assert(0); + } + + node->type = array_type; node->flags |= Ast_Flag_Array_Literal_Typed; add_entities_for_node(NULL, (AstNode *) node, NULL, NULL); diff --git a/src/checker.c b/src/checker.c index 74b8b612..8b175999 100644 --- a/src/checker.c +++ b/src/checker.c @@ -1115,8 +1115,8 @@ CheckStatus check_struct_literal(AstStructLiteral* sl) { CheckStatus check_array_literal(AstArrayLiteral* al) { // :Idempotency if ((al->flags & Ast_Flag_Array_Literal_Typed) == 0) { - if (al->atnode == NULL) - YIELD(al->token->pos, "Waiting for array literal type to be known."); + if (al->atnode == NULL) return Check_Success; + // YIELD(al->token->pos, "Waiting for array literal type to be known."); if (!node_is_type((AstNode *) al->atnode)) ERROR(al->token->pos, "Array type is not a type.");