typedef int token_t;
+/* in php_psi.h */
+size_t psi_t_alignment(token_t);
+size_t psi_t_size(token_t);
+
typedef struct PSI_Token {
token_t type;
unsigned line;
} decl_type;
static inline decl_type *init_decl_type(token_t type, char *name) {
- decl_type *t = malloc(sizeof(*t));
+ decl_type *t = calloc(1, sizeof(*t));
t->type = type;
t->name = strdup(name);
- t->real = NULL;
return t;
}
if (s->args) {
free_decl_args(s->args);
}
+ if (s->layout) {
+ free(s->layout);
+ }
free(s->name);
free(s);
}
+static inline size_t decl_struct_size(decl_struct *s) {
+ size_t c = s->args->count - 1;
+ decl_type *type = real_decl_type(s->args->args[c]->type);
+ return s->layout[c].pos + psi_t_alignment(type->type);
+}
+
typedef struct decl_structs {
size_t count;
decl_struct **list;
char cval;
short sval;
int ival;
+ float fval;
double dval;
zend_long lval;
zend_string *str;