New approach, new lexer
This commit is contained in:
30
memory.c
30
memory.c
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user