Fixes for enum typedefs (still working on comments...)

This commit is contained in:
Michael R Sweet 2008-03-19 21:09:21 +00:00
parent 2b270e9072
commit a57b72a556
3 changed files with 80 additions and 26 deletions

View File

@ -1,6 +1,12 @@
CHANGES - 2008-01-28
CHANGES - 2008-03-18
--------------------
CHANGES IN Mini-XML 2.5.1
- The mxmldoc program now handles "typedef enum name {} name"
correctly.
CHANGES IN Mini-XML 2.5
- The mxmldoc program now makes greater use of CSS and

View File

@ -1,3 +1,4 @@
/*#define DEBUG 1*/
/*
* "$Id$"
*
@ -1206,7 +1207,9 @@ scan_file(const char *filename, /* I - Filename */
if (structclass)
scope = NULL;
if (!typedefnode)
enumeration = NULL;
constant = NULL;
structclass = NULL;
@ -1261,7 +1264,8 @@ scan_file(const char *filename, /* I - Filename */
case ';' :
#ifdef DEBUG
fputs("Identifier: <<<< ; >>>\n", stderr);
fprintf(stderr, " function=%p, type=%p\n", function, type);
fprintf(stderr, " enumeration=%p, function=%p, type=%p, type->child=%p, typedefnode=%p\n",
enumeration, function, type, type ? type->child : NULL, typedefnode);
#endif /* DEBUG */
if (function)
@ -1283,7 +1287,7 @@ scan_file(const char *filename, /* I - Filename */
if (type)
{
/*
* See if we have a function typedef...
* See if we have a typedef...
*/
if (type->child &&
@ -1306,13 +1310,21 @@ scan_file(const char *filename, /* I - Filename */
break;
}
if (node)
{
if (!node)
node = type->last_child;
#ifdef DEBUG
fprintf(stderr, " ADDING TYPEDEF FOR %p(%s)...\n",
node, node->value.text.string);
#endif /* DEBUG */
mxmlElementSetAttr(typedefnode, "name",
node->value.text.string);
sort_node(tree, typedefnode);
if (type->child != node)
mxmlDelete(type->child);
mxmlDelete(node);
if (type->child)
@ -1323,6 +1335,31 @@ scan_file(const char *filename, /* I - Filename */
type = NULL;
break;
}
else if (typedefnode && enumeration)
{
/*
* Add enum typedef...
*/
node = type->child;
#ifdef DEBUG
fprintf(stderr, " ADDING TYPEDEF FOR %p(%s)...\n",
node, node->value.text.string);
#endif /* DEBUG */
mxmlElementSetAttr(typedefnode, "name",
node->value.text.string);
sort_node(tree, typedefnode);
mxmlDelete(type);
type = mxmlNewElement(typedefnode, "type");
mxmlNewText(type, 0, "enum");
mxmlNewText(type, 1,
mxmlElementGetAttr(enumeration, "name"));
enumeration = NULL;
type = NULL;
break;
}
mxmlDelete(type);
@ -1438,8 +1475,11 @@ scan_file(const char *filename, /* I - Filename */
if (comment->child != comment->last_child)
{
#ifdef DEBUG
fprintf(stderr, " removing comment %p, last comment %p...\n",
comment->child, comment->last_child);
fprintf(stderr, " removing comment %p(%20.20s), last comment %p(%20.20s)...\n",
comment->child,
comment->child ? comment->child->value.text.string : "",
comment->last_child,
comment->last_child ? comment->last_child->value.text.string : "");
#endif /* DEBUG */
mxmlDelete(comment->child);
#ifdef DEBUG
@ -1605,8 +1645,11 @@ scan_file(const char *filename, /* I - Filename */
if (comment->child != comment->last_child)
{
#ifdef DEBUG
fprintf(stderr, " removing comment %p, last comment %p...\n",
comment->child, comment->last_child);
fprintf(stderr, " removing comment %p(%20.20s), last comment %p(%20.20s)...\n",
comment->child,
comment->child ? comment->child->value.text.string : "",
comment->last_child,
comment->last_child ? comment->last_child->value.text.string : "");
#endif /* DEBUG */
mxmlDelete(comment->child);
#ifdef DEBUG
@ -1756,8 +1799,11 @@ scan_file(const char *filename, /* I - Filename */
if (comment->child != comment->last_child)
{
#ifdef DEBUG
fprintf(stderr, " removing comment %p, last comment %p...\n",
comment->child, comment->last_child);
fprintf(stderr, " removing comment %p(%20.20s), last comment %p(%20.20s)...\n",
comment->child,
comment->child ? comment->child->value.text.string : "",
comment->last_child,
comment->last_child ? comment->last_child->value.text.string : "");
#endif /* DEBUG */
mxmlDelete(comment->child);
#ifdef DEBUG

View File

@ -14,7 +14,7 @@ while test $# -gt 0; do
-v) mode="valgrind" ;;
*.h | *.c | *.cxx) files="$files $arg" ;;
*)
echo "Usage: ./dotest.sh [-g] [-v] [files]"
echo "Usage: ./dotest.sh [-f] [-g] [-v] [files]"
exit 1
;;
esac
@ -28,7 +28,9 @@ rm -f test.xml
case "$mode" in
gdb)
echo "run $framed test.xml $files >test.html 2>test.log" >.gdbcmds
echo "break malloc_error_break" >.gdbcmds
echo "set env DYLD_INSERT_LIBRARIES /usr/lib/libgmalloc.dylib" >>.gdbcmds
echo "run $framed test.xml $files >test.html 2>test.log" >>.gdbcmds
gdb -x .gdbcmds ../mxmldoc-static
;;