parser: Remove the unused attribute alignment from struct declaration_specifiers_t.
[cparser] / entity.c
index 89d69e3..dbada8d 100644 (file)
--- a/entity.c
+++ b/entity.c
@@ -1,21 +1,6 @@
 /*
  * This file is part of cparser.
- * Copyright (C) 2007-2009 Matthias Braun <matze@braunis.de>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
+ * Copyright (C) 2012 Matthias Braun <matze@braunis.de>
  */
 #include <config.h>
 
@@ -43,10 +28,9 @@ const char *get_entity_kind_name(entity_kind_t kind)
        case ENTITY_LOCAL_LABEL:     return "local label";
        case ENTITY_TYPEDEF:         return "typedef";
        case ENTITY_NAMESPACE:       return "namespace";
-       case ENTITY_INVALID:         break;
        }
 
-       panic("Invalid entity kind encountered in get_entity_kind_name");
+       panic("invalid entity kind");
 }
 
 /**
@@ -58,7 +42,7 @@ static size_t get_entity_struct_size(entity_kind_t kind)
 {
        static const size_t sizes[] = {
                [ENTITY_VARIABLE]        = sizeof(variable_t),
-               [ENTITY_PARAMETER]       = sizeof(parameter_t),
+               [ENTITY_PARAMETER]       = sizeof(variable_t),
                [ENTITY_COMPOUND_MEMBER] = sizeof(compound_member_t),
                [ENTITY_FUNCTION]        = sizeof(function_t),
                [ENTITY_TYPEDEF]         = sizeof(typedef_t),
@@ -81,11 +65,14 @@ static size_t get_entity_struct_size(entity_kind_t kind)
  *
  * @param kind   the kind of the entity to allocate
  */
-entity_t *allocate_entity_zero(entity_kind_t kind)
+entity_t *allocate_entity_zero(entity_kind_t const kind, entity_namespace_t const namespc, symbol_t *const symbol, position_t const *const pos)
 {
-       size_t    size   = get_entity_struct_size(kind);
-       entity_t *entity = allocate_ast_zero(size);
-       entity->kind     = kind;
+       size_t    const size   = get_entity_struct_size(kind);
+       entity_t *const entity = allocate_ast_zero(size);
+       entity->kind           = kind;
+       entity->base.namespc   = namespc;
+       entity->base.symbol    = symbol;
+       entity->base.pos       = *pos;
        return entity;
 }
 
@@ -103,3 +90,13 @@ elf_visibility_tag_t get_elf_visibility_from_string(const char *string)
                return ELF_VISIBILITY_ERROR;
        }
 }
+
+entity_t *skip_unnamed_bitfields(entity_t *entry)
+{
+       for (; entry != NULL; entry = entry->base.next) {
+               assert(entry->kind == ENTITY_COMPOUND_MEMBER);
+               if (!entry->compound_member.bitfield || entry->base.symbol != NULL)
+                       break;
+       }
+       return entry;
+}