iterating on debug dump and reconstruction API details

This commit is contained in:
Allen Webster
2021-09-10 14:46:41 -07:00
parent a3e8c90b67
commit 6dd7acb1a2
4 changed files with 97 additions and 92 deletions
+6 -6
View File
@@ -1916,15 +1916,15 @@ MD_ParseWholeFile:
return: MD_b32, return: MD_b32,
}; };
////////////////////////////////
//~ Expression Parsing
// TODO
//////////////////////////////// ////////////////////////////////
//~ Generation //~ Generation
@send(StringGeneration) // TODO
@doc("Outputs a textual representation of the tree with @code 'node' as its root to @code 'file'.")
@func MD_DebugOutputTree: {
file: *FILE,
node: *MD_Node,
};
//////////////////////////////// ////////////////////////////////
//~ Command Line Argument Helper //~ Command Line Argument Helper
+76 -81
View File
@@ -3294,15 +3294,15 @@ MD_ExprParse(MD_Arena *arena, MD_ExprOperatorTable *op_table, MD_Node *first, MD
//~ String Generation //~ String Generation
MD_FUNCTION_IMPL MD_String8List MD_FUNCTION_IMPL void
MD_DebugStringListFromNode(MD_Arena *arena, MD_Node *node, int indent, MD_String8 indent_string, MD_GenerateFlags flags) MD_DebugStringListFromNode(MD_Arena *arena, MD_String8List *out, MD_Node *node,
int indent, MD_String8 indent_string, MD_GenerateFlags flags)
{ {
MD_String8List list = {0};
#define MD_PrintIndent(_indent_level) do\ #define MD_PrintIndent(_indent_level) do\
{\ {\
for(int i = 0; i < (_indent_level); i += 1)\ for(int i = 0; i < (_indent_level); i += 1)\
{\ {\
MD_S8ListPush(arena, &list, indent_string);\ MD_S8ListPush(arena, out, indent_string);\
}\ }\
}while(0) }while(0)
@@ -3311,13 +3311,13 @@ MD_S8ListPush(arena, &list, indent_string);\
if(flags & MD_GenerateFlag_Comments && node->prev_comment.size != 0) if(flags & MD_GenerateFlag_Comments && node->prev_comment.size != 0)
{ {
MD_PrintIndent(indent); MD_PrintIndent(indent);
MD_S8ListPush(arena, &list, MD_S8Lit("/*\n")); MD_S8ListPush(arena, out, MD_S8Lit("/*\n"));
MD_PrintIndent(indent); MD_PrintIndent(indent);
MD_S8ListPush(arena, &list, node->prev_comment); MD_S8ListPush(arena, out, node->prev_comment);
MD_PrintIndent(indent); MD_PrintIndent(indent);
MD_S8ListPush(arena, &list, MD_S8Lit("\n")); MD_S8ListPush(arena, out, MD_S8Lit("\n"));
MD_PrintIndent(indent); MD_PrintIndent(indent);
MD_S8ListPush(arena, &list, MD_S8Lit("*/\n")); MD_S8ListPush(arena, out, MD_S8Lit("*/\n"));
} }
//- rjf: tags of node //- rjf: tags of node
@@ -3326,12 +3326,12 @@ MD_S8ListPush(arena, &list, indent_string);\
for(MD_EachNode(tag, node->first_tag)) for(MD_EachNode(tag, node->first_tag))
{ {
MD_PrintIndent(indent); MD_PrintIndent(indent);
MD_S8ListPush(arena, &list, MD_S8Lit("@")); MD_S8ListPush(arena, out, MD_S8Lit("@"));
MD_S8ListPush(arena, &list, tag->string); MD_S8ListPush(arena, out, tag->string);
if(flags & MD_GenerateFlag_TagArguments && !MD_NodeIsNil(tag->first_child)) if(flags & MD_GenerateFlag_TagArguments && !MD_NodeIsNil(tag->first_child))
{ {
int tag_arg_indent = indent + 1 + tag->string.size + 1; int tag_arg_indent = indent + 1 + tag->string.size + 1;
MD_S8ListPush(arena, &list, MD_S8Lit("(")); MD_S8ListPush(arena, out, MD_S8Lit("("));
for(MD_EachNode(child, tag->first_child)) for(MD_EachNode(child, tag->first_child))
{ {
int child_indent = tag_arg_indent; int child_indent = tag_arg_indent;
@@ -3339,18 +3339,17 @@ MD_S8ListPush(arena, &list, indent_string);\
{ {
child_indent = 0; child_indent = 0;
} }
MD_String8List child_strings = MD_DebugStringListFromNode(arena, child, child_indent, MD_S8Lit(" "), flags); MD_DebugStringListFromNode(arena, out, child, child_indent, MD_S8Lit(" "), flags);
MD_S8ListConcat(&list, &child_strings);
if(!MD_NodeIsNil(child->next)) if(!MD_NodeIsNil(child->next))
{ {
MD_S8ListPush(arena, &list, MD_S8Lit(",\n")); MD_S8ListPush(arena, out, MD_S8Lit(",\n"));
} }
} }
MD_S8ListPush(arena, &list, MD_S8Lit(")\n")); MD_S8ListPush(arena, out, MD_S8Lit(")\n"));
} }
else else
{ {
MD_S8ListPush(arena, &list, MD_S8Lit("\n")); MD_S8ListPush(arena, out, MD_S8Lit("\n"));
} }
} }
} }
@@ -3359,9 +3358,9 @@ MD_S8ListPush(arena, &list, indent_string);\
if(flags & MD_GenerateFlag_NodeKind) if(flags & MD_GenerateFlag_NodeKind)
{ {
MD_PrintIndent(indent); MD_PrintIndent(indent);
MD_S8ListPush(arena, &list, MD_S8Lit("// kind: \"")); MD_S8ListPush(arena, out, MD_S8Lit("// kind: \""));
MD_S8ListPush(arena, &list, MD_StringFromNodeKind(node->kind)); MD_S8ListPush(arena, out, MD_StringFromNodeKind(node->kind));
MD_S8ListPush(arena, &list, MD_S8Lit("\"\n")); MD_S8ListPush(arena, out, MD_S8Lit("\"\n"));
} }
//- rjf: node flags //- rjf: node flags
@@ -3373,9 +3372,9 @@ MD_S8ListPush(arena, &list, indent_string);\
MD_String8List flag_strs = MD_StringListFromNodeFlags(scratch.arena, node->flags); MD_String8List flag_strs = MD_StringListFromNodeFlags(scratch.arena, node->flags);
MD_StringJoin join = { MD_S8Lit(""), MD_S8Lit("|"), MD_S8Lit("") }; MD_StringJoin join = { MD_S8Lit(""), MD_S8Lit("|"), MD_S8Lit("") };
MD_String8 flag_str = MD_S8ListJoin(arena, flag_strs, &join); MD_String8 flag_str = MD_S8ListJoin(arena, flag_strs, &join);
MD_S8ListPush(arena, &list, MD_S8Lit("// flags: \"")); MD_S8ListPush(arena, out, MD_S8Lit("// flags: \""));
MD_S8ListPush(arena, &list, flag_str); MD_S8ListPush(arena, out, flag_str);
MD_S8ListPush(arena, &list, MD_S8Lit("\"\n")); MD_S8ListPush(arena, out, MD_S8Lit("\"\n"));
MD_ReleaseScratch(scratch); MD_ReleaseScratch(scratch);
} }
@@ -3383,7 +3382,7 @@ MD_S8ListPush(arena, &list, indent_string);\
if(flags & MD_GenerateFlag_StringHash) if(flags & MD_GenerateFlag_StringHash)
{ {
MD_PrintIndent(indent); MD_PrintIndent(indent);
MD_S8ListPush(arena, &list, MD_S8Fmt(arena, "// string hash: 0x%llx\n", node->string_hash)); MD_S8ListPush(arena, out, MD_S8Fmt(arena, "// string hash: 0x%llx\n", node->string_hash));
} }
if(flags & MD_GenerateFlag_Location) if(flags & MD_GenerateFlag_Location)
@@ -3391,7 +3390,7 @@ MD_S8ListPush(arena, &list, indent_string);\
MD_PrintIndent(indent); MD_PrintIndent(indent);
MD_CodeLoc loc = MD_CodeLocFromNode(node); MD_CodeLoc loc = MD_CodeLocFromNode(node);
MD_String8 string = MD_S8Fmt(arena, "// location: %.*s:%i:%i\n", MD_S8VArg(loc.filename), (int)loc.line, (int)loc.column); MD_String8 string = MD_S8Fmt(arena, "// location: %.*s:%i:%i\n", MD_S8VArg(loc.filename), (int)loc.line, (int)loc.column);
MD_S8ListPush(arena, &list, string); MD_S8ListPush(arena, out, string);
} }
//- rjf: name of node //- rjf: name of node
@@ -3400,13 +3399,13 @@ MD_S8ListPush(arena, &list, indent_string);\
MD_PrintIndent(indent); MD_PrintIndent(indent);
if(node->kind == MD_NodeKind_File) if(node->kind == MD_NodeKind_File)
{ {
MD_S8ListPush(arena, &list, MD_S8Lit("`")); MD_S8ListPush(arena, out, MD_S8Lit("`"));
MD_S8ListPush(arena, &list, node->string); MD_S8ListPush(arena, out, node->string);
MD_S8ListPush(arena, &list, MD_S8Lit("`")); MD_S8ListPush(arena, out, MD_S8Lit("`"));
} }
else else
{ {
MD_S8ListPush(arena, &list, node->raw_string); MD_S8ListPush(arena, out, node->raw_string);
} }
} }
@@ -3415,39 +3414,39 @@ MD_S8ListPush(arena, &list, indent_string);\
{ {
if(node->string.size != 0) if(node->string.size != 0)
{ {
MD_S8ListPush(arena, &list, MD_S8Lit(":\n")); MD_S8ListPush(arena, out, MD_S8Lit(":\n"));
} }
MD_PrintIndent(indent); MD_PrintIndent(indent);
MD_S8ListPush(arena, &list, MD_S8Lit("{\n")); MD_S8ListPush(arena, out, MD_S8Lit("{\n"));
for(MD_EachNode(child, node->first_child)) for(MD_EachNode(child, node->first_child))
{ {
MD_String8List child_strings = MD_DebugStringListFromNode(arena, child, indent+1, indent_string, flags); MD_DebugStringListFromNode(arena, out, child, indent+1, indent_string, flags);
MD_S8ListConcat(&list, &child_strings); MD_S8ListPush(arena, out, MD_S8Lit(",\n"));
MD_S8ListPush(arena, &list, MD_S8Lit(",\n"));
} }
MD_PrintIndent(indent); MD_PrintIndent(indent);
MD_S8ListPush(arena, &list, MD_S8Lit("}")); MD_S8ListPush(arena, out, MD_S8Lit("}"));
} }
//- rjf: next-comment //- rjf: next-comment
if(flags & MD_GenerateFlag_Comments && node->next_comment.size != 0) if(flags & MD_GenerateFlag_Comments && node->next_comment.size != 0)
{ {
MD_PrintIndent(indent); MD_PrintIndent(indent);
MD_S8ListPush(arena, &list, MD_S8Lit("\n/*\n")); MD_S8ListPush(arena, out, MD_S8Lit("\n/*\n"));
MD_PrintIndent(indent); MD_PrintIndent(indent);
MD_S8ListPush(arena, &list, node->next_comment); MD_S8ListPush(arena, out, node->next_comment);
MD_PrintIndent(indent); MD_PrintIndent(indent);
MD_S8ListPush(arena, &list, MD_S8Lit("\n")); MD_S8ListPush(arena, out, MD_S8Lit("\n"));
MD_PrintIndent(indent); MD_PrintIndent(indent);
MD_S8ListPush(arena, &list, MD_S8Lit("*/\n")); MD_S8ListPush(arena, out, MD_S8Lit("*/\n"));
} }
#undef MD_PrintIndent #undef MD_PrintIndent
return list;
} }
MD_FUNCTION_IMPL MD_String8List MD_FUNCTION_IMPL void
MD_ReconstructedStringListFromNode(MD_Arena *arena, MD_Node *node, int indent, MD_String8 indent_string, MD_GenerateFlags flags) MD_ReconstructedStringListFromNode(MD_Arena *arena, MD_String8List *out, MD_Node *node,
int indent, MD_String8 indent_string,
MD_GenerateFlags flags)
{ {
// TODO(rjf): // TODO(rjf): // TODO(rjf): // TODO(rjf): // TODO(rjf): // TODO(rjf):
// TODO(rjf): // TODO(rjf): // TODO(rjf): // TODO(rjf): // TODO(rjf): // TODO(rjf):
@@ -3455,14 +3454,13 @@ MD_ReconstructedStringListFromNode(MD_Arena *arena, MD_Node *node, int indent, M
// TODO(rjf): // TODO(rjf): // TODO(rjf): // TODO(rjf): // TODO(rjf): // TODO(rjf):
// TODO(rjf): // TODO(rjf): // TODO(rjf): // TODO(rjf): // TODO(rjf): // TODO(rjf):
MD_CodeLoc node_loc = MD_CodeLocFromNode(node); MD_CodeLoc code_loc = MD_CodeLocFromNode(node);
MD_String8List list = {0};
#define MD_PrintIndent(_indent_level) do\ #define MD_PrintIndent(_indent_level) do\
{\ {\
for(int i = 0; i < (_indent_level); i += 1)\ for(int i = 0; i < (_indent_level); i += 1)\
{\ {\
MD_S8ListPush(arena, &list, indent_string);\ MD_S8ListPush(arena, out, indent_string);\
}\ }\
}while(0) }while(0)
@@ -3475,20 +3473,20 @@ MD_S8ListPush(arena, &list, indent_string);\
MD_PrintIndent(indent); MD_PrintIndent(indent);
if(requires_multiline) if(requires_multiline)
{ {
MD_S8ListPush(arena, &list, MD_S8Lit("/*\n")); MD_S8ListPush(arena, out, MD_S8Lit("/*\n"));
} }
else else
{ {
MD_S8ListPush(arena, &list, MD_S8Lit("// ")); MD_S8ListPush(arena, out, MD_S8Lit("// "));
} }
MD_S8ListPush(arena, &list, comment); MD_S8ListPush(arena, out, comment);
if(requires_multiline) if(requires_multiline)
{ {
MD_S8ListPush(arena, &list, MD_S8Lit("\n*/\n")); MD_S8ListPush(arena, out, MD_S8Lit("\n*/\n"));
} }
else else
{ {
MD_S8ListPush(arena, &list, MD_S8Lit("\n")); MD_S8ListPush(arena, out, MD_S8Lit("\n"));
} }
} }
@@ -3498,19 +3496,19 @@ MD_S8ListPush(arena, &list, indent_string);\
for(MD_EachNode(tag, node->first_tag)) for(MD_EachNode(tag, node->first_tag))
{ {
MD_PrintIndent(indent); MD_PrintIndent(indent);
MD_S8ListPush(arena, &list, MD_S8Lit("@")); MD_S8ListPush(arena, out, MD_S8Lit("@"));
MD_S8ListPush(arena, &list, tag->string); MD_S8ListPush(arena, out, tag->string);
if(flags & MD_GenerateFlag_TagArguments && !MD_NodeIsNil(tag->first_child)) if(flags & MD_GenerateFlag_TagArguments && !MD_NodeIsNil(tag->first_child))
{ {
int tag_arg_indent = indent + 1 + tag->string.size + 1; int tag_arg_indent = indent + 1 + tag->string.size + 1;
MD_S8ListPush(arena, &list, MD_S8Lit("(")); MD_S8ListPush(arena, out, MD_S8Lit("("));
MD_u32 last_line = MD_CodeLocFromNode(tag).line; MD_u32 last_line = MD_CodeLocFromNode(tag).line;
for(MD_EachNode(child, tag->first_child)) for(MD_EachNode(child, tag->first_child))
{ {
MD_CodeLoc child_loc = MD_CodeLocFromNode(child); MD_CodeLoc child_loc = MD_CodeLocFromNode(child);
if(child_loc.line != last_line) if(child_loc.line != last_line)
{ {
MD_S8ListPush(arena, &list, MD_S8Lit("\n")); MD_S8ListPush(arena, out, MD_S8Lit("\n"));
MD_PrintIndent(indent); MD_PrintIndent(indent);
} }
last_line = child_loc.line; last_line = child_loc.line;
@@ -3520,18 +3518,17 @@ MD_S8ListPush(arena, &list, indent_string);\
{ {
child_indent = 0; child_indent = 0;
} }
MD_String8List child_strings = MD_ReconstructedStringListFromNode(arena, child, child_indent, MD_S8Lit(" "), flags); MD_ReconstructedStringListFromNode(arena, out, child, child_indent, MD_S8Lit(" "), flags);
MD_S8ListConcat(&list, &child_strings);
if(!MD_NodeIsNil(child->next)) if(!MD_NodeIsNil(child->next))
{ {
MD_S8ListPush(arena, &list, MD_S8Lit(",\n")); MD_S8ListPush(arena, out, MD_S8Lit(",\n"));
} }
} }
MD_S8ListPush(arena, &list, MD_S8Lit(")\n")); MD_S8ListPush(arena, out, MD_S8Lit(")\n"));
} }
else else
{ {
MD_S8ListPush(arena, &list, MD_S8Lit("\n")); MD_S8ListPush(arena, out, MD_S8Lit("\n"));
} }
} }
} }
@@ -3542,13 +3539,13 @@ MD_S8ListPush(arena, &list, indent_string);\
MD_PrintIndent(indent); MD_PrintIndent(indent);
if(node->kind == MD_NodeKind_File) if(node->kind == MD_NodeKind_File)
{ {
MD_S8ListPush(arena, &list, MD_S8Lit("`")); MD_S8ListPush(arena, out, MD_S8Lit("`"));
MD_S8ListPush(arena, &list, node->string); MD_S8ListPush(arena, out, node->string);
MD_S8ListPush(arena, &list, MD_S8Lit("`")); MD_S8ListPush(arena, out, MD_S8Lit("`"));
} }
else else
{ {
MD_S8ListPush(arena, &list, node->raw_string); MD_S8ListPush(arena, out, node->raw_string);
} }
} }
@@ -3557,7 +3554,7 @@ MD_S8ListPush(arena, &list, indent_string);\
{ {
if(node->string.size != 0) if(node->string.size != 0)
{ {
MD_S8ListPush(arena, &list, MD_S8Lit(":")); MD_S8ListPush(arena, out, MD_S8Lit(":"));
} }
MD_PrintIndent(indent); MD_PrintIndent(indent);
@@ -3593,7 +3590,7 @@ MD_S8ListPush(arena, &list, indent_string);\
for(MD_EachNode(child, node->first_child)) for(MD_EachNode(child, node->first_child))
{ {
MD_CodeLoc child_loc = MD_CodeLocFromNode(child); MD_CodeLoc child_loc = MD_CodeLocFromNode(child);
if(child_loc.line != node_loc.line) if(child_loc.line != code_loc.line)
{ {
multiline = 1; multiline = 1;
break; break;
@@ -3604,46 +3601,45 @@ MD_S8ListPush(arena, &list, indent_string);\
{ {
if(multiline) if(multiline)
{ {
MD_S8ListPush(arena, &list, MD_S8Lit("\n")); MD_S8ListPush(arena, out, MD_S8Lit("\n"));
MD_PrintIndent(indent); MD_PrintIndent(indent);
} }
MD_S8ListPush(arena, &list, MD_S8(&opener_char, 1)); MD_S8ListPush(arena, out, MD_S8(&opener_char, 1));
} }
MD_u32 last_line = node_loc.line; MD_u32 last_line = code_loc.line;
for(MD_EachNode(child, node->first_child)) for(MD_EachNode(child, node->first_child))
{ {
int child_indent = 0; int child_indent = 0;
MD_CodeLoc child_loc = MD_CodeLocFromNode(child); MD_CodeLoc child_loc = MD_CodeLocFromNode(child);
if(child_loc.line != last_line) if(child_loc.line != last_line)
{ {
MD_S8ListPush(arena, &list, MD_S8Lit("\n")); MD_S8ListPush(arena, out, MD_S8Lit("\n"));
MD_PrintIndent(indent); MD_PrintIndent(indent);
child_indent = indent+1; child_indent = indent+1;
} }
last_line = child_loc.line; last_line = child_loc.line;
MD_String8List child_strings = MD_ReconstructedStringListFromNode(arena, child, child_indent, indent_string, flags); MD_ReconstructedStringListFromNode(arena, out, child, child_indent, indent_string, flags);
MD_S8ListConcat(&list, &child_strings);
} }
MD_PrintIndent(indent); MD_PrintIndent(indent);
if(closer_char != 0) if(closer_char != 0)
{ {
if(last_line != node_loc.line) if(last_line != code_loc.line)
{ {
MD_S8ListPush(arena, &list, MD_S8Lit("\n")); MD_S8ListPush(arena, out, MD_S8Lit("\n"));
MD_PrintIndent(indent); MD_PrintIndent(indent);
} }
MD_S8ListPush(arena, &list, MD_S8(&closer_char, 1)); MD_S8ListPush(arena, out, MD_S8(&closer_char, 1));
} }
} }
//- rjf: trailing separator symbols //- rjf: trailing separator symbols
if(node->flags & MD_NodeFlag_IsBeforeSemicolon) if(node->flags & MD_NodeFlag_IsBeforeSemicolon)
{ {
MD_S8ListPush(arena, &list, MD_S8Lit(";")); MD_S8ListPush(arena, out, MD_S8Lit(";"));
} }
else if(node->flags & MD_NodeFlag_IsBeforeComma) else if(node->flags & MD_NodeFlag_IsBeforeComma)
{ {
MD_S8ListPush(arena, &list, MD_S8Lit(",")); MD_S8ListPush(arena, out, MD_S8Lit(","));
} }
//- rjf: next-comment //- rjf: next-comment
@@ -3655,25 +3651,24 @@ MD_S8ListPush(arena, &list, indent_string);\
MD_PrintIndent(indent); MD_PrintIndent(indent);
if(requires_multiline) if(requires_multiline)
{ {
MD_S8ListPush(arena, &list, MD_S8Lit("/*\n")); MD_S8ListPush(arena, out, MD_S8Lit("/*\n"));
} }
else else
{ {
MD_S8ListPush(arena, &list, MD_S8Lit("// ")); MD_S8ListPush(arena, out, MD_S8Lit("// "));
} }
MD_S8ListPush(arena, &list, comment); MD_S8ListPush(arena, out, comment);
if(requires_multiline) if(requires_multiline)
{ {
MD_S8ListPush(arena, &list, MD_S8Lit("\n*/\n")); MD_S8ListPush(arena, out, MD_S8Lit("\n*/\n"));
} }
else else
{ {
MD_S8ListPush(arena, &list, MD_S8Lit("\n")); MD_S8ListPush(arena, out, MD_S8Lit("\n"));
} }
} }
#undef MD_PrintIndent #undef MD_PrintIndent
return list;
} }
//~ Command Line Argument Helper //~ Command Line Argument Helper
+6 -2
View File
@@ -1140,8 +1140,12 @@ MD_FUNCTION MD_ExprParseResult MD_ExprParse(MD_Arena *arena, MD_ExprOperatorTabl
//~ String Generation //~ String Generation
MD_FUNCTION MD_String8List MD_DebugStringListFromNode(MD_Arena *arena, MD_Node *node, int indent, MD_String8 indent_string, MD_GenerateFlags flags); MD_FUNCTION void MD_DebugDumpFromNode(MD_Arena *arena, MD_String8List *out, MD_Node *node,
MD_FUNCTION MD_String8List MD_ReconstructedStringListFromNode(MD_Arena *arena, MD_Node *node, int indent, MD_String8 indent_string, MD_GenerateFlags flags); int indent, MD_String8 indent_string,
MD_GenerateFlags flags);
MD_FUNCTION void MD_ReconstructionFromNode(MD_Arena *arena, MD_String8List *out, MD_Node *node,
int indent, MD_String8 indent_string,
MD_GenerateFlags flags);
//~ Command Line Argument Helper //~ Command Line Argument Helper
+9 -3
View File
@@ -784,7 +784,9 @@ int main(void)
MD_String8 code = MD_S8Lit("@foo @bar @baz a: { b c d e f }"); MD_String8 code = MD_S8Lit("@foo @bar @baz a: { b c d e f }");
MD_String8 expected = MD_S8Lit("@foo\n@bar\n@baz\na:\n{\n b,\n c,\n d,\n e,\n f,\n}"); MD_String8 expected = MD_S8Lit("@foo\n@bar\n@baz\na:\n{\n b,\n c,\n d,\n e,\n f,\n}");
MD_ParseResult parse = MD_ParseOneNode(arena, code, 0); MD_ParseResult parse = MD_ParseOneNode(arena, code, 0);
MD_String8List actual_strings = MD_DebugStringListFromNode(arena, parse.node, 0, MD_S8Lit(" "), MD_GenerateFlags_Tree); MD_String8List actual_strings = {0};
MD_DebugStringListFromNode(arena, &actual_strings, parse.node,
0, MD_S8Lit(" "), MD_GenerateFlags_Tree);
MD_String8 actual = MD_S8ListJoin(arena, actual_strings, 0); MD_String8 actual = MD_S8ListJoin(arena, actual_strings, 0);
TestResult(MD_S8Match(expected, actual, 0)); TestResult(MD_S8Match(expected, actual, 0));
} }
@@ -792,7 +794,9 @@ int main(void)
MD_String8 code = MD_S8Lit("@foo(1, 2, 3) a: { x y }"); MD_String8 code = MD_S8Lit("@foo(1, 2, 3) a: { x y }");
MD_String8 expected = MD_S8Lit("@foo(1,\n 2,\n 3)\na:\n{\n x,\n y,\n}"); MD_String8 expected = MD_S8Lit("@foo(1,\n 2,\n 3)\na:\n{\n x,\n y,\n}");
MD_ParseResult parse = MD_ParseOneNode(arena, code, 0); MD_ParseResult parse = MD_ParseOneNode(arena, code, 0);
MD_String8List actual_strings = MD_DebugStringListFromNode(arena, parse.node, 0, MD_S8Lit(" "), MD_GenerateFlags_Tree); MD_String8List actual_strings = {0};
MD_DebugStringListFromNode(arena, &actual_strings, parse.node,
0, MD_S8Lit(" "), MD_GenerateFlags_Tree);
MD_String8 actual = MD_S8ListJoin(arena, actual_strings, 0); MD_String8 actual = MD_S8ListJoin(arena, actual_strings, 0);
TestResult(MD_S8Match(expected, actual, 0)); TestResult(MD_S8Match(expected, actual, 0));
} }
@@ -800,7 +804,9 @@ int main(void)
MD_String8 code = MD_S8Lit("// foo\na"); MD_String8 code = MD_S8Lit("// foo\na");
MD_String8 expected = MD_S8Lit("/*\n foo\n*/\na"); MD_String8 expected = MD_S8Lit("/*\n foo\n*/\na");
MD_ParseResult parse = MD_ParseOneNode(arena, code, 0); MD_ParseResult parse = MD_ParseOneNode(arena, code, 0);
MD_String8List actual_strings = MD_DebugStringListFromNode(arena, parse.node, 0, MD_S8Lit(" "), MD_GenerateFlags_Tree|MD_GenerateFlag_Comments); MD_String8List actual_strings = {0};
MD_DebugStringListFromNode(arena, &actual_strings, parse.node, 0, MD_S8Lit(" "),
MD_GenerateFlags_Tree|MD_GenerateFlag_Comments);
MD_String8 actual = MD_S8ListJoin(arena, actual_strings, 0); MD_String8 actual = MD_S8ListJoin(arena, actual_strings, 0);
TestResult(MD_S8Match(expected, actual, 0)); TestResult(MD_S8Match(expected, actual, 0));
} }