diff options
| author | Eugen Wissner <belka@caraus.de> | 2026-01-10 12:11:38 +0100 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2026-01-10 12:11:38 +0100 |
| commit | 30e18517abf7bfabdedcb62400e2fd148a414a92 (patch) | |
| tree | dc69a77ac0a91e6b36cedf9844ea0a1ff2ee1458 /boot/stage17 | |
| parent | 396c329b63e40eae6ee752b6ce3c050d9281cbec (diff) | |
| download | elna-30e18517abf7bfabdedcb62400e2fd148a414a92.tar.gz | |
Fix static arrays in type expressions
Diffstat (limited to 'boot/stage17')
| -rw-r--r-- | boot/stage17/cl.elna | 24 |
1 files changed, 16 insertions, 8 deletions
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; |
