mirror of
https://github.com/Ed94/metadesk.git
synced 2026-06-12 23:51:37 -07:00
adding arena (p1)
This commit is contained in:
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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,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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user