Started some fixes for array support. Not entirely there yet.
This commit is contained in:
16
Parsing.jai
16
Parsing.jai
@@ -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.*));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user