adding arena (p1)

This commit is contained in:
Allen Webster
2021-07-20 21:30:22 -07:00
parent d937a99b51
commit 5e39bc8f2e
10 changed files with 35 additions and 31 deletions
+2 -6
View File
@@ -670,12 +670,6 @@ main:
size: MD_u64,
}
@send(MemoryOperations)
@macro MD_PushArray: { T, c }
@send(MemoryOperations)
@macro MD_PushArrayZero: { T, c }
////////////////////////////////
//~ Characters
@@ -917,6 +911,7 @@ main:
@send(Strings)
@doc("Copies @code 'string' by allocating an entirely new portion of memory and copying the passed string's memory to the newly allocated memory. Returns the copy of @code 'string' using the new memory.")
@func MD_S8Copy: {
arena: *MD_Arena,
string: MD_String8,
return: MD_String8,
};
@@ -1738,6 +1733,7 @@ MD_ParseWholeFile:
@send(FileSystemHelper)
@doc("Uses the C standard library to load the contents of the file with @code 'filename' into an MD_String8.")
@func MD_LoadEntireFile: {
arena: *MD_Arena,
filename: MD_String8,
return: MD_String8,
};
+3 -1
View File
@@ -5,11 +5,13 @@
int main(int argument_count, char **arguments)
{
MD_Arena *arena = MD_ArenaNew(1ull << 40);
// NOTE(rjf): Parse all the files passed in via command line.
MD_Node *list = MD_MakeList();
for(int i = 1; i < argument_count; i += 1)
{
MD_Node *root = MD_ParseWholeFile(MD_S8CString(arguments[i])).node;
MD_Node *root = MD_ParseWholeFile(arena, MD_S8CString(arguments[i])).node;
MD_PushNewReference(list, root);
}
+3 -1
View File
@@ -23,11 +23,13 @@ CleanUp(void)
int main(int argument_count, char **arguments)
{
MD_Arena *arena = MD_ArenaNew(1ull << 40);
// NOTE(rjf): Parse all the files passed in via command line.
MD_Node *list = MD_MakeList();
for(int i = 1; i < argument_count; i += 1)
{
MD_Node *root = MD_ParseWholeFile(MD_S8CString(arguments[i])).node;
MD_Node *root = MD_ParseWholeFile(arena, MD_S8CString(arguments[i])).node;
MD_PushNewReference(list, root);
}
+3 -1
View File
@@ -62,11 +62,13 @@ static void PrintNode(MD_Node* node, FILE* file, int indent_count) {
int main(int argument_count, char **arguments)
{
MD_Arena *arena = MD_ArenaNew(1ull << 40);
// NOTE(pmh): Parse all the files passed in via command line.
MD_Node *list = MD_MakeList();
for(int i = 1; i < argument_count; i += 1)
{
MD_Node *root = MD_ParseWholeFile(MD_S8CString(arguments[i])).node;
MD_Node *root = MD_ParseWholeFile(arena, MD_S8CString(arguments[i])).node;
MD_PushNewReference(list, root);
}
+3 -1
View File
@@ -3,10 +3,12 @@
int main(int argument_count, char **arguments)
{
MD_Arena *arena = MD_ArenaNew(1ull << 40);
MD_Node *list = MD_MakeList();
for(int i = 1; i < argument_count; i += 1)
{
MD_Node *root = MD_ParseWholeFile(MD_S8CString(arguments[i])).node;
MD_Node *root = MD_ParseWholeFile(arena, MD_S8CString(arguments[i])).node;
MD_PushNewReference(list, root);
}
@@ -32,6 +32,7 @@ static void GeneratePageContent(MD_Map *index_table, SiteInfo *site_info, PageIn
int main(int argument_count, char **arguments)
{
MD_Arena *arena = MD_ArenaNew(1ull << 40);
//~ NOTE(rjf): Parse command line arguments.
MD_CmdLine cmdln = MD_MakeCmdLineFromOptions(MD_StringListFromArgCV(argument_count, arguments));
@@ -45,13 +46,13 @@ int main(int argument_count, char **arguments)
}
//~ NOTE(rjf): Load JS.
MD_String8 js_string = MD_LoadEntireFile(MD_S8Fmt("%.*s/site.js", MD_S8VArg(page_dir_path)));
MD_String8 js_string = MD_LoadEntireFile(arena, MD_S8Fmt("%.*s/site.js", MD_S8VArg(page_dir_path)));
//~ NOTE(rjf): Parse site info.
SiteInfo site_info = {0};
{
printf("Parsing site metadata at \"%.*s\"...\n", MD_S8VArg(site_info_path));
MD_Node *site_info_file = MD_ParseWholeFile(site_info_path).node;
MD_Node *site_info_file = MD_ParseWholeFile(arena, site_info_path).node;
site_info = ParseSiteInfo(site_info_file);
}
@@ -73,7 +74,7 @@ int main(int argument_count, char **arguments)
MD_String8 path = MD_S8Fmt("%.*s/%.*s",
MD_S8VArg(folder),
MD_S8VArg(file_info.filename));
MD_Node *node = MD_ParseWholeFile(path).node;
MD_Node *node = MD_ParseWholeFile(arena, path).node;
MD_PushNewReference(root_list, node);
}
}
+3 -1
View File
@@ -180,6 +180,8 @@ EvaluateScope(NamespaceNode *ns, MD_Node *code)
int main(int argument_count, char **arguments)
{
MD_Arena *arena = MD_ArenaNew(1ull << 40);
//- rjf: parse command line
MD_CmdLine cmdln = MD_MakeCmdLineFromOptions(MD_StringListFromArgCV(argument_count, arguments));
@@ -187,7 +189,7 @@ int main(int argument_count, char **arguments)
MD_Node *file_list = MD_MakeList();
for(MD_String8Node *n = cmdln.inputs.first; n; n = n->next)
{
MD_ParseResult parse = MD_ParseWholeFile(n->string);
MD_ParseResult parse = MD_ParseWholeFile(arena, n->string);
MD_PushNewReference(file_list, parse.node);
}
+8 -8
View File
@@ -625,11 +625,11 @@ MD_S8FindSubstring(MD_String8 str, MD_String8 substring, MD_u64 start_pos, MD_Ma
}
MD_FUNCTION_IMPL MD_String8
MD_S8Copy(MD_String8 string)
MD_S8Copy(MD_Arena *arena, MD_String8 string)
{
MD_String8 res;
res.size = string.size;
res.str = MD_PushArray(MD_u8, string.size + 1);
res.str = MD_PushArrayAr(arena, MD_u8, string.size + 1);
MD_MemoryCopy(res.str, string.str, string.size);
return(res);
}
@@ -1402,7 +1402,7 @@ MD_MapMakeBucketCount(MD_u64 bucket_count){
// make most sense with a parameter
MD_Map result = {0};
result.bucket_count = bucket_count;
result.buckets = MD_PushArrayZero(MD_MapBucket, bucket_count);
result.buckets = MD_PushArray(MD_MapBucket, bucket_count); //zero
return(result);
}
@@ -1783,7 +1783,7 @@ MD_LexAdvanceFromSkips(MD_String8 string, MD_TokenKind skip_kinds)
MD_FUNCTION_IMPL MD_Message *
MD_MakeNodeError(MD_Node *node, MD_MessageKind kind, MD_String8 str)
{
MD_Message *error = MD_PushArrayZero(MD_Message, 1);
MD_Message *error = MD_PushArray(MD_Message, 1); //zero
error->node = node;
error->kind = kind;
error->string = str;
@@ -2376,9 +2376,9 @@ MD_ParseWholeString(MD_String8 filename, MD_String8 contents)
}
MD_FUNCTION_IMPL MD_ParseResult
MD_ParseWholeFile(MD_String8 filename)
MD_ParseWholeFile(MD_Arena *arena, MD_String8 filename)
{
MD_String8 file_contents = MD_LoadEntireFile(filename);
MD_String8 file_contents = MD_LoadEntireFile(arena, filename);
MD_ParseResult parse = MD_ParseWholeString(filename, file_contents);
if(file_contents.str == 0)
{
@@ -2970,10 +2970,10 @@ MD_CmdLineI64FromString(MD_CmdLine cmdln, MD_String8 name)
//~ File System
MD_FUNCTION_IMPL MD_String8
MD_LoadEntireFile(MD_String8 filename)
MD_LoadEntireFile(MD_Arena *arena, MD_String8 filename)
{
MD_String8 file_contents = MD_ZERO_STRUCT;
FILE *file = fopen((char*)MD_S8Copy(filename).str, "rb");
FILE *file = fopen((char*)MD_S8Copy(arena, filename).str, "rb");
if(file)
{
fseek(file, 0, SEEK_END);
+3 -8
View File
@@ -689,11 +689,6 @@ MD_FUNCTION void* MD_MemoryCopy(void *dst, void *src, MD_u64 size);
MD_FUNCTION void* MD_AllocZero(MD_u64 size);
#define MD_PushArray(T,c) (T*)MD_AllocZero(sizeof(T)*(c))
// NOTE(rjf): Right now, both calls just automatically zero their memory,
// but I'm explicitly splitting this out to ensure that we don't accidentally
// assume that we have zeroed memory incorrectly in the future (when our
// allocation approach changes).
#define MD_PushArrayZero(T,c) (T*)MD_AllocZero(sizeof(T)*(c))
//~ Arena Functions
@@ -759,7 +754,7 @@ MD_FUNCTION MD_b32 MD_S8Match(MD_String8 a, MD_String8 b, MD_MatchFlags
MD_FUNCTION MD_u64 MD_S8FindSubstring(MD_String8 str, MD_String8 substring,
MD_u64 start_pos, MD_MatchFlags flags);
MD_FUNCTION MD_String8 MD_S8Copy(MD_String8 string);
MD_FUNCTION MD_String8 MD_S8Copy(MD_Arena *arena, MD_String8 string);
MD_FUNCTION MD_String8 MD_S8FmtV(char *fmt, va_list args);
MD_FUNCTION MD_String8 MD_S8Fmt(char *fmt, ...);
@@ -838,7 +833,7 @@ MD_FUNCTION MD_ParseResult MD_ParseResultZero(void);
MD_FUNCTION MD_ParseResult MD_ParseOneNode(MD_String8 string, MD_u64 offset);
MD_FUNCTION MD_ParseResult MD_ParseWholeString(MD_String8 filename, MD_String8 contents);
MD_FUNCTION MD_ParseResult MD_ParseWholeFile(MD_String8 filename);
MD_FUNCTION MD_ParseResult MD_ParseWholeFile(MD_Arena *arena, MD_String8 filename);
//~ Location Conversion
@@ -909,7 +904,7 @@ MD_FUNCTION MD_i64 MD_CmdLineI64FromString(MD_CmdLine cmdln, MD_String8 name);
//~ File System
MD_FUNCTION MD_String8 MD_LoadEntireFile(MD_String8 filename);
MD_FUNCTION MD_String8 MD_LoadEntireFile(MD_Arena *arena, MD_String8 filename);
MD_FUNCTION MD_b32 MD_FileIterIncrement(MD_FileIter *it, MD_String8 path, MD_FileInfo *out_info);
#endif // MD_H
+3 -1
View File
@@ -118,6 +118,8 @@ TokenMatch(MD_Token token, MD_String8 string, MD_TokenKind kind)
int main(void)
{
MD_Arena *arena = MD_ArenaNew(1ull << 40);
Test("Lexer")
{
MD_String8 string = MD_S8Lit("abc def 123 456 123_456 abc123 123abc");
@@ -536,7 +538,7 @@ int main(void)
}
{
MD_ParseResult parse = MD_ParseWholeFile(MD_S8Lit("__does_not_exist.mdesk"));
MD_ParseResult parse = MD_ParseWholeFile(arena, MD_S8Lit("__does_not_exist.mdesk"));
TestResult(parse.node->kind == MD_NodeKind_File && parse.errors.first != 0);
}