adding arena (p3)

This commit is contained in:
Allen Webster
2021-07-20 21:56:25 -07:00
parent ba20ee9b14
commit 863834ad6a
7 changed files with 54 additions and 32 deletions
+5
View File
@@ -949,6 +949,7 @@ main:
@see(MD_String8Node) @see(MD_String8Node)
@see(MD_String8) @see(MD_String8)
@func MD_S8ListPush: { @func MD_S8ListPush: {
arena: *MD_Arena,
list: *MD_String8List, list: *MD_String8List,
string: MD_String8, string: MD_String8,
}; };
@@ -988,6 +989,7 @@ main:
@see(MD_String8Node) @see(MD_String8Node)
@see(MD_S8Split) @see(MD_S8Split)
@func MD_S8ListJoin: { @func MD_S8ListJoin: {
arena: *MD_Arena,
list: MD_String8List, list: MD_String8List,
join: *MD_StringJoin, join: *MD_StringJoin,
return: MD_String8, return: MD_String8,
@@ -1001,6 +1003,7 @@ main:
@send(Strings) @send(Strings)
@func MD_S8Stylize: { @func MD_S8Stylize: {
arena: *MD_Arena,
string: MD_String8, string: MD_String8,
word_style: MD_IdentifierStyle, word_style: MD_IdentifierStyle,
separator: MD_String8, separator: MD_String8,
@@ -1045,6 +1048,7 @@ main:
@send(Nodes) @send(Nodes)
@doc("Builds a string list for all bits set in @code 'flags', with each string being the name of one of the flags that is set.") @doc("Builds a string list for all bits set in @code 'flags', with each string being the name of one of the flags that is set.")
@func MD_StringListFromNodeFlags: { @func MD_StringListFromNodeFlags: {
arena: *MD_Arena,
flags: MD_NodeFlags, flags: MD_NodeFlags,
return: MD_String8List, return: MD_String8List,
}; };
@@ -1692,6 +1696,7 @@ MD_ParseWholeFile:
@see(MD_CmdLineB32FromString) @see(MD_CmdLineB32FromString)
@func MD_MakeCmdLineFromOptions: @func MD_MakeCmdLineFromOptions:
{ {
arena: *MD_Arena,
options: MD_String8List; options: MD_String8List;
return: MD_CmdLine; return: MD_CmdLine;
} }
+4 -2
View File
@@ -2,6 +2,8 @@
#include "md.h" #include "md.h"
#include "md.c" #include "md.c"
static MD_Arena *arena = 0;
#define INDENT_SPACES 2 #define INDENT_SPACES 2
static void Print(FILE* file, int indent_count, char* fmt, ...) { static void Print(FILE* file, int indent_count, char* fmt, ...) {
for(int i = 0; i < indent_count*INDENT_SPACES; i += 1) for(int i = 0; i < indent_count*INDENT_SPACES; i += 1)
@@ -31,7 +33,7 @@ static void PrintNode(MD_Node* node, FILE* file, int indent_count) {
Print(file, indent_count+1, "Flags: %s,\n", binary_flags); Print(file, indent_count+1, "Flags: %s,\n", binary_flags);
Print(file, indent_count+1, "Flag Names: ", binary_flags); Print(file, indent_count+1, "Flag Names: ", binary_flags);
MD_String8List flags_list = MD_StringListFromNodeFlags(node->flags); MD_String8List flags_list = MD_StringListFromNodeFlags(arena, node->flags);
MD_StringJoin join = MD_ZERO_STRUCT; MD_StringJoin join = MD_ZERO_STRUCT;
join.mid = MD_S8CString(", "); join.mid = MD_S8CString(", ");
@@ -62,7 +64,7 @@ static void PrintNode(MD_Node* node, FILE* file, int indent_count) {
int main(int argument_count, char **arguments) int main(int argument_count, char **arguments)
{ {
MD_Arena *arena = MD_ArenaNew(1ull << 40); arena = MD_ArenaNew(1ull << 40);
// NOTE(pmh): Parse all the files passed in via command line. // NOTE(pmh): Parse all the files passed in via command line.
MD_Node *list = MD_MakeList(); MD_Node *list = MD_MakeList();
@@ -37,7 +37,8 @@ int main(int argument_count, char **arguments)
arena = MD_ArenaNew(1ull << 40); arena = MD_ArenaNew(1ull << 40);
//~ NOTE(rjf): Parse command line arguments. //~ NOTE(rjf): Parse command line arguments.
MD_CmdLine cmdln = MD_MakeCmdLineFromOptions(MD_StringListFromArgCV(argument_count, arguments)); MD_String8List arg_list = MD_StringListFromArgCV(arena, argument_count, arguments);
MD_CmdLine cmdln = MD_MakeCmdLineFromOptions(arena, arg_list);
MD_String8 site_info_path = MD_S8ListJoin(MD_CmdLineValuesFromString(cmdln, MD_S8Lit("siteinfo")), 0); MD_String8 site_info_path = MD_S8ListJoin(MD_CmdLineValuesFromString(cmdln, MD_S8Lit("siteinfo")), 0);
MD_String8 page_dir_path = MD_S8ListJoin(MD_CmdLineValuesFromString(cmdln, MD_S8Lit("pagedir")), 0); MD_String8 page_dir_path = MD_S8ListJoin(MD_CmdLineValuesFromString(cmdln, MD_S8Lit("pagedir")), 0);
if(!MD_CmdLineB32FromString(cmdln, MD_S8Lit("siteinfo")) || if(!MD_CmdLineB32FromString(cmdln, MD_S8Lit("siteinfo")) ||
@@ -406,7 +407,8 @@ GeneratePageContent(MD_Map *index_table, SiteInfo *site_info, PageInfo *page_inf
{ {
MD_S8Lit("\n\n"), MD_S8Lit("\n\n"),
}; };
MD_String8List strlist = MD_S8Split(node->string, sizeof(splits)/sizeof(splits[0]), splits); MD_String8List strlist = MD_S8Split(arena, node->string, sizeof(splits)/sizeof(splits[0]),
splits);
for(MD_String8Node *strnode = strlist.first; strnode; strnode = strnode->next) for(MD_String8Node *strnode = strlist.first; strnode; strnode = strnode->next)
{ {
+2 -1
View File
@@ -183,7 +183,8 @@ int main(int argument_count, char **arguments)
MD_Arena *arena = MD_ArenaNew(1ull << 40); MD_Arena *arena = MD_ArenaNew(1ull << 40);
//- rjf: parse command line //- rjf: parse command line
MD_CmdLine cmdln = MD_MakeCmdLineFromOptions(MD_StringListFromArgCV(argument_count, arguments)); MD_String8List arg_list = MD_StringListFromArgCV(arena, argument_count, arguments);
MD_CmdLine cmdln = MD_MakeCmdLineFromOptions(arena, arg_list);
//- rjf: parse all input files //- rjf: parse all input files
MD_Node *file_list = MD_MakeList(); MD_Node *file_list = MD_MakeList();
+17 -16
View File
@@ -682,9 +682,9 @@ MD_S8Fmt(MD_Arena *arena, char *fmt, ...)
} }
MD_FUNCTION_IMPL void MD_FUNCTION_IMPL void
MD_S8ListPush(MD_String8List *list, MD_String8 string) MD_S8ListPush(MD_Arena *arena, MD_String8List *list, MD_String8 string)
{ {
MD_String8Node *node = MD_PushArray(MD_String8Node, 1); MD_String8Node *node = MD_PushArrayAr(arena, MD_String8Node, 1);
node->string = string; node->string = string;
MD_QueuePush(list->first, list->last, node); MD_QueuePush(list->first, list->last, node);
@@ -714,7 +714,7 @@ MD_S8ListConcat(MD_String8List *list, MD_String8List *to_push)
} }
MD_FUNCTION_IMPL MD_String8List MD_FUNCTION_IMPL MD_String8List
MD_S8Split(MD_String8 string, int split_count, MD_String8 *splits) MD_S8Split(MD_Arena *arena, MD_String8 string, int split_count, MD_String8 *splits)
{ {
MD_String8List list = MD_ZERO_STRUCT; MD_String8List list = MD_ZERO_STRUCT;
@@ -740,7 +740,7 @@ MD_S8Split(MD_String8 string, int split_count, MD_String8 *splits)
if(match) if(match)
{ {
MD_String8 split_string = MD_S8(string.str + split_start, i - split_start); MD_String8 split_string = MD_S8(string.str + split_start, i - split_start);
MD_S8ListPush(&list, split_string); MD_S8ListPush(arena, &list, split_string);
split_start = i + splits[split_idx].size; split_start = i + splits[split_idx].size;
i += splits[split_idx].size - 1; i += splits[split_idx].size - 1;
was_split = 1; was_split = 1;
@@ -751,7 +751,7 @@ MD_S8Split(MD_String8 string, int split_count, MD_String8 *splits)
if(was_split == 0 && i == string.size - 1) if(was_split == 0 && i == string.size - 1)
{ {
MD_String8 split_string = MD_S8(string.str + split_start, i+1 - split_start); MD_String8 split_string = MD_S8(string.str + split_start, i+1 - split_start);
MD_S8ListPush(&list, split_string); MD_S8ListPush(arena, &list, split_string);
break; break;
} }
} }
@@ -798,7 +798,8 @@ MD_S8ListJoin(MD_String8List list, MD_StringJoin *join_ptr)
} }
MD_FUNCTION_IMPL MD_String8 MD_FUNCTION_IMPL MD_String8
MD_S8Stylize(MD_String8 string, MD_IdentifierStyle word_style, MD_String8 separator) MD_S8Stylize(MD_Arena *arena, MD_String8 string, MD_IdentifierStyle word_style,
MD_String8 separator)
{ {
MD_String8 result = MD_ZERO_STRUCT; MD_String8 result = MD_ZERO_STRUCT;
@@ -833,7 +834,7 @@ MD_S8Stylize(MD_String8 string, MD_IdentifierStyle word_style, MD_String8 separa
word.size += 1; word.size += 1;
} }
making_word = 0; making_word = 0;
MD_S8ListPush(&words, word); MD_S8ListPush(arena, &words, word);
} }
else else
{ {
@@ -1353,7 +1354,7 @@ MD_StringFromNodeKind(MD_NodeKind kind)
} }
MD_FUNCTION_IMPL MD_String8List MD_FUNCTION_IMPL MD_String8List
MD_StringListFromNodeFlags(MD_NodeFlags flags) MD_StringListFromNodeFlags(MD_Arena *arena, MD_NodeFlags flags)
{ {
// NOTE(rjf): @maintenance Must be kept in sync with MD_NodeFlags enum. // NOTE(rjf): @maintenance Must be kept in sync with MD_NodeFlags enum.
static char *flag_cstrs[] = static char *flag_cstrs[] =
@@ -1387,7 +1388,7 @@ MD_StringListFromNodeFlags(MD_NodeFlags flags)
{ {
if(flags & (1ull << i)) if(flags & (1ull << i))
{ {
MD_S8ListPush(&list, MD_S8CString(flag_cstrs[i])); MD_S8ListPush(arena, &list, MD_S8CString(flag_cstrs[i]));
} }
} }
return list; return list;
@@ -2305,7 +2306,7 @@ MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset)
for(int i_byte = 0; i_byte < bad_token.raw_string.size; ++i_byte) for(int i_byte = 0; i_byte < bad_token.raw_string.size; ++i_byte)
{ {
MD_u8 b = bad_token.raw_string.str[i_byte]; MD_u8 b = bad_token.raw_string.str[i_byte];
MD_S8ListPush(&bytes, MD_CStyleHexStringFromU64(b, 1)); MD_S8ListPush(arena, &bytes, MD_CStyleHexStringFromU64(b, 1));
} }
MD_StringJoin join = MD_ZERO_STRUCT; MD_StringJoin join = MD_ZERO_STRUCT;
@@ -2835,18 +2836,18 @@ MD_DebugOutputTree(FILE *file, MD_Node *node, int indent_spaces)
//~ Command Line Argument Helper //~ Command Line Argument Helper
MD_FUNCTION MD_String8List MD_FUNCTION MD_String8List
MD_StringListFromArgCV(int argument_count, char **arguments) MD_StringListFromArgCV(MD_Arena *arena, int argument_count, char **arguments)
{ {
MD_String8List options = MD_ZERO_STRUCT; MD_String8List options = MD_ZERO_STRUCT;
for(int i = 1; i < argument_count; i += 1) for(int i = 1; i < argument_count; i += 1)
{ {
MD_S8ListPush(&options, MD_S8CString(arguments[i])); MD_S8ListPush(arena, &options, MD_S8CString(arguments[i]));
} }
return options; return options;
} }
MD_FUNCTION MD_CmdLine MD_FUNCTION MD_CmdLine
MD_MakeCmdLineFromOptions(MD_String8List options) MD_MakeCmdLineFromOptions(MD_Arena *arena, MD_String8List options)
{ {
MD_CmdLine cmdln = MD_ZERO_STRUCT; MD_CmdLine cmdln = MD_ZERO_STRUCT;
@@ -2893,7 +2894,7 @@ MD_MakeCmdLineFromOptions(MD_String8List options)
//- rjf: push first value //- rjf: push first value
if(first_value.size != 0) if(first_value.size != 0)
{ {
MD_S8ListPush(&option_values, first_value); MD_S8ListPush(arena, &option_values, first_value);
} }
//- rjf: scan next string values, add them to option values until we hit a lack //- rjf: scan next string values, add them to option values until we hit a lack
@@ -2912,7 +2913,7 @@ MD_MakeCmdLineFromOptions(MD_String8List options)
{ {
if(start != i) if(start != i)
{ {
MD_S8ListPush(&option_values, MD_S8Substring(value_str, start, i)); MD_S8ListPush(arena, &option_values, MD_S8Substring(value_str, start, i));
} }
start = i+1; start = i+1;
} }
@@ -2949,7 +2950,7 @@ MD_MakeCmdLineFromOptions(MD_String8List options)
//- rjf: this argument is not an option, push it to regular inputs list. //- rjf: this argument is not an option, push it to regular inputs list.
else else
{ {
MD_S8ListPush(&cmdln.inputs, n->string); MD_S8ListPush(arena, &cmdln.inputs, n->string);
} }
} }
+10 -6
View File
@@ -761,12 +761,15 @@ MD_FUNCTION MD_String8 MD_S8Fmt(MD_Arena *arena, char *fmt, ...);
#define MD_S8VArg(s) (int)(s).size, (s).str #define MD_S8VArg(s) (int)(s).size, (s).str
MD_FUNCTION void MD_S8ListPush(MD_String8List *list, MD_String8 string); MD_FUNCTION void MD_S8ListPush(MD_Arena *arena, MD_String8List *list,
MD_String8 string);
MD_FUNCTION void MD_S8ListConcat(MD_String8List *list, MD_String8List *to_push); MD_FUNCTION void MD_S8ListConcat(MD_String8List *list, MD_String8List *to_push);
MD_FUNCTION MD_String8List MD_S8Split(MD_String8 string, int split_count, MD_String8 *splits); MD_FUNCTION MD_String8List MD_S8Split(MD_Arena *arena, MD_String8 string, int split_count,
MD_String8 *splits);
MD_FUNCTION MD_String8 MD_S8ListJoin(MD_String8List list, MD_StringJoin *join); MD_FUNCTION MD_String8 MD_S8ListJoin(MD_String8List list, MD_StringJoin *join);
MD_FUNCTION MD_String8 MD_S8Stylize(MD_String8 string, MD_IdentifierStyle word_style, MD_String8 separator); MD_FUNCTION MD_String8 MD_S8Stylize(MD_Arena *arena, MD_String8 string,
MD_IdentifierStyle style, MD_String8 separator);
//~ Unicode Conversions //~ Unicode Conversions
@@ -804,7 +807,7 @@ MD_FUNCTION MD_String8 MD_CStyleHexStringFromU64(MD_u64 x, MD_b32 caps);
//~ Enum/Flag Strings //~ Enum/Flag Strings
MD_FUNCTION MD_String8 MD_StringFromNodeKind(MD_NodeKind kind); MD_FUNCTION MD_String8 MD_StringFromNodeKind(MD_NodeKind kind);
MD_FUNCTION MD_String8List MD_StringListFromNodeFlags(MD_NodeFlags flags); MD_FUNCTION MD_String8List MD_StringListFromNodeFlags(MD_Arena *arena, MD_NodeFlags flags);
//~ Map Table Data Structure //~ Map Table Data Structure
@@ -896,8 +899,9 @@ MD_FUNCTION void MD_DebugOutputTree(FILE *file, MD_Node *node, int indent_spaces
//~ Command Line Argument Helper //~ Command Line Argument Helper
MD_FUNCTION MD_String8List MD_StringListFromArgCV(int argument_count, char **arguments); MD_FUNCTION MD_String8List MD_StringListFromArgCV(MD_Arena *arena, int argument_count,
MD_FUNCTION MD_CmdLine MD_MakeCmdLineFromOptions(MD_String8List options); char **arguments);
MD_FUNCTION MD_CmdLine MD_MakeCmdLineFromOptions(MD_Arena *arena, MD_String8List options);
MD_FUNCTION MD_String8List MD_CmdLineValuesFromString(MD_CmdLine cmdln, MD_String8 name); MD_FUNCTION MD_String8List MD_CmdLineValuesFromString(MD_CmdLine cmdln, MD_String8 name);
MD_FUNCTION MD_b32 MD_CmdLineB32FromString(MD_CmdLine cmdln, MD_String8 name); MD_FUNCTION MD_b32 MD_CmdLineB32FromString(MD_CmdLine cmdln, MD_String8 name);
MD_FUNCTION MD_i64 MD_CmdLineI64FromString(MD_CmdLine cmdln, MD_String8 name); MD_FUNCTION MD_i64 MD_CmdLineI64FromString(MD_CmdLine cmdln, MD_String8 name);
+12 -5
View File
@@ -416,19 +416,23 @@ int main(void)
Test("Style Strings") Test("Style Strings")
{ {
{ {
MD_String8 str = MD_S8Stylize(MD_S8Lit("THIS_IS_A_TEST"), MD_IdentifierStyle_UpperCamelCase, MD_S8Lit(" ")); MD_String8 str = MD_S8Stylize(arena, MD_S8Lit("THIS_IS_A_TEST"),
MD_IdentifierStyle_UpperCamelCase, MD_S8Lit(" "));
TestResult(MD_S8Match(str, MD_S8Lit("This Is A Test"), 0)); TestResult(MD_S8Match(str, MD_S8Lit("This Is A Test"), 0));
} }
{ {
MD_String8 str = MD_S8Stylize(MD_S8Lit("this_is_a_test"), MD_IdentifierStyle_UpperCamelCase, MD_S8Lit(" ")); MD_String8 str = MD_S8Stylize(arena, MD_S8Lit("this_is_a_test"),
MD_IdentifierStyle_UpperCamelCase, MD_S8Lit(" "));
TestResult(MD_S8Match(str, MD_S8Lit("This Is A Test"), 0)); TestResult(MD_S8Match(str, MD_S8Lit("This Is A Test"), 0));
} }
{ {
MD_String8 str = MD_S8Stylize(MD_S8Lit("ThisIsATest"), MD_IdentifierStyle_UpperCamelCase, MD_S8Lit(" ")); MD_String8 str = MD_S8Stylize(arena, MD_S8Lit("ThisIsATest"),
MD_IdentifierStyle_UpperCamelCase, MD_S8Lit(" "));
TestResult(MD_S8Match(str, MD_S8Lit("This Is A Test"), 0)); TestResult(MD_S8Match(str, MD_S8Lit("This Is A Test"), 0));
} }
{ {
MD_String8 str = MD_S8Stylize(MD_S8Lit("Here is another test."), MD_IdentifierStyle_UpperCamelCase, MD_S8Lit("")); MD_String8 str = MD_S8Stylize(arena, MD_S8Lit("Here is another test."),
MD_IdentifierStyle_UpperCamelCase, MD_S8Lit(""));
TestResult(MD_S8Match(str, MD_S8Lit("HereIsAnotherTest."), 0)); TestResult(MD_S8Match(str, MD_S8Lit("HereIsAnotherTest."), 0));
} }
} }
@@ -437,7 +441,10 @@ int main(void)
{ {
TestResult(MD_S8Match(MD_StringFromNodeKind(MD_NodeKind_Main), MD_S8Lit("Main"), 0)); TestResult(MD_S8Match(MD_StringFromNodeKind(MD_NodeKind_Main), MD_S8Lit("Main"), 0));
TestResult(MD_S8Match(MD_StringFromNodeKind(MD_NodeKind_Main), MD_S8Lit("Main"), 0)); TestResult(MD_S8Match(MD_StringFromNodeKind(MD_NodeKind_Main), MD_S8Lit("Main"), 0));
MD_String8List list = MD_StringListFromNodeFlags(MD_NodeFlag_StringLiteral | MD_NodeFlag_HasParenLeft | MD_NodeFlag_IsBeforeSemicolon); MD_String8List list = MD_StringListFromNodeFlags(arena,
MD_NodeFlag_StringLiteral |
MD_NodeFlag_HasParenLeft |
MD_NodeFlag_IsBeforeSemicolon);
MD_b32 match = 1; MD_b32 match = 1;
for(MD_String8Node *node = list.first; node; node = node->next) for(MD_String8Node *node = list.first; node; node = node->next)
{ {