remove more unnecessary XXX_INVALID constants
[cparser] / entity.c
index 748ead0..23fab8b 100644 (file)
--- a/entity.c
+++ b/entity.c
@@ -25,6 +25,7 @@
 #include "ast_t.h"
 #include "adt/error.h"
 #include "adt/util.h"
+#include "adt/strutil.h"
 
 const char *get_entity_kind_name(entity_kind_t kind)
 {
@@ -42,7 +43,6 @@ 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");
@@ -80,10 +80,27 @@ 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)
 {
-       size_t    size   = get_entity_struct_size(kind);
-       entity_t *entity = allocate_ast_zero(size);
-       entity->kind     = kind;
+       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;
        return entity;
 }
+
+elf_visibility_tag_t get_elf_visibility_from_string(const char *string)
+{
+       if (streq(string, "default")) {
+               return ELF_VISIBILITY_DEFAULT;
+       } else if (streq(string, "hidden")) {
+               return ELF_VISIBILITY_HIDDEN;
+       } else if (streq(string, "internal")) {
+               return ELF_VISIBILITY_INTERNAL;
+       } else if (streq(string, "protected")) {
+               return ELF_VISIBILITY_PROTECTED;
+       } else {
+               return ELF_VISIBILITY_ERROR;
+       }
+}