Logging for ParseScript().

Improved debug output.
This commit is contained in:
Jim Derry 2021-08-25 16:03:52 -04:00
parent a604621fef
commit a873a190e1
3 changed files with 53 additions and 14 deletions

View File

@ -322,6 +322,8 @@ struct _Node
uint line; /**< current line of document */
uint column; /**< current column of document */
int idx; /**< general purpose register */
Bool closed; /**< true if closed by explicit end tag */
Bool implicit; /**< true if inferred */

View File

@ -5154,6 +5154,12 @@ Node* TY_(ParseRowGroup)( TidyDocImpl* doc, Node *rowgroup, GetTokenMode ARG_UNU
Node* TY_(ParseScript)( TidyDocImpl* doc, Node *script, GetTokenMode ARG_UNUSED(mode) )
{
Node *node = NULL;
#if defined(ENABLE_DEBUG_LOG)
static int depth_parser = 0;
static int count_parser = 0;
#endif
DEBUG_LOG_ENTER_WITH_NODE(script);
doc->lexer->parent = script;
node = TY_(GetToken)(doc, CdataContent);
@ -5167,10 +5173,12 @@ Node* TY_(ParseScript)( TidyDocImpl* doc, Node *script, GetTokenMode ARG_UNUSED(
{
/* handle e.g. a document like "<script>" */
TY_(Report)(doc, script, NULL, MISSING_ENDTAG_FOR);
DEBUG_LOG_EXIT;
return NULL;
}
node = TY_(GetToken)(doc, IgnoreWhitespace);
DEBUG_LOG_GOT_TOKEN(node);
if (!(node && node->type == EndTag && node->tag &&
node->tag->id == script->tag->id))
@ -5184,6 +5192,7 @@ Node* TY_(ParseScript)( TidyDocImpl* doc, Node *script, GetTokenMode ARG_UNUSED(
{
TY_(FreeNode)(doc, node);
}
DEBUG_LOG_EXIT;
return NULL;
}

View File

@ -2048,24 +2048,52 @@ void dbg_show_node( TidyDocImpl* doc, Node *node, int caller, int indent )
SPRTF("\n");
}
/* Tail recursion here with sensible compilers will re-use
the stack frame and avoid overflows during debugging.
/* Make this non-recursive, because we really do want to eliminate
recursion that makes us crash, even when debugging.
*/
void dbg_show_all_nodes_loop( TidyDocImpl* doc, Node *node, int indent )
{
while ( node && (node = node->next) )
{
dbg_show_node( doc, node, 0, indent );
dbg_show_all_nodes_loop( doc, node->content, indent + 1 );
}
}
void dbg_show_all_nodes( TidyDocImpl* doc, Node *node, int indent )
{
dbg_show_node( doc, node, 0, indent );
dbg_show_all_nodes_loop( doc, node->content, indent + 1 );
}
Stack *stack = TY_(newStack)(doc, 16);
Node *child = NULL;
Node *next = NULL;
dbg_show_node( doc, node, 0, indent++ );
if ( (child = node->content) )
{
while ( child )
{
if ( (next = child->next) )
{
next->idx = indent;
}
dbg_show_node( doc, child, 0, indent );
if (child->content)
{
TY_(push)(stack, next);
indent++;
child = child->content;
continue;
}
if (next)
{
child = next;
}
else
{
if ( (child = TY_(pop)(stack)) )
{
indent = child->idx;
}
}
}
TY_(freeStack)(stack);
}
}
#endif
int tidyDocCleanAndRepair( TidyDocImpl* doc )