adding arena (p7)

This commit is contained in:
Allen Webster
2021-07-20 22:23:58 -07:00
parent a54f8b893f
commit bf60e1a8f7
10 changed files with 55 additions and 44 deletions
+1
View File
@@ -1222,6 +1222,7 @@ MD_MakeNodeError:
@see(MD_Message) @see(MD_Message)
MD_MakeTokenError: 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'.") @doc("The entire string that is being parsed. The parser used a substring of this string to form @code 'token'.")
parse_contents: MD_String8; parse_contents: MD_String8;
@doc("The token associated with this message.") @doc("The token associated with this message.")
+2 -2
View File
@@ -8,11 +8,11 @@ int main(int argument_count, char **arguments)
MD_Arena *arena = MD_ArenaNew(1ull << 40); MD_Arena *arena = MD_ArenaNew(1ull << 40);
// NOTE(rjf): Parse all the files passed in via command line. // 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) for(int i = 1; i < argument_count; i += 1)
{ {
MD_Node *root = MD_ParseWholeFile(arena, MD_S8CString(arguments[i])).node; 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. // NOTE(rjf): Print errors on every single node.
+2 -2
View File
@@ -26,11 +26,11 @@ int main(int argument_count, char **arguments)
MD_Arena *arena = MD_ArenaNew(1ull << 40); MD_Arena *arena = MD_ArenaNew(1ull << 40);
// NOTE(rjf): Parse all the files passed in via command line. // 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) for(int i = 1; i < argument_count; i += 1)
{ {
MD_Node *root = MD_ParseWholeFile(arena, MD_S8CString(arguments[i])).node; 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. // NOTE(rjf): Call "custom layer" back.
+2 -2
View File
@@ -67,11 +67,11 @@ int main(int argument_count, char **arguments)
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(arena);
for(int i = 1; i < argument_count; i += 1) for(int i = 1; i < argument_count; i += 1)
{ {
MD_Node *root = MD_ParseWholeFile(arena, MD_S8CString(arguments[i])).node; 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)) for(MD_EachNode(ref, list->first_child))
+2 -2
View File
@@ -5,11 +5,11 @@ int main(int argument_count, char **arguments)
{ {
MD_Arena *arena = MD_ArenaNew(1ull << 40); 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) for(int i = 1; i < argument_count; i += 1)
{ {
MD_Node *root = MD_ParseWholeFile(arena, MD_S8CString(arguments[i])).node; 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)) for(MD_EachNodeRef(root, list->first_child))
@@ -66,7 +66,7 @@ int main(int argument_count, char **arguments)
} }
//~ NOTE(rjf): Parse pages. //~ 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)); printf("Searching for site pages at \"%.*s\"...\n", MD_S8VArg(page_dir_path));
MD_FileInfo file_info = {0}; 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_String8 path = MD_S8Fmt(arena, "%.*s/%.*s",
MD_S8VArg(folder), MD_S8VArg(file_info.filename)); MD_S8VArg(folder), MD_S8VArg(file_info.filename));
MD_Node *node = MD_ParseWholeFile(arena, path).node; MD_Node *node = MD_ParseWholeFile(arena, path).node;
MD_PushNewReference(root_list, node); MD_PushNewReference(arena, root_list, node);
} }
} }
} }
+2 -2
View File
@@ -189,11 +189,11 @@ int main(int argument_count, char **arguments)
MD_CmdLine cmdln = MD_MakeCmdLineFromOptions(arena, arg_list); 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(arena);
for(MD_String8Node *n = cmdln.inputs.first; n; n = n->next) for(MD_String8Node *n = cmdln.inputs.first; n; n = n->next)
{ {
MD_ParseResult parse = MD_ParseWholeFile(arena, n->string); 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 //- rjf: gather top-level symbol map
+32 -26
View File
@@ -1803,10 +1803,10 @@ MD_LexAdvanceFromSkips(MD_String8 string, MD_TokenKind skip_kinds)
return(result); return(result);
} }
MD_FUNCTION_IMPL MD_Message * MD_FUNCTION_IMPL MD_Message*
MD_MakeNodeError(MD_Node *node, MD_MessageKind kind, MD_String8 str) 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->node = node;
error->kind = kind; error->kind = kind;
error->string = str; error->string = str;
@@ -1814,11 +1814,12 @@ MD_MakeNodeError(MD_Node *node, MD_MessageKind kind, MD_String8 str)
} }
MD_FUNCTION_IMPL MD_Message * 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); 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 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_HasBraceLeft |
MD_NodeFlag_HasBraceRight )) 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); 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 // NOTE(rjf): @error We didn't get a closer for the set
MD_String8 error_str = MD_S8Fmt(arena, "Unbalanced \"%c\"", set_opener); 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); 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) if(close_with_separator && parsed_child_count == 0)
{ {
// NOTE(rjf): @error No empty implicitly-delimited sets // 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_S8Lit("Empty implicitly-delimited node list"));
MD_MessageListPush(&result.errors, error); 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 // NOTE(rjf): @error Improper token for tag string
MD_String8 error_str = MD_S8Fmt(arena, "\"%.*s\" is not a proper tag label", MD_String8 error_str = MD_S8Fmt(arena, "\"%.*s\" is not a proper tag label",
MD_S8VArg(name.raw_string)); 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); MD_MessageListPush(&result.errors, error);
break; break;
} }
off += name.raw_string.size; off += name.raw_string.size;
//- rjf: build tag //- 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 //- rjf: parse tag arguments
MD_Token open_paren = MD_TokenFromString(MD_S8Skip(string, off)); 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]; MD_u8 c = unnamed_set_opener.string.str[0];
if (c == '(' || c == '{' || c == '[') 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); unnamed_set_opener.raw_string.str - string.str);
children_parse = MD_ParseNodeSet(arena, string, off, parsed_node, children_parse = MD_ParseNodeSet(arena, string, off, parsed_node,
MD_ParseSetRule_EndOnDelimiter); 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 // NOTE(rjf): @error Unexpected set closing symbol
MD_String8 error_str = MD_S8Fmt(arena, "Unbalanced \"%c\"", c); 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_MessageKind_CatastrophicError, error_str);
MD_MessageListPush(&result.errors, error); MD_MessageListPush(&result.errors, error);
off += unnamed_set_opener.raw_string.size; 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 // NOTE(rjf): @error Unexpected reserved symbol
MD_String8 error_str = MD_S8Fmt(arena, "Unexpected reserved symbol \"%c\"", c); 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_MessageKind_Error, error_str);
MD_MessageListPush(&result.errors, error); MD_MessageListPush(&result.errors, error);
off += unnamed_set_opener.raw_string.size; 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) if((label_name.kind & MD_TokenGroup_Label) != 0)
{ {
off += label_name.raw_string.size; 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); label_name.raw_string.str - string.str);
parsed_node->flags |= label_name.node_flags; 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 // NOTE(rjf): @error Bad character
MD_String8 error_str = MD_S8Fmt(arena, "Non-ASCII character \"%.*s\"", MD_String8 error_str = MD_S8Fmt(arena, "Non-ASCII character \"%.*s\"",
MD_S8VArg(byte_string)); 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); error_str);
MD_MessageListPush(&result.errors, error); MD_MessageListPush(&result.errors, error);
}break; }break;
@@ -2323,7 +2327,7 @@ MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset)
case MD_TokenKind_BrokenComment: case MD_TokenKind_BrokenComment:
{ {
// NOTE(rjf): @error Broken Comments // 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_S8Lit("Unterminated comment"));
MD_MessageListPush(&result.errors, error); MD_MessageListPush(&result.errors, error);
}break; }break;
@@ -2331,7 +2335,7 @@ MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset)
case MD_TokenKind_BrokenStringLiteral: case MD_TokenKind_BrokenStringLiteral:
{ {
// NOTE(rjf): @error Broken String Literals // 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_S8Lit("Unterminated string literal"));
MD_MessageListPush(&result.errors, error); MD_MessageListPush(&result.errors, error);
}break; }break;
@@ -2390,7 +2394,7 @@ MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset)
MD_FUNCTION_IMPL MD_ParseResult MD_FUNCTION_IMPL MD_ParseResult
MD_ParseWholeString(MD_Arena *arena, MD_String8 filename, MD_String8 contents) 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); MD_ParseResult result = MD_ParseNodeSet(arena, contents, 0, root, MD_ParseSetRule_Global);
result.node = result.last_node = root; result.node = result.last_node = root;
for(MD_Message *error = result.errors.first; error != 0; error = error->next) 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 // NOTE(rjf): @error File failing to load
MD_String8 error_str = MD_S8Fmt(arena, "Could not read file \"%.*s\"", MD_S8VArg(filename)); 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); error_str);
MD_MessageListPush(&parse.errors, error); MD_MessageListPush(&parse.errors, error);
} }
@@ -2467,9 +2471,10 @@ MD_FUNCTION_IMPL MD_Node *
MD_NilNode(void) { return &_md_nil_node; } MD_NilNode(void) { return &_md_nil_node; }
MD_FUNCTION_IMPL MD_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->kind = kind;
node->string = string; node->string = string;
node->raw_string = raw_string; node->raw_string = raw_string;
@@ -2501,17 +2506,18 @@ MD_PushTag(MD_Node *node, MD_Node *tag)
} }
MD_FUNCTION_IMPL MD_Node* MD_FUNCTION_IMPL MD_Node*
MD_MakeList(void) MD_MakeList(MD_Arena *arena)
{ {
MD_String8 empty = {0}; 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); return(result);
} }
MD_FUNCTION_IMPL MD_Node* 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; n->ref_target = target;
MD_PushChild(list, n); MD_PushChild(list, n);
return(n); return(n);
+9 -5
View File
@@ -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_b32 MD_TokenGroupContainsKind(MD_TokenGroups groups, MD_TokenKind kind);
MD_FUNCTION MD_Token MD_TokenFromString(MD_String8 string); 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_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_MakeNodeError(MD_Arena *arena, MD_Node *node,
MD_FUNCTION MD_Message * MD_MakeTokenError(MD_String8 parse_contents, MD_Token token, MD_MessageKind kind, MD_String8 str); 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_MessageListPush(MD_MessageList *list, MD_Message *message);
MD_FUNCTION void MD_MessageListConcat(MD_MessageList *list, MD_MessageList *to_push); MD_FUNCTION void MD_MessageListConcat(MD_MessageList *list, MD_MessageList *to_push);
MD_FUNCTION MD_ParseResult MD_ParseResultZero(void); 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_b32 MD_NodeIsNil(MD_Node *node);
MD_FUNCTION MD_Node *MD_NilNode(void); 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_PushChild(MD_Node *parent, MD_Node *new_child);
MD_FUNCTION void MD_PushTag(MD_Node *node, MD_Node *tag); MD_FUNCTION void MD_PushTag(MD_Node *node, MD_Node *tag);
MD_FUNCTION MD_Node *MD_MakeList(void); MD_FUNCTION MD_Node *MD_MakeList(MD_Arena *arena);
MD_FUNCTION MD_Node *MD_PushNewReference(MD_Node *list, MD_Node *target); MD_FUNCTION MD_Node *MD_PushNewReference(MD_Arena *arena, MD_Node *list, MD_Node *target);
//~ Introspection Helpers //~ Introspection Helpers
+1 -1
View File
@@ -67,7 +67,7 @@ EndTest(void)
static MD_Node * static MD_Node *
MakeTestNode(MD_NodeKind kind, MD_String8 string) 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 * static MD_C_Expr *