New approach, new lexer

This commit is contained in:
Krzosa Karol
2022-05-06 10:13:16 +02:00
parent 557dde1936
commit e3b5e9b33a
33 changed files with 3331 additions and 784 deletions

View File

@@ -80,12 +80,34 @@ string_fmtv(Arena *arena, const char *str, va_list args1) {
return (String){(U8 *)result, len};
}
#define STRING_FMT(arena, str, result) \
va_list args1; \
va_start(args1, str); \
String result = string_fmtv(arena, str, args1); \
va_end(args1)
function String
string_fmt(Arena *arena, const char *str, ...) {
va_list args1;
va_start(args1, str);
String result = string_fmtv(arena, str, args1);
va_end(args1);
STRING_FMT(arena, str, result);
return result;
}
function void
string_listf(Arena *arena, String_List *list, const char *str, ...){
STRING_FMT(arena, str, string);
String_Node *node = arena_push_struct(arena, String_Node);
node->string = string;
SLLQueuePush(list->first, list->last, node);
list->char_count += node->string.len;
list->node_count += 1;
}
function String
string_list_flatten(Arena *arena, String_List *list){
String result = {arena_push_size(arena, list->char_count + 1)};
for(String_Node *node = list->first; node; node=node->next){
memory_copy(result.str+result.len, node->str, node->len);
result.len += node->len;
}
return result;
}