fix float formats; fix sime defval edge cases
[m6w6/ext-psi] / src / types / decl_enum.c
index 85ce187a1bfc546e05c68db04ade98e5ebc96e1c..df353398d2acface6ebaf3d0291292ff7af371c7 100644 (file)
 #include "php_psi_stdinc.h"
 #include "data.h"
 
-struct psi_decl_enum *psi_decl_enum_init(const char *name, struct psi_plist *l)
+struct psi_decl_enum *psi_decl_enum_init(zend_string *name, struct psi_plist *l)
 {
-       struct psi_decl_enum *e = calloc(1, sizeof(*e));
-       e->name = strdup(name);
+       struct psi_decl_enum *e = pecalloc(1, sizeof(*e), 1);
+       e->name = zend_string_copy(name);
        e->items = l;
        return e;
 }
@@ -40,35 +40,33 @@ void psi_decl_enum_free(struct psi_decl_enum **e_ptr)
                struct psi_decl_enum *e = *e_ptr;
 
                *e_ptr = NULL;
-               if (e->token) {
-                       free(e->token);
-               }
+               psi_token_free(&e->token);
                if (e->items) {
                        psi_plist_free(e->items);
                }
-               free(e->name);
+               zend_string_release(e->name);
                free(e);
        }
 }
 
-void psi_decl_enum_dump(int fd, struct psi_decl_enum *e, unsigned level)
+void psi_decl_enum_dump(struct psi_dump *dump, struct psi_decl_enum *e, unsigned level)
 {
-       dprintf(fd, "enum %s {\n", e->name);
+       bool is_anon = psi_decl_type_is_anon(e->name, "enum");
+       PSI_DUMP(dump, "enum %s%s%s {\n",
+                       is_anon ? "/* ":"", e->name->val, is_anon ? " */":"");
        if (e->items) {
                size_t i = 0;
                struct psi_decl_enum_item *item;
 
-               ++level;
                while (psi_plist_get(e->items, i++, &item)) {
                        if (i > 1) {
-                               dprintf(fd, ",\n");
+                               PSI_DUMP(dump, ",\n");
                        }
-                       dprintf(fd, "%s", psi_t_indent(level));
-                       psi_decl_enum_item_dump(fd, item);
+                       PSI_DUMP(dump, "%s", psi_t_indent(level + 1));
+                       psi_decl_enum_item_dump(dump, item);
                }
-               --level;
        }
-       dprintf(fd, "\n}");
+       PSI_DUMP(dump, "\n}");
 }
 
 bool psi_decl_enum_validate(struct psi_data *data, struct psi_decl_enum *e)
@@ -77,7 +75,7 @@ bool psi_decl_enum_validate(struct psi_data *data, struct psi_decl_enum *e)
        struct psi_decl_enum_item *i, *p = NULL;
 
        if (!psi_plist_count(e->items)) {
-               data->error(data, e->token, PSI_WARNING, "Empty enum '%s'", e->name);
+               data->error(data, e->token, PSI_WARNING, "Empty enum '%s'", e->name->val);
                return false;
        }