Fix static arrays in type expressions

This commit is contained in:
2026-01-10 12:11:38 +01:00
parent 396c329b63
commit 30e18517ab
2 changed files with 34 additions and 21 deletions

View File

@@ -1841,18 +1841,22 @@ var
integer_token: Word;
integer_length: Word;
result: ^ElnaTreeIntegerLiteral;
buffer: Word;
begin
result := malloc(ElnaTreeIntegerLiteral_size());
(* TODO: Convert the integer string to a number. *)
integer_token := _elna_lexer_global_get_start();
integer_length := _elna_lexer_global_get_end();
integer_length := integer_length - integer_token;
integer_length := _elna_lexer_global_get_end() - integer_token;
_elna_lexer_skip_token();
buffer := malloc(integer_length + 1);
bzero(buffer, integer_length + 1);
memcpy(buffer, integer_token, integer_length);
result^.kind := ElnaTreeKind.integer_literal;
result^.value := integer_token;
result^.length := integer_length;
result^.value := atoi(buffer);
result^.length := 0;
result^.type_decoration := nil;
return result
@@ -3382,12 +3386,12 @@ begin
result := malloc(ElnaTypeArray_size());
base := elna_name_type_expression(parser_node^.base);
(* Expected to be an integer literal for now. *)
(* TODO: Expected to be an integer literal for now. *)
length := parser_node^.length;
result^.kind := ElnaTypeKind.pointer;
result^.kind := ElnaTypeKind.array;
(* Array size in bytes. *)
result^.size := base^.size * length;
result^.size := base^.size * length^.value;
result^.base := base;
result^.length := length^.value;
@@ -3476,7 +3480,7 @@ begin
result := malloc(ElnaTreeArrayTypeExpression_size());
result^.kind := ElnaTreeKind.array_type_expression;
result^.base := elna_parser_binary_expression();
result^.length := elna_parser_binary_expression();
(* Read and skip square bracket. *)
_elna_lexer_read_token(@token_kind);
@@ -5457,6 +5461,10 @@ begin
result := ElnaLexerKind.dot
elsif character = '^' then
result := ElnaLexerKind.hat
elsif character = '[' then
result := ElnaLexerKind.left_square
elsif character = ']' then
result := ElnaLexerKind.right_square
end;
return result
end;