From 30e18517abf7bfabdedcb62400e2fd148a414a92 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Sat, 10 Jan 2026 12:11:38 +0100 Subject: Fix static arrays in type expressions --- boot/stage17/cl.elna | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'boot/stage17') diff --git a/boot/stage17/cl.elna b/boot/stage17/cl.elna index e1a8e81..70c0348 100644 --- a/boot/stage17/cl.elna +++ b/boot/stage17/cl.elna @@ -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; -- cgit v1.2.3