Introduce macro to enforce matching enum to string for node types
[babeltrace.git] / formats / ctf / metadata / ctf-ast.h
index ef863a0f2061fe929356927ce33a089ebc4be800..3fb38b2d6295c4eca0f0500374c68e7f17bd307d 100644 (file)
 #include <glib.h>
 #include <babeltrace/list.h>
 
-struct ctf_node;
-struct ctf_parser;
-
-enum node_type {
-       NODE_UNKNOWN = 0,
-       NODE_ROOT,
+// the parameter name (of the reentrant 'yyparse' function)
+// data is a pointer to a 'SParserParam' structure
+//#define YYPARSE_PARAM        scanner
 
-       NODE_EVENT,
-       NODE_STREAM,
-       NODE_ENV,
-       NODE_TRACE,
-       NODE_CLOCK,
+// the argument for the 'yylex' function
+#define YYLEX_PARAM    ((struct ctf_scanner *) scanner)->scanner
 
-       NODE_CTF_EXPRESSION,
-       NODE_UNARY_EXPRESSION,
-
-       NODE_TYPEDEF,
-       NODE_TYPEALIAS_TARGET,
-       NODE_TYPEALIAS_ALIAS,
-       NODE_TYPEALIAS,
-
-       NODE_TYPE_SPECIFIER,
-       NODE_TYPE_SPECIFIER_LIST,
-       NODE_POINTER,
-       NODE_TYPE_DECLARATOR,
+struct ctf_node;
+struct ctf_parser;
 
-       NODE_FLOATING_POINT,
-       NODE_INTEGER,
-       NODE_STRING,
-       NODE_ENUMERATOR,
-       NODE_ENUM,
-       NODE_STRUCT_OR_VARIANT_DECLARATION,
-       NODE_VARIANT,
-       NODE_STRUCT,
+#define FOREACH_CTF_NODES(F) \
+       F(NODE_UNKNOWN) \
+       F(NODE_ROOT) \
+       F(NODE_EVENT) \
+       F(NODE_STREAM) \
+       F(NODE_ENV) \
+       F(NODE_TRACE) \
+       F(NODE_CLOCK) \
+       F(NODE_CALLSITE) \
+       F(NODE_CTF_EXPRESSION) \
+       F(NODE_UNARY_EXPRESSION) \
+       F(NODE_TYPEDEF) \
+       F(NODE_TYPEALIAS_TARGET) \
+       F(NODE_TYPEALIAS_ALIAS) \
+       F(NODE_TYPEALIAS) \
+       F(NODE_TYPE_SPECIFIER) \
+       F(NODE_TYPE_SPECIFIER_LIST) \
+       F(NODE_POINTER) \
+       F(NODE_TYPE_DECLARATOR) \
+       F(NODE_FLOATING_POINT) \
+       F(NODE_INTEGER) \
+       F(NODE_STRING) \
+       F(NODE_ENUMERATOR) \
+       F(NODE_ENUM) \
+       F(NODE_STRUCT_OR_VARIANT_DECLARATION) \
+       F(NODE_VARIANT) \
+       F(NODE_STRUCT)
 
+enum node_type {
+#define ENTRY(S)       S,
+       FOREACH_CTF_NODES(ENTRY)
+#undef ENTRY
        NR_NODE_TYPES,
 };
 
@@ -68,6 +75,7 @@ struct ctf_node {
        struct bt_list_head siblings;
        struct bt_list_head tmp_head;
        struct bt_list_head gc;
+       unsigned int lineno;
 
        enum node_type type;
        union {
@@ -84,6 +92,7 @@ struct ctf_node {
                        struct bt_list_head stream;
                        struct bt_list_head event;
                        struct bt_list_head clock;
+                       struct bt_list_head callsite;
                } root;
                struct {
                        /*
@@ -120,6 +129,13 @@ struct ctf_node {
                         */
                        struct bt_list_head declaration_list;
                } clock;
+               struct {
+                       /*
+                        * Children nodes are ctf_expression, typedef,
+                        * typealias and type_specifier_list.
+                        */
+                       struct bt_list_head declaration_list;
+               } callsite;
                struct {
                        struct bt_list_head left;       /* Should be string */
                        struct bt_list_head right;      /* Unary exp. or type */
@@ -286,10 +302,16 @@ const char *node_type(struct ctf_node *node);
 
 struct ctf_trace;
 
+BT_HIDDEN
 int ctf_visitor_print_xml(FILE *fd, int depth, struct ctf_node *node);
+BT_HIDDEN
 int ctf_visitor_semantic_check(FILE *fd, int depth, struct ctf_node *node);
+BT_HIDDEN
 int ctf_visitor_parent_links(FILE *fd, int depth, struct ctf_node *node);
+BT_HIDDEN
 int ctf_visitor_construct_metadata(FILE *fd, int depth, struct ctf_node *node,
                        struct ctf_trace *trace, int byte_order);
+BT_HIDDEN
+int ctf_destroy_metadata(struct ctf_trace *trace);
 
 #endif /* _CTF_AST_H */
This page took 0.025709 seconds and 4 git commands to generate.