projects
/
m6w6
/
ext-psi
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
working asctime
[m6w6/ext-psi]
/
src
/
parser.h
diff --git
a/src/parser.h
b/src/parser.h
index 8df41eafe50cf95aceba8e8fd9e32a938c809d1f..f56f278eaf86257b91b8ebe973ea581d18999765 100644
(file)
--- a/
src/parser.h
+++ b/
src/parser.h
@@
-14,6
+14,10
@@
typedef int token_t;
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;
typedef struct PSI_Token {
token_t type;
unsigned line;
@@
-29,10
+33,9
@@
typedef struct decl_type {
} decl_type;
static inline decl_type *init_decl_type(token_t type, char *name) {
} 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->type = type;
t->name = strdup(name);
- t->real = NULL;
return t;
}
return t;
}
@@
-221,7
+224,9
@@
static inline decl* init_decl(decl_abi *abi, decl_arg *func, decl_args *args) {
static inline void free_decl(decl *d) {
free_decl_abi(d->abi);
free_decl_arg(d->func);
static inline void free_decl(decl *d) {
free_decl_abi(d->abi);
free_decl_arg(d->func);
- free_decl_args(d->args);
+ if (d->args) {
+ free_decl_args(d->args);
+ }
free(d);
}
free(d);
}
@@
-268,11
+273,19
@@
static inline decl_struct *init_decl_struct(char *name, decl_args *args) {
}
static inline void free_decl_struct(decl_struct *s) {
}
static inline void free_decl_struct(decl_struct *s) {
- free_decl_args(s->args);
+ if (s->args) {
+ free_decl_args(s->args);
+ }
free(s->name);
free(s);
}
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;
typedef struct decl_structs {
size_t count;
decl_struct **list;
@@
-302,6
+315,7
@@
typedef union impl_val {
char cval;
short sval;
int ival;
char cval;
short sval;
int ival;
+ float fval;
double dval;
zend_long lval;
zend_string *str;
double dval;
zend_long lval;
zend_string *str;