unittests #9
							
								
								
									
										22
									
								
								src/lexer.c
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								src/lexer.c
									
									
									
									
									
								
							| @@ -8,11 +8,11 @@ | |||||||
| error_t *const err_lexer_already_open = &(error_t){ | error_t *const err_lexer_already_open = &(error_t){ | ||||||
|     .message = |     .message = | ||||||
|         "Can't open on a lexer object that is already opened. Close it first."}; |         "Can't open on a lexer object that is already opened. Close it first."}; | ||||||
| error_t *const err_prefix_too_large = | error_t *const err_lexer_prefix_too_large = | ||||||
|     &(error_t){.message = "Prefix too large for internal lexer buffer"}; |     &(error_t){.message = "Prefix too large for internal lexer buffer"}; | ||||||
| error_t *const err_buffer_underrun = &(error_t){ | error_t *const err_lexer_buffer_underrun = &(error_t){ | ||||||
|     .message = "Buffer does not contain enough characters for lexer_consume_n"}; |     .message = "Buffer does not contain enough characters for lexer_consume_n"}; | ||||||
| error_t *const err_consume_excessive_length = | error_t *const err_lexer_consume_excessive_length = | ||||||
|     &(error_t){.message = "Too many valid characters to consume"}; |     &(error_t){.message = "Too many valid characters to consume"}; | ||||||
|  |  | ||||||
| typedef bool (*char_predicate_t)(char); | typedef bool (*char_predicate_t)(char); | ||||||
| @@ -177,9 +177,9 @@ error_t *lexer_not_implemented(lexer_t *lex, lexer_token_t *token) { | |||||||
| error_t *lexer_consume_n(lexer_t *lex, const size_t len, | error_t *lexer_consume_n(lexer_t *lex, const size_t len, | ||||||
|                          char buffer[static len], const size_t n) { |                          char buffer[static len], const size_t n) { | ||||||
|     if (lex->buffer_count < n) |     if (lex->buffer_count < n) | ||||||
|         return err_buffer_underrun; |         return err_lexer_buffer_underrun; | ||||||
|     if (n > len) |     if (n > len) | ||||||
|         return err_consume_excessive_length; |         return err_lexer_consume_excessive_length; | ||||||
|  |  | ||||||
|     memcpy(buffer, lex->buffer, n); |     memcpy(buffer, lex->buffer, n); | ||||||
|     lexer_shift_buffer(lex, n); |     lexer_shift_buffer(lex, n); | ||||||
| @@ -224,7 +224,7 @@ error_t *lexer_consume(lexer_t *lex, const size_t n, char buffer[static n], | |||||||
|                 (lex->buffer_count > 0 && is_valid(lex->buffer[0])); |                 (lex->buffer_count > 0 && is_valid(lex->buffer[0])); | ||||||
|  |  | ||||||
|         if (have_more_characters && *n_consumed == buffer_size) { |         if (have_more_characters && *n_consumed == buffer_size) { | ||||||
|             return err_consume_excessive_length; |             return err_lexer_consume_excessive_length; | ||||||
|         } |         } | ||||||
|     } while (have_more_characters); |     } while (have_more_characters); | ||||||
|     return nullptr; |     return nullptr; | ||||||
| @@ -294,7 +294,7 @@ error_t *lexer_next_number(lexer_t *lex, lexer_token_t *token) { | |||||||
|  |  | ||||||
|     error_t *err = lexer_consume(lex, max_number_length - so_far, |     error_t *err = lexer_consume(lex, max_number_length - so_far, | ||||||
|                                  buffer + so_far, is_valid, &n); |                                  buffer + so_far, is_valid, &n); | ||||||
|     if (err == err_consume_excessive_length) { |     if (err == err_lexer_consume_excessive_length) { | ||||||
|         token->id = TOKEN_ERROR; |         token->id = TOKEN_ERROR; | ||||||
|         token->explanation = |         token->explanation = | ||||||
|             "Number length exceeds the maximum of 128 characters"; |             "Number length exceeds the maximum of 128 characters"; | ||||||
| @@ -324,7 +324,7 @@ error_t *lexer_next_number(lexer_t *lex, lexer_token_t *token) { | |||||||
|     if (suffix_length > 0) { |     if (suffix_length > 0) { | ||||||
|         err = lexer_consume_n(lex, max_number_length - so_far, buffer + so_far, |         err = lexer_consume_n(lex, max_number_length - so_far, buffer + so_far, | ||||||
|                               suffix_length); |                               suffix_length); | ||||||
|         if (err == err_consume_excessive_length) { |         if (err == err_lexer_consume_excessive_length) { | ||||||
|             token->id = TOKEN_ERROR; |             token->id = TOKEN_ERROR; | ||||||
|             token->explanation = |             token->explanation = | ||||||
|                 "Number length exceeds the maximum of 128 characters"; |                 "Number length exceeds the maximum of 128 characters"; | ||||||
| @@ -401,7 +401,7 @@ error_t *lexer_next_identifier(lexer_t *lex, lexer_token_t *token) { | |||||||
|  |  | ||||||
|     error_t *err = lexer_consume(lex, max_identifier_length, buffer, |     error_t *err = lexer_consume(lex, max_identifier_length, buffer, | ||||||
|                                  is_identifier_character, &n); |                                  is_identifier_character, &n); | ||||||
|     if (err == err_consume_excessive_length) { |     if (err == err_lexer_consume_excessive_length) { | ||||||
|         token->id = TOKEN_ERROR; |         token->id = TOKEN_ERROR; | ||||||
|         token->explanation = |         token->explanation = | ||||||
|             "Identifier length exceeds the maximum of 128 characters"; |             "Identifier length exceeds the maximum of 128 characters"; | ||||||
| @@ -444,7 +444,7 @@ error_t *lexer_next_whitespace(lexer_t *lex, lexer_token_t *token) { | |||||||
|  |  | ||||||
|     error_t *err = lexer_consume(lex, max_whitespace_length, buffer, |     error_t *err = lexer_consume(lex, max_whitespace_length, buffer, | ||||||
|                                  is_whitespace_character, &n); |                                  is_whitespace_character, &n); | ||||||
|     if (err == err_consume_excessive_length) { |     if (err == err_lexer_consume_excessive_length) { | ||||||
|         token->id = TOKEN_ERROR; |         token->id = TOKEN_ERROR; | ||||||
|         token->explanation = |         token->explanation = | ||||||
|             "Whitespace length exceeds the maximum of 1024 characters"; |             "Whitespace length exceeds the maximum of 1024 characters"; | ||||||
| @@ -479,7 +479,7 @@ error_t *lexer_next_comment(lexer_t *lex, lexer_token_t *token) { | |||||||
|  |  | ||||||
|     error_t *err = lexer_consume(lex, max_comment_length, buffer, |     error_t *err = lexer_consume(lex, max_comment_length, buffer, | ||||||
|                                  is_comment_character, &n); |                                  is_comment_character, &n); | ||||||
|     if (err == err_consume_excessive_length) { |     if (err == err_lexer_consume_excessive_length) { | ||||||
|         token->id = TOKEN_ERROR; |         token->id = TOKEN_ERROR; | ||||||
|         token->explanation = |         token->explanation = | ||||||
|             "Comment length exceeds the maximum of 1024 characters"; |             "Comment length exceeds the maximum of 1024 characters"; | ||||||
|   | |||||||
| @@ -6,9 +6,9 @@ | |||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
|  |  | ||||||
| extern error_t *const err_lexer_already_open; | extern error_t *const err_lexer_already_open; | ||||||
| extern error_t *const err_prefix_too_large; | extern error_t *const err_lexer_prefix_too_large; | ||||||
| extern error_t *const err_buffer_underrun; | extern error_t *const err_lexer_buffer_underrun; | ||||||
| extern error_t *const err_consume_excessive_length; | extern error_t *const err_lexer_consume_excessive_length; | ||||||
|  |  | ||||||
| typedef enum { | typedef enum { | ||||||
|     TOKEN_ERROR, |     TOKEN_ERROR, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user