mirror of
https://github.com/Ed94/metadesk.git
synced 2026-06-12 23:51:37 -07:00
adding arena (p7)
This commit is contained in:
@@ -1222,6 +1222,7 @@ MD_MakeNodeError:
|
||||
@see(MD_Message)
|
||||
MD_MakeTokenError:
|
||||
{
|
||||
arena: *MD_Arena,
|
||||
@doc("The entire string that is being parsed. The parser used a substring of this string to form @code 'token'.")
|
||||
parse_contents: MD_String8;
|
||||
@doc("The token associated with this message.")
|
||||
|
||||
@@ -8,11 +8,11 @@ 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();
|
||||
MD_Node *list = MD_MakeList(arena);
|
||||
for(int i = 1; i < argument_count; i += 1)
|
||||
{
|
||||
MD_Node *root = MD_ParseWholeFile(arena, MD_S8CString(arguments[i])).node;
|
||||
MD_PushNewReference(list, root);
|
||||
MD_PushNewReference(arena, list, root);
|
||||
}
|
||||
|
||||
// NOTE(rjf): Print errors on every single node.
|
||||
|
||||
@@ -26,11 +26,11 @@ 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();
|
||||
MD_Node *list = MD_MakeList(arena);
|
||||
for(int i = 1; i < argument_count; i += 1)
|
||||
{
|
||||
MD_Node *root = MD_ParseWholeFile(arena, MD_S8CString(arguments[i])).node;
|
||||
MD_PushNewReference(list, root);
|
||||
MD_PushNewReference(arena, list, root);
|
||||
}
|
||||
|
||||
// NOTE(rjf): Call "custom layer" back.
|
||||
|
||||
@@ -67,11 +67,11 @@ int main(int argument_count, char **arguments)
|
||||
arena = MD_ArenaNew(1ull << 40);
|
||||
|
||||
// NOTE(pmh): Parse all the files passed in via command line.
|
||||
MD_Node *list = MD_MakeList();
|
||||
MD_Node *list = MD_MakeList(arena);
|
||||
for(int i = 1; i < argument_count; i += 1)
|
||||
{
|
||||
MD_Node *root = MD_ParseWholeFile(arena, MD_S8CString(arguments[i])).node;
|
||||
MD_PushNewReference(list, root);
|
||||
MD_PushNewReference(arena, list, root);
|
||||
}
|
||||
|
||||
for(MD_EachNode(ref, list->first_child))
|
||||
|
||||
@@ -5,11 +5,11 @@ int main(int argument_count, char **arguments)
|
||||
{
|
||||
MD_Arena *arena = MD_ArenaNew(1ull << 40);
|
||||
|
||||
MD_Node *list = MD_MakeList();
|
||||
MD_Node *list = MD_MakeList(arena);
|
||||
for(int i = 1; i < argument_count; i += 1)
|
||||
{
|
||||
MD_Node *root = MD_ParseWholeFile(arena, MD_S8CString(arguments[i])).node;
|
||||
MD_PushNewReference(list, root);
|
||||
MD_PushNewReference(arena, list, root);
|
||||
}
|
||||
|
||||
for(MD_EachNodeRef(root, list->first_child))
|
||||
|
||||
@@ -66,7 +66,7 @@ int main(int argument_count, char **arguments)
|
||||
}
|
||||
|
||||
//~ NOTE(rjf): Parse pages.
|
||||
MD_Node *root_list = MD_MakeList();
|
||||
MD_Node *root_list = MD_MakeList(arena);
|
||||
{
|
||||
printf("Searching for site pages at \"%.*s\"...\n", MD_S8VArg(page_dir_path));
|
||||
MD_FileInfo file_info = {0};
|
||||
@@ -83,7 +83,7 @@ int main(int argument_count, char **arguments)
|
||||
MD_String8 path = MD_S8Fmt(arena, "%.*s/%.*s",
|
||||
MD_S8VArg(folder), MD_S8VArg(file_info.filename));
|
||||
MD_Node *node = MD_ParseWholeFile(arena, path).node;
|
||||
MD_PushNewReference(root_list, node);
|
||||
MD_PushNewReference(arena, root_list, node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -189,11 +189,11 @@ int main(int argument_count, char **arguments)
|
||||
MD_CmdLine cmdln = MD_MakeCmdLineFromOptions(arena, arg_list);
|
||||
|
||||
//- rjf: parse all input files
|
||||
MD_Node *file_list = MD_MakeList();
|
||||
MD_Node *file_list = MD_MakeList(arena);
|
||||
for(MD_String8Node *n = cmdln.inputs.first; n; n = n->next)
|
||||
{
|
||||
MD_ParseResult parse = MD_ParseWholeFile(arena, n->string);
|
||||
MD_PushNewReference(file_list, parse.node);
|
||||
MD_PushNewReference(arena, file_list, parse.node);
|
||||
}
|
||||
|
||||
//- rjf: gather top-level symbol map
|
||||
|
||||
+32
-26
@@ -1803,10 +1803,10 @@ MD_LexAdvanceFromSkips(MD_String8 string, MD_TokenKind skip_kinds)
|
||||
return(result);
|
||||
}
|
||||
|
||||
MD_FUNCTION_IMPL MD_Message *
|
||||
MD_MakeNodeError(MD_Node *node, MD_MessageKind kind, MD_String8 str)
|
||||
MD_FUNCTION_IMPL MD_Message*
|
||||
MD_MakeNodeError(MD_Arena *arena, MD_Node *node, MD_MessageKind kind, MD_String8 str)
|
||||
{
|
||||
MD_Message *error = MD_PushArray(MD_Message, 1); //zero
|
||||
MD_Message *error = MD_PushArrayZeroAr(arena, MD_Message, 1);
|
||||
error->node = node;
|
||||
error->kind = kind;
|
||||
error->string = str;
|
||||
@@ -1814,11 +1814,12 @@ MD_MakeNodeError(MD_Node *node, MD_MessageKind kind, MD_String8 str)
|
||||
}
|
||||
|
||||
MD_FUNCTION_IMPL MD_Message *
|
||||
MD_MakeTokenError(MD_String8 parse_contents, MD_Token token, MD_MessageKind kind, MD_String8 str)
|
||||
MD_MakeTokenError(MD_Arena *arena, MD_String8 parse_contents, MD_Token token,
|
||||
MD_MessageKind kind, MD_String8 str)
|
||||
{
|
||||
MD_Node *err_node = MD_MakeNode(MD_NodeKind_ErrorMarker, MD_S8Lit(""), parse_contents,
|
||||
MD_Node *err_node = MD_MakeNode(arena, MD_NodeKind_ErrorMarker, MD_S8Lit(""), parse_contents,
|
||||
token.raw_string.str - parse_contents.str);
|
||||
return MD_MakeNodeError(err_node, kind, str);
|
||||
return MD_MakeNodeError(arena, err_node, kind, str);
|
||||
}
|
||||
|
||||
MD_FUNCTION_IMPL void
|
||||
@@ -2052,7 +2053,9 @@ MD_ParseNodeSet(MD_Arena *arena, MD_String8 string, MD_u64 offset, MD_Node *pare
|
||||
MD_NodeFlag_HasBraceLeft |
|
||||
MD_NodeFlag_HasBraceRight ))
|
||||
{
|
||||
MD_Message *error = MD_MakeNodeError(child_parse.node, MD_MessageKind_Warning, MD_S8Lit("Unnamed set children of implicitly-delimited sets are not legal."));
|
||||
MD_String8 error_str = MD_S8Lit("Unnamed set children of implicitly-delimited sets are not legal.");
|
||||
MD_Message *error = MD_MakeNodeError(arena, child_parse.node, MD_MessageKind_Warning,
|
||||
error_str);
|
||||
MD_MessageListPush(&result.errors, error);
|
||||
}
|
||||
|
||||
@@ -2095,7 +2098,8 @@ MD_ParseNodeSet(MD_Arena *arena, MD_String8 string, MD_u64 offset, MD_Node *pare
|
||||
{
|
||||
// NOTE(rjf): @error We didn't get a closer for the set
|
||||
MD_String8 error_str = MD_S8Fmt(arena, "Unbalanced \"%c\"", set_opener);
|
||||
MD_Message *error = MD_MakeTokenError(string, initial_token, MD_MessageKind_CatastrophicError, error_str);
|
||||
MD_Message *error = MD_MakeTokenError(arena, string, initial_token,
|
||||
MD_MessageKind_CatastrophicError, error_str);
|
||||
MD_MessageListPush(&result.errors, error);
|
||||
}
|
||||
|
||||
@@ -2103,7 +2107,7 @@ MD_ParseNodeSet(MD_Arena *arena, MD_String8 string, MD_u64 offset, MD_Node *pare
|
||||
if(close_with_separator && parsed_child_count == 0)
|
||||
{
|
||||
// NOTE(rjf): @error No empty implicitly-delimited sets
|
||||
MD_Message *error = MD_MakeTokenError(string, initial_token, MD_MessageKind_Error,
|
||||
MD_Message *error = MD_MakeTokenError(arena, string, initial_token, MD_MessageKind_Error,
|
||||
MD_S8Lit("Empty implicitly-delimited node list"));
|
||||
MD_MessageListPush(&result.errors, error);
|
||||
}
|
||||
@@ -2143,14 +2147,14 @@ _MD_ParseTagList(MD_Arena *arena, MD_String8 string, MD_u64 offset)
|
||||
// NOTE(rjf): @error Improper token for tag string
|
||||
MD_String8 error_str = MD_S8Fmt(arena, "\"%.*s\" is not a proper tag label",
|
||||
MD_S8VArg(name.raw_string));
|
||||
MD_Message *error = MD_MakeTokenError(string, name, MD_MessageKind_Error, error_str);
|
||||
MD_Message *error = MD_MakeTokenError(arena, string, name, MD_MessageKind_Error, error_str);
|
||||
MD_MessageListPush(&result.errors, error);
|
||||
break;
|
||||
}
|
||||
off += name.raw_string.size;
|
||||
|
||||
//- rjf: build tag
|
||||
MD_Node *tag = MD_MakeNode(MD_NodeKind_Tag, name.string, name.raw_string, name_off);
|
||||
MD_Node *tag = MD_MakeNode(arena, MD_NodeKind_Tag, name.string, name.raw_string, name_off);
|
||||
|
||||
//- rjf: parse tag arguments
|
||||
MD_Token open_paren = MD_TokenFromString(MD_S8Skip(string, off));
|
||||
@@ -2235,7 +2239,7 @@ MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset)
|
||||
MD_u8 c = unnamed_set_opener.string.str[0];
|
||||
if (c == '(' || c == '{' || c == '[')
|
||||
{
|
||||
parsed_node = MD_MakeNode(MD_NodeKind_Main, MD_S8Lit(""), MD_S8Lit(""),
|
||||
parsed_node = MD_MakeNode(arena, MD_NodeKind_Main, MD_S8Lit(""), MD_S8Lit(""),
|
||||
unnamed_set_opener.raw_string.str - string.str);
|
||||
children_parse = MD_ParseNodeSet(arena, string, off, parsed_node,
|
||||
MD_ParseSetRule_EndOnDelimiter);
|
||||
@@ -2246,7 +2250,7 @@ MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset)
|
||||
{
|
||||
// NOTE(rjf): @error Unexpected set closing symbol
|
||||
MD_String8 error_str = MD_S8Fmt(arena, "Unbalanced \"%c\"", c);
|
||||
MD_Message *error = MD_MakeTokenError(string, unnamed_set_opener,
|
||||
MD_Message *error = MD_MakeTokenError(arena, string, unnamed_set_opener,
|
||||
MD_MessageKind_CatastrophicError, error_str);
|
||||
MD_MessageListPush(&result.errors, error);
|
||||
off += unnamed_set_opener.raw_string.size;
|
||||
@@ -2255,7 +2259,7 @@ MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset)
|
||||
{
|
||||
// NOTE(rjf): @error Unexpected reserved symbol
|
||||
MD_String8 error_str = MD_S8Fmt(arena, "Unexpected reserved symbol \"%c\"", c);
|
||||
MD_Message *error = MD_MakeTokenError(string, unnamed_set_opener,
|
||||
MD_Message *error = MD_MakeTokenError(arena, string, unnamed_set_opener,
|
||||
MD_MessageKind_Error, error_str);
|
||||
MD_MessageListPush(&result.errors, error);
|
||||
off += unnamed_set_opener.raw_string.size;
|
||||
@@ -2270,7 +2274,7 @@ MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset)
|
||||
if((label_name.kind & MD_TokenGroup_Label) != 0)
|
||||
{
|
||||
off += label_name.raw_string.size;
|
||||
parsed_node = MD_MakeNode(MD_NodeKind_Main, label_name.string, label_name.raw_string,
|
||||
parsed_node = MD_MakeNode(arena, MD_NodeKind_Main, label_name.string, label_name.raw_string,
|
||||
label_name.raw_string.str - string.str);
|
||||
parsed_node->flags |= label_name.node_flags;
|
||||
|
||||
@@ -2315,7 +2319,7 @@ MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset)
|
||||
// NOTE(rjf): @error Bad character
|
||||
MD_String8 error_str = MD_S8Fmt(arena, "Non-ASCII character \"%.*s\"",
|
||||
MD_S8VArg(byte_string));
|
||||
MD_Message *error = MD_MakeTokenError(string, bad_token, MD_MessageKind_Error,
|
||||
MD_Message *error = MD_MakeTokenError(arena, string, bad_token, MD_MessageKind_Error,
|
||||
error_str);
|
||||
MD_MessageListPush(&result.errors, error);
|
||||
}break;
|
||||
@@ -2323,7 +2327,7 @@ MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset)
|
||||
case MD_TokenKind_BrokenComment:
|
||||
{
|
||||
// NOTE(rjf): @error Broken Comments
|
||||
MD_Message *error = MD_MakeTokenError(string, bad_token, MD_MessageKind_Error,
|
||||
MD_Message *error = MD_MakeTokenError(arena, string, bad_token, MD_MessageKind_Error,
|
||||
MD_S8Lit("Unterminated comment"));
|
||||
MD_MessageListPush(&result.errors, error);
|
||||
}break;
|
||||
@@ -2331,7 +2335,7 @@ MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset)
|
||||
case MD_TokenKind_BrokenStringLiteral:
|
||||
{
|
||||
// NOTE(rjf): @error Broken String Literals
|
||||
MD_Message *error = MD_MakeTokenError(string, bad_token, MD_MessageKind_Error,
|
||||
MD_Message *error = MD_MakeTokenError(arena, string, bad_token, MD_MessageKind_Error,
|
||||
MD_S8Lit("Unterminated string literal"));
|
||||
MD_MessageListPush(&result.errors, error);
|
||||
}break;
|
||||
@@ -2390,7 +2394,7 @@ MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset)
|
||||
MD_FUNCTION_IMPL MD_ParseResult
|
||||
MD_ParseWholeString(MD_Arena *arena, MD_String8 filename, MD_String8 contents)
|
||||
{
|
||||
MD_Node *root = MD_MakeNode(MD_NodeKind_File, filename, contents, 0);
|
||||
MD_Node *root = MD_MakeNode(arena, MD_NodeKind_File, filename, contents, 0);
|
||||
MD_ParseResult result = MD_ParseNodeSet(arena, contents, 0, root, MD_ParseSetRule_Global);
|
||||
result.node = result.last_node = root;
|
||||
for(MD_Message *error = result.errors.first; error != 0; error = error->next)
|
||||
@@ -2412,7 +2416,7 @@ MD_ParseWholeFile(MD_Arena *arena, MD_String8 filename)
|
||||
{
|
||||
// NOTE(rjf): @error File failing to load
|
||||
MD_String8 error_str = MD_S8Fmt(arena, "Could not read file \"%.*s\"", MD_S8VArg(filename));
|
||||
MD_Message *error = MD_MakeNodeError(parse.node, MD_MessageKind_CatastrophicError,
|
||||
MD_Message *error = MD_MakeNodeError(arena, parse.node, MD_MessageKind_CatastrophicError,
|
||||
error_str);
|
||||
MD_MessageListPush(&parse.errors, error);
|
||||
}
|
||||
@@ -2467,9 +2471,10 @@ MD_FUNCTION_IMPL MD_Node *
|
||||
MD_NilNode(void) { return &_md_nil_node; }
|
||||
|
||||
MD_FUNCTION_IMPL MD_Node *
|
||||
MD_MakeNode(MD_NodeKind kind, MD_String8 string, MD_String8 raw_string, MD_u64 offset)
|
||||
MD_MakeNode(MD_Arena *arena, MD_NodeKind kind, MD_String8 string, MD_String8 raw_string,
|
||||
MD_u64 offset)
|
||||
{
|
||||
MD_Node *node = MD_PushArray(MD_Node, 1);
|
||||
MD_Node *node = MD_PushArrayZeroAr(arena, MD_Node, 1);
|
||||
node->kind = kind;
|
||||
node->string = string;
|
||||
node->raw_string = raw_string;
|
||||
@@ -2501,17 +2506,18 @@ MD_PushTag(MD_Node *node, MD_Node *tag)
|
||||
}
|
||||
|
||||
MD_FUNCTION_IMPL MD_Node*
|
||||
MD_MakeList(void)
|
||||
MD_MakeList(MD_Arena *arena)
|
||||
{
|
||||
MD_String8 empty = {0};
|
||||
MD_Node *result = MD_MakeNode(MD_NodeKind_List, empty, empty, 0);
|
||||
MD_Node *result = MD_MakeNode(arena, MD_NodeKind_List, empty, empty, 0);
|
||||
return(result);
|
||||
}
|
||||
|
||||
MD_FUNCTION_IMPL MD_Node*
|
||||
MD_PushNewReference(MD_Node *list, MD_Node *target)
|
||||
MD_PushNewReference(MD_Arena *arena, MD_Node *list, MD_Node *target)
|
||||
{
|
||||
MD_Node *n = MD_MakeNode(MD_NodeKind_Reference, target->string, target->raw_string, target->offset);
|
||||
MD_Node *n = MD_MakeNode(arena, MD_NodeKind_Reference, target->string, target->raw_string,
|
||||
target->offset);
|
||||
n->ref_target = target;
|
||||
MD_PushChild(list, n);
|
||||
return(n);
|
||||
|
||||
+9
-5
@@ -830,8 +830,11 @@ MD_FUNCTION MD_MapSlot* MD_MapOverwrite(MD_Arena *arena, MD_Map *map, MD_MapKey
|
||||
MD_FUNCTION MD_b32 MD_TokenGroupContainsKind(MD_TokenGroups groups, MD_TokenKind kind);
|
||||
MD_FUNCTION MD_Token MD_TokenFromString(MD_String8 string);
|
||||
MD_FUNCTION MD_u64 MD_LexAdvanceFromSkips(MD_String8 string, MD_TokenKind skip_kinds);
|
||||
MD_FUNCTION MD_Message * MD_MakeNodeError(MD_Node *node, MD_MessageKind kind, MD_String8 str);
|
||||
MD_FUNCTION MD_Message * MD_MakeTokenError(MD_String8 parse_contents, MD_Token token, MD_MessageKind kind, MD_String8 str);
|
||||
MD_FUNCTION MD_Message * MD_MakeNodeError(MD_Arena *arena, MD_Node *node,
|
||||
MD_MessageKind kind, MD_String8 str);
|
||||
MD_FUNCTION MD_Message * MD_MakeTokenError(MD_Arena *arena, MD_String8 parse_contents,
|
||||
MD_Token token, MD_MessageKind kind,
|
||||
MD_String8 str);
|
||||
MD_FUNCTION void MD_MessageListPush(MD_MessageList *list, MD_Message *message);
|
||||
MD_FUNCTION void MD_MessageListConcat(MD_MessageList *list, MD_MessageList *to_push);
|
||||
MD_FUNCTION MD_ParseResult MD_ParseResultZero(void);
|
||||
@@ -849,12 +852,13 @@ MD_FUNCTION MD_CodeLoc MD_CodeLocFromNode(MD_Node *node);
|
||||
|
||||
MD_FUNCTION MD_b32 MD_NodeIsNil(MD_Node *node);
|
||||
MD_FUNCTION MD_Node *MD_NilNode(void);
|
||||
MD_FUNCTION MD_Node *MD_MakeNode(MD_NodeKind kind, MD_String8 string, MD_String8 raw_string, MD_u64 offset);
|
||||
MD_FUNCTION MD_Node *MD_MakeNode(MD_Arena *arena, MD_NodeKind kind, MD_String8 string,
|
||||
MD_String8 raw_string, MD_u64 offset);
|
||||
MD_FUNCTION void MD_PushChild(MD_Node *parent, MD_Node *new_child);
|
||||
MD_FUNCTION void MD_PushTag(MD_Node *node, MD_Node *tag);
|
||||
|
||||
MD_FUNCTION MD_Node *MD_MakeList(void);
|
||||
MD_FUNCTION MD_Node *MD_PushNewReference(MD_Node *list, MD_Node *target);
|
||||
MD_FUNCTION MD_Node *MD_MakeList(MD_Arena *arena);
|
||||
MD_FUNCTION MD_Node *MD_PushNewReference(MD_Arena *arena, MD_Node *list, MD_Node *target);
|
||||
|
||||
//~ Introspection Helpers
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ EndTest(void)
|
||||
static MD_Node *
|
||||
MakeTestNode(MD_NodeKind kind, MD_String8 string)
|
||||
{
|
||||
return MD_MakeNode(kind, string, string, 0);
|
||||
return MD_MakeNode(arena, kind, string, string, 0);
|
||||
}
|
||||
|
||||
static MD_C_Expr *
|
||||
|
||||
Reference in New Issue
Block a user