api refactoring
[m6w6/ext-psi] / src / types / decl_var.h
diff --git a/src/types/decl_var.h b/src/types/decl_var.h
new file mode 100644 (file)
index 0000000..166a69e
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef _PSI_TYPES_DECL_VAR_H
+#define _PSI_TYPES_DECL_VAR_H
+
+typedef struct decl_var {
+       struct psi_token *token;
+       char *name;
+       unsigned pointer_level;
+       unsigned array_size;
+       struct decl_arg *arg;
+} decl_var;
+
+static inline decl_var *init_decl_var(const char *name, unsigned pl, unsigned as) {
+       decl_var *v = calloc(1, sizeof(*v));
+       v->name = (char *) strdup((const char *) name);
+       v->pointer_level = pl;
+       v->array_size = as;
+       return v;
+}
+
+static inline decl_var *copy_decl_var(decl_var *src) {
+       decl_var *dest = calloc(1, sizeof(*dest));
+
+       memcpy(dest, src, sizeof(*dest));
+       dest->name = strdup(dest->name);
+       if (dest->token) {
+               dest->token = psi_token_copy(dest->token);
+       }
+       return dest;
+}
+
+static inline void free_decl_var(decl_var *var) {
+       if (var->token) {
+               free(var->token);
+       }
+       free(var->name);
+       free(var);
+}
+
+#endif