#include <stdlib.h>
#include <assert.h>
#include <glib.h>
+#include <inttypes.h>
#include <errno.h>
#include <babeltrace/list.h>
#include "ctf-scanner.h"
#include "ctf-parser.h"
#include "ctf-ast.h"
-#define printf_dbg(fmt, args...) fprintf(stderr, "%s: " fmt, __func__, ## args)
+#define fprintf_dbg(fd, fmt, args...) fprintf(fd, "%s: " fmt, __func__, ## args)
-static void print_tabs(FILE *fd, int depth)
+static
+void print_tabs(FILE *fd, int depth)
{
int i;
fprintf(fd, "\t");
}
+static
int ctf_visitor_print_unary_expression(FILE *fd, int depth, struct ctf_node *node)
{
int ret = 0;
case UNARY_SIGNED_CONSTANT:
print_tabs(fd, depth);
fprintf(fd, "<unary_expression value=");
- fprintf(fd, "%lld", node->u.unary_expression.u.signed_constant);
+ fprintf(fd, "%" PRId64, node->u.unary_expression.u.signed_constant);
fprintf(fd, " />\n");
break;
case UNARY_UNSIGNED_CONSTANT:
print_tabs(fd, depth);
fprintf(fd, "<unary_expression value=");
- fprintf(fd, "%llu", node->u.unary_expression.u.signed_constant);
+ fprintf(fd, "%" PRIu64, node->u.unary_expression.u.signed_constant);
fprintf(fd, " />\n");
break;
case UNARY_SBRAC:
print_tabs(fd, depth);
- fprintf(fd, "<unary_expression_sbrac>");
+ fprintf(fd, "<unary_expression_sbrac>\n");
ret = ctf_visitor_print_unary_expression(fd, depth + 1,
node->u.unary_expression.u.sbrac_exp);
if (ret)
return ret;
print_tabs(fd, depth);
- fprintf(fd, "</unary_expression_sbrac>");
+ fprintf(fd, "</unary_expression_sbrac>\n");
break;
case UNARY_NESTED:
print_tabs(fd, depth);
- fprintf(fd, "<unary_expression_nested>");
+ fprintf(fd, "<unary_expression_nested>\n");
ret = ctf_visitor_print_unary_expression(fd, depth + 1,
node->u.unary_expression.u.nested_exp);
if (ret)
return ret;
print_tabs(fd, depth);
- fprintf(fd, "</unary_expression_nested>");
+ fprintf(fd, "</unary_expression_nested>\n");
break;
case UNARY_UNKNOWN:
return 0;
}
+static
int ctf_visitor_print_type_specifier(FILE *fd, int depth, struct ctf_node *node)
{
print_tabs(fd, depth);
fprintf(fd, "bool");
break;
case TYPESPEC_COMPLEX:
- fprintf(fd, "complex");
+ fprintf(fd, "_Complex");
+ break;
+ case TYPESPEC_IMAGINARY:
+ fprintf(fd, "_Imaginary");
break;
case TYPESPEC_CONST:
fprintf(fd, "const");
return 0;
}
+static
int ctf_visitor_print_type_declarator(FILE *fd, int depth, struct ctf_node *node)
{
int ret = 0;
print_tabs(fd, depth);
fprintf(fd, "</type_declarator>\n");
}
- if (node->u.type_declarator.u.nested.length) {
+ if (!cds_list_empty(&node->u.type_declarator.u.nested.length)) {
print_tabs(fd, depth);
fprintf(fd, "<length>\n");
- ret = ctf_visitor_print_xml(fd, depth + 1,
- node->u.type_declarator.u.nested.length);
+ }
+ cds_list_for_each_entry(iter, &node->u.type_declarator.u.nested.length,
+ siblings) {
+ ret = ctf_visitor_print_xml(fd, depth + 1, iter);
if (ret)
return ret;
+ }
+ if (!cds_list_empty(&node->u.type_declarator.u.nested.length)) {
print_tabs(fd, depth);
fprintf(fd, "</length>\n");
}
fprintf(fd, "<enum >\n");
depth++;
- if (node->u._enum.container_type) {
+ if (!cds_list_empty(&node->u._enum.container_type)) {
print_tabs(fd, depth);
fprintf(fd, "<container_type>\n");
- ret = ctf_visitor_print_xml(fd, depth + 1, node->u._enum.container_type);
+ }
+
+ cds_list_for_each_entry(iter, &node->u._enum.container_type,
+ siblings) {
+ ret = ctf_visitor_print_xml(fd, depth + 1, iter);
if (ret)
return ret;
+ }
+ if (!cds_list_empty(&node->u._enum.container_type)) {
print_tabs(fd, depth);
fprintf(fd, "</container_type>\n");
}