small lexer speedup again
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Fri, 11 Jun 2021 19:02:55 +0000 (14:02 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Fri, 11 Jun 2021 19:02:55 +0000 (14:02 -0500)
include/bh.h
src/onyxlex.c

index bf5623efd2c215800739012b2f39181c56b55833..c82ef733eb3f57658fedb15bc06397b5f0af1f60 100644 (file)
@@ -528,7 +528,7 @@ typedef struct bh__arr {
     bh__arrhead(arr)->length += n)
 
 #define bh_arr_push(arr, value)       ( \
-    bh__arr_grow(bh_arr_allocator(arr), (void **) &(arr), sizeof(*(arr)), bh_arr_length(arr) + 1), \
+    bh_arr_length(arr) + 1 > bh_arr_capacity(arr) ? bh__arr_grow(bh_arr_allocator(arr), (void **) &(arr), sizeof(*(arr)), bh_arr_length(arr) + 1) : 0, \
     arr[bh__arrhead(arr)->length++] = value)
 
 #define bh_arr_set_at(arr, n, value) ( \
index 99addd5498b1e085e04e65852d459ca7ae264408..59370246b301cc32ba0ea6ea0fc98d55009a2692 100644 (file)
@@ -92,6 +92,8 @@ static const char* token_type_names[] = {
 #endif
 
 #define char_is_alphanum(c) (((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && (c) <= 'Z') || ((c) >= '0' && (c) <= '9'))
+#define char_is_num(c)      ((c) >= '0' && (c) <= '9')
+#define char_is_alpha(c)    (((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && (c) <= 'Z'))
 
 static inline b32 token_lit(OnyxTokenizer* tokenizer, OnyxToken* tk, char* lit, b32 is_word, TokenType type) {
     i64 len = 0;