@@ -1701,6 +1701,7 @@ struct parsed_statements owl_tree_get_parsed_statements(struct owl_tree *tree) {
17011701 check_for_error(tree);
17021702 return parsed_statements_get(owl_tree_root_ref(tree));
17031703}
1704+ #define HOTFIX_TOKENIZER_ADVANCE_SIZE 256
17041705#define ESCAPE_CHAR(c, info) ((c) == 'b' ? '\b' : (c) == 'f' ? '\f' : (c) == 'n' ? '\n' : (c) == 'r' ? '\r' : (c) == 't' ? '\t' : (c))
17051706#define IGNORE_TOKEN_WRITE(...)
17061707#define IGNORE_TOKEN_READ(...) (0)
@@ -1766,9 +1767,9 @@ struct owl_token_run {
17661767 struct owl_token_run *prev;
17671768 uint16_t number_of_tokens;
17681769 uint16_t lengths_size;
1769- uint8_t lengths[4096 * 2];
1770- uint32_t tokens[4096 ];
1771- uint32_t states[4096 ];
1770+ uint8_t lengths[HOTFIX_TOKENIZER_ADVANCE_SIZE * 2];
1771+ uint32_t tokens[HOTFIX_TOKENIZER_ADVANCE_SIZE ];
1772+ uint32_t states[HOTFIX_TOKENIZER_ADVANCE_SIZE ];
17721773};
17731774struct owl_default_tokenizer {
17741775 const char *text;
@@ -1843,14 +1844,17 @@ static size_t decode_token_length(struct owl_token_run *run, uint16_t *length_of
18431844 return length;
18441845}
18451846static bool OWL_DONT_INLINE owl_default_tokenizer_advance(struct owl_default_tokenizer *tokenizer, struct owl_token_run **previous_run) {
1847+ if (tokenizer->text[tokenizer->offset] == '\0') {
1848+ return false;
1849+ }
18461850 struct owl_token_run *run = malloc(sizeof(struct owl_token_run));
18471851 if (!run) return false;
18481852 uint16_t number_of_tokens = 0;
18491853 uint16_t lengths_size = 0;
18501854 const char *text = tokenizer->text;
18511855 size_t whitespace = tokenizer->whitespace;
18521856 size_t offset = tokenizer->offset;
1853- while (number_of_tokens < 4096 ) {
1857+ while (number_of_tokens < HOTFIX_TOKENIZER_ADVANCE_SIZE ) {
18541858 char c = text[offset];
18551859 if (c == '\0') break;
18561860 size_t whitespace_length = read_whitespace(text + offset, tokenizer->info);
@@ -1975,7 +1979,7 @@ static bool OWL_DONT_INLINE owl_default_tokenizer_advance(struct owl_default_tok
19751979 free(run);
19761980 return false;
19771981 }
1978- if (end_token && number_of_tokens + 1 >= 4096 ) break;
1982+ if (end_token && number_of_tokens + 1 >= HOTFIX_TOKENIZER_ADVANCE_SIZE ) break;
19791983 if (!encode_token_length(run, &lengths_size, token_length, whitespace)) break;
19801984 if (token == 43) {
19811985 write_identifier_token(offset, token_length, tokenizer->info);
@@ -2020,7 +2024,7 @@ static bool OWL_DONT_INLINE owl_default_tokenizer_advance(struct owl_default_tok
20202024 number_of_tokens++;
20212025 offset += token_length;
20222026 if (end_token) {
2023- assert(number_of_tokens < 4096 );
2027+ assert(number_of_tokens < HOTFIX_TOKENIZER_ADVANCE_SIZE );
20242028 run->tokens[number_of_tokens] = 4294967295U;
20252029 number_of_tokens++;
20262030 }
0 commit comments