Update typealias behavior
[babeltrace.git] / include / babeltrace / types.h
index 34e49aef18b7be474fb74f7221701f5e709deae4..ad28ac0912c85e98e8bc2c27acd0474e446e1d47 100644 (file)
@@ -90,6 +90,7 @@ struct definition;
 /* type scope */
 struct declaration_scope {
        /* Hash table mapping type name GQuark to "struct declaration" */
+       /* Used for both typedef and typealias. */
        GHashTable *typedef_declarations;
        /* Hash table mapping struct name GQuark to "struct declaration_struct" */
        GHashTable *struct_declarations;
@@ -123,6 +124,7 @@ enum ctf_type_id {
        CTF_TYPE_ENUM,
        CTF_TYPE_STRING,
        CTF_TYPE_STRUCT,
+       CTF_TYPE_UNTAGGED_VARIANT,
        CTF_TYPE_VARIANT,
        CTF_TYPE_ARRAY,
        CTF_TYPE_SEQUENCE,
@@ -285,15 +287,20 @@ struct definition_struct {
        GArray *fields;                 /* Array of struct field */
 };
 
-struct declaration_variant {
+struct declaration_untagged_variant {
        struct declaration p;
        GHashTable *fields_by_tag;      /* Tuples (field tag, field index) */
        struct declaration_scope *scope;
        GArray *fields;                 /* Array of declaration_field */
-       GQuark tag_name;                /* TODO */
-       /* Tag name must be nonzero and must exist when defining the variant */
 };
 
+struct declaration_variant {
+       struct declaration p;
+       struct declaration_untagged_variant *untagged_variant;
+       GArray *tag_name;               /* Array of GQuark */
+};
+
+/* A variant needs to be tagged to be defined. */
 struct definition_variant {
        struct definition p;
        struct declaration_variant *declaration;
@@ -380,9 +387,9 @@ int register_field_definition(GQuark field_name,
 struct definition_scope *
        new_definition_scope(struct definition_scope *parent_scope,
                             GQuark field_name);
-struct definition_scope *
-       new_dynamic_definition_scope(struct definition_scope *parent_scope,
-                                    GQuark field_name);
+void set_dynamic_definition_scope(struct definition *definition,
+                                 struct definition_scope *scope,
+                                 const char *root_name);
 void free_definition_scope(struct definition_scope *scope);
 
 void declaration_ref(struct declaration *declaration);
@@ -468,13 +475,16 @@ struct_get_field_from_index(struct definition_struct *struct_definition,
  * from numeric values to a single tag. Overlapping tag value ranges are
  * therefore forbidden.
  */
-struct declaration_variant *variant_declaration_new(const char *name,
+struct declaration_untagged_variant *untagged_variant_declaration_new(const char *name,
                struct declaration_scope *parent_scope);
-void variant_declaration_add_field(struct declaration_variant *variant_declaration,
-               const char *tag_name,
-               struct declaration *tag_declaration);
+struct declaration_variant *variant_declaration_new(struct declaration_untagged_variant *untagged_variant,
+               const char *tag);
+
+void untagged_variant_declaration_add_field(struct declaration_untagged_variant *untagged_variant_declaration,
+               const char *field_name,
+               struct declaration *field_declaration);
 struct declaration_field *
-       variant_declaration_get_field_from_tag(struct declaration_variant *variant_declaration,
+       untagged_variant_declaration_get_field_from_tag(struct declaration_untagged_variant *untagged_variant_declaration,
                GQuark tag);
 /*
  * Returns 0 on success, -EPERM on error.
@@ -508,4 +518,9 @@ struct declaration_sequence *
                struct declaration *elem_declaration,
                struct declaration_scope *parent_scope);
 
+/*
+ * in: path (dot separated), out: q (GArray of GQuark)
+ */
+void append_scope_path(const char *path, GArray *q);
+
 #endif /* _BABELTRACE_declarationS_H */
This page took 0.024289 seconds and 4 git commands to generate.