Be more widely accepting for missing variant/enum fields
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 4 Dec 2013 16:09:16 +0000 (17:09 +0100)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 4 Dec 2013 16:09:16 +0000 (17:09 +0100)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
types/variant.c

index 1f0dc6aafa37ab187c8f97f112c1fd15b6a2d44f..3641fa05d16b69a22074170917f5f653eaa17d4e 100644 (file)
@@ -124,53 +124,6 @@ struct declaration_variant *
        return variant_declaration;
 }
 
        return variant_declaration;
 }
 
-/*
- * tag_instance is assumed to be an enumeration.
- * Returns 0 if OK, < 0 if error.
- */
-static
-int check_enum_tag(struct definition_variant *variant,
-                  struct bt_definition *enum_tag)
-{
-       struct definition_enum *_enum =
-               container_of(enum_tag, struct definition_enum, p);
-       struct declaration_enum *enum_declaration = _enum->declaration;
-       int missing_field = 0;
-       unsigned long i;
-
-       /*
-        * Strictly speaking, each enumerator must map to a field of the
-        * variant. However, we are even stricter here by requiring that each
-        * variant choice map to an enumerator too. We then validate that the
-        * number of enumerators equals the number of variant choices.
-        */
-       if (variant->declaration->untagged_variant->fields->len != bt_enum_get_nr_enumerators(enum_declaration))
-               return -EPERM;
-
-       for (i = 0; i < variant->declaration->untagged_variant->fields->len; i++) {
-               struct declaration_field *field_declaration =
-                       &g_array_index(variant->declaration->untagged_variant->fields,
-                                      struct declaration_field, i);
-               if (!bt_enum_quark_to_range_set(enum_declaration, field_declaration->name)) {
-                       missing_field = 1;
-                       break;
-               }
-       }
-       if (missing_field)
-               return -EPERM;
-
-       /*
-        * Check the enumeration: it must map each value to one and only one
-        * enumerator tag.
-        * TODO: we should also check that each range map to one and only one
-        * tag. For the moment, we will simply check this dynamically in
-        * variant_declaration_get_current_field().
-        */
-       return 0;
-}
-
-
-
 static
 struct bt_definition *
        _variant_definition_new(struct bt_declaration *declaration,
 static
 struct bt_definition *
        _variant_definition_new(struct bt_declaration *declaration,
@@ -206,8 +159,7 @@ struct bt_definition *
                                                   variant_declaration->tag_name,
                                                   parent_scope);
                                              
                                                   variant_declaration->tag_name,
                                                   parent_scope);
                                              
-       if (!variant->enum_tag
-           || check_enum_tag(variant, variant->enum_tag) < 0)
+       if (!variant->enum_tag)
                goto error;
        bt_definition_ref(variant->enum_tag);
        variant->fields = g_ptr_array_sized_new(variant_declaration->untagged_variant->fields->len);
                goto error;
        bt_definition_ref(variant->enum_tag);
        variant->fields = g_ptr_array_sized_new(variant_declaration->untagged_variant->fields->len);
This page took 0.024052 seconds and 4 git commands to generate.