Started some fixes for array support. Not entirely there yet.

This commit is contained in:
2025-09-17 21:37:53 +02:00
parent 89904824bb
commit 50a404984d
8 changed files with 58 additions and 65 deletions

View File

@@ -727,13 +727,12 @@ array_access :: (parse_state : *Parse_State, left : *AST_Node) -> *AST_Node {
identifier := parse_state.ctx.tokens[parse_state.current_token_index - 3];
left_bracket := parse_state.ctx.tokens[parse_state.current_token_index - 2];
array_access := make_node(parse_state, .Unary);
array_access := make_node(parse_state, .Binary);
array_access.token = left_bracket;
array_index := expression(parse_state);
add_child(array_access, left);
add_child(array_access, array_index);
add_child(left, array_access);
consume(parse_state, .TOKEN_RIGHTBRACKET, "Expected ']' after array index.");
source_location : Source_Range;
@@ -750,8 +749,8 @@ array_access :: (parse_state : *Parse_State, left : *AST_Node) -> *AST_Node {
}
source_location.end = parse_state.previous;
left.source_location = source_location;
return left;
array_access.source_location = source_location;
return array_access;
}
unary :: (parse_state : *Parse_State, left : *AST_Node) -> *AST_Node {
@@ -1368,6 +1367,11 @@ function_declaration :: (parse_state : *Parse_State, identifier_token : *Token,
return node;
}
buffer :: (state : *Parse_State, identifier_token : *Token = null) -> *AST_Node {
internal_error_message(*state.ctx.messages, "Buffers are not yet implemented in the language.", state.ctx.file.path);
return null;
}
constant_buffer :: (parse_state : *Parse_State, identifier_token : *Token = null) -> *AST_Node {
node : *AST_Node = make_node(parse_state, .CBuffer);
source_location : Source_Range;
@@ -1430,6 +1434,8 @@ const_declaration :: (parse_state : *Parse_State, identifier_token : *Token) ->
return function_declaration(parse_state, identifier_token, .None);
} else if match(parse_state, .TOKEN_CONSTANT_BUFFER) {
return constant_buffer(parse_state, identifier_token);
} else if match(parse_state, .TOKEN_BUFFER) {
return buffer(parse_state, identifier_token);
}
return error_node(parse_state, tprint("Couldn't parse constant declaration at token %\n", parse_state.current.*));
}