eliminate ParseTagList and redundant parse result fields

This commit is contained in:
Ryan Fleury
2021-09-16 20:40:06 -06:00
parent 0288b025f8
commit c04b7dd04d
2 changed files with 4 additions and 71 deletions
+4 -69
View File
@@ -2038,7 +2038,7 @@ MD_FUNCTION_IMPL MD_ParseResult
MD_ParseResultZero(void)
{
MD_ParseResult result = MD_ZERO_STRUCT;
result.node = result.last_node = MD_NilNode();
result.node = MD_NilNode();
return result;
}
@@ -2291,66 +2291,8 @@ MD_ParseNodeSet(MD_Arena *arena, MD_String8 string, MD_u64 offset, MD_Node *pare
}
//- rjf: fill result info
result.node = parent->first_child;
result.last_node = parent->last_child;
result.string_advance= off - offset;
return result;
}
// TODO(rjf): Inline this in the only place it is called
MD_FUNCTION_IMPL MD_ParseResult
_MD_ParseTagList(MD_Arena *arena, MD_String8 string, MD_u64 offset)
{
MD_ParseResult result = MD_ParseResultZero();
MD_u64 off = offset;
for(;off < string.size;)
{
//- rjf: parse @ symbol, signifying start of tag
off += MD_LexAdvanceFromSkips(MD_S8Skip(string, off), MD_TokenGroup_Irregular);
MD_Token next_token = MD_TokenFromString(MD_S8Skip(string, off));
if(next_token.kind != MD_TokenKind_Reserved ||
next_token.string.str[0] != '@')
{
break;
}
off += next_token.raw_string.size;
//- rjf: parse string of tag node
MD_Token name = MD_TokenFromString(MD_S8Skip(string, off));
MD_u64 name_off = off;
if((name.kind & MD_TokenGroup_Label) == 0)
{
// 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(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(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));
MD_ParseResult args_parse = MD_ParseResultZero();
if(open_paren.kind == MD_TokenKind_Reserved &&
open_paren.string.str[0] == '(')
{
args_parse = MD_ParseNodeSet(arena, string, off, tag, MD_ParseSetRule_EndOnDelimiter);
MD_MessageListConcat(&result.errors, &args_parse.errors);
}
off += args_parse.string_advance;
//- rjf: push tag to result
MD_NodeDblPushBack(result.node, result.last_node, tag);
}
//- rjf: fill result
result.string_advance= off - offset;
result.node = parent;
result.string_advance = off - offset;
return result;
}
@@ -2448,13 +2390,6 @@ MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset)
}
}
//- rjf: parse tag list
#if 0
MD_ParseResult tags_parse = _MD_ParseTagList(arena, string, off);
off += tags_parse.string_advance;
MD_MessageListConcat(&result.errors, &tags_parse.errors);
#endif
//- rjf: parse node
MD_Node *parsed_node = MD_NilNode();
MD_ParseResult children_parse = MD_ParseResultZero();
@@ -2628,7 +2563,7 @@ MD_ParseWholeString(MD_Arena *arena, MD_String8 filename, MD_String8 contents)
{
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;
result.node = root;
for(MD_Message *error = result.errors.first; error != 0; error = error->next)
{
if(MD_NodeIsNil(error->node->parent))
-2
View File
@@ -752,8 +752,6 @@ typedef struct MD_ParseResult MD_ParseResult;
struct MD_ParseResult
{
MD_Node *node;
// TODO(rjf): Remove once we're not using it for ParseTagList
MD_Node *last_node;
MD_u64 string_advance;
MD_MessageList errors;
};