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");
{
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),
*
* @param kind the kind of the entity to allocate
*/
-entity_t *allocate_entity_zero(entity_kind_t const kind, entity_namespace_t const namespc, symbol_t *const symbol)
+entity_t *allocate_entity_zero(entity_kind_t const kind, entity_namespace_t const namespc, symbol_t *const symbol, source_position_t const *const pos)
{
- size_t size = get_entity_struct_size(kind);
- entity_t *entity = allocate_ast_zero(size);
- entity->kind = kind;
- entity->base.namespc = namespc;
- entity->base.symbol = symbol;
+ 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.source_position = *pos;
return entity;
}
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;
+}