Add ReduceID type

This commit is contained in:
Josh Holtrop 2023-07-10 21:42:44 -04:00
parent f973e9dc2c
commit 9dbae78724

View File

@ -447,6 +447,8 @@ class <%= @classname %>
static class Parser static class Parser
{ {
alias ReduceID = <%= get_type_for(@parser.reduce_table.size) %>;
private struct Shift private struct Shift
{ {
uint symbol; uint symbol;
@ -465,8 +467,8 @@ class <%= @classname %>
{ {
uint shift_table_index; uint shift_table_index;
uint n_shift_entries; uint n_shift_entries;
uint reduce_table_index; ReduceID reduce_table_index;
uint n_reduce_entries; ReduceID n_reduce_entries;
} }
private struct StateValue private struct StateValue
@ -561,7 +563,7 @@ class <%= @classname %>
continue; continue;
} }
uint reduce_index = check_reduce(statevalues[$-1].state, token); size_t reduce_index = check_reduce(statevalues[$-1].state, token);
if (reduce_index != INVALID_ID) if (reduce_index != INVALID_ID)
{ {
/* We have something to reduce. */ /* We have something to reduce. */
@ -612,11 +614,11 @@ class <%= @classname %>
return INVALID_ID; return INVALID_ID;
} }
private uint check_reduce(uint state, Token token) private size_t check_reduce(uint state, Token token)
{ {
uint start = states[state].reduce_table_index; size_t start = states[state].reduce_table_index;
uint end = start + states[state].n_reduce_entries; size_t end = start + states[state].n_reduce_entries;
for (uint i = start; i < end; i++) for (size_t i = start; i < end; i++)
{ {
if ((reduces[i].token == token) || if ((reduces[i].token == token) ||
(reduces[i].token == INVALID_TOKEN_ID)) (reduces[i].token == INVALID_TOKEN_ID))