X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Fparser.h;h=5582922453923a3a4ce8a0a1dc2e8e61577d1799;hb=b4a3c33fc143fd57288fcfe0878e7a22eeaf61bf;hp=d5ff8967b4ae2d343bfee026e9e1d7748896179a;hpb=4ecafb11128dc652013564387ab33b8b9110f039;p=m6w6%2Fext-psi diff --git a/src/parser.h b/src/parser.h index d5ff896..5582922 100644 --- a/src/parser.h +++ b/src/parser.h @@ -23,7 +23,7 @@ size_t psi_t_size(token_t); typedef struct PSI_Token { token_t type; - unsigned size, *line; + unsigned size, line; char *text, *file; char buf[1]; } PSI_Token; @@ -43,6 +43,9 @@ typedef union impl_val { uint64_t u64; float fval; double dval; +#ifdef HAVE_LONG_DOUBLE + long double ldval; +#endif union { zend_bool bval; zend_long lval; @@ -1213,7 +1216,7 @@ static inline impl_val *enref_impl_val(void *ptr, decl_var *var) { var->name, var->pointer_level, var->arg->var->pointer_level, var->array_size, var->arg->var->array_size); #endif - if (!var->pointer_level && real_decl_type(var->arg->type)->type != PSI_T_STRUCT) { + if (!var->pointer_level ){//&& real_decl_type(var->arg->type)->type != PSI_T_STRUCT) { return ptr; } @@ -1296,7 +1299,7 @@ typedef struct PSI_Parser { } PSI_Parser; static inline size_t PSI_TokenAllocSize(size_t token_len, size_t fname_len) { - return sizeof(PSI_Token) + token_len + fname_len + sizeof(unsigned) + 2; + return sizeof(PSI_Token) + token_len + fname_len + 2; } static inline PSI_Token *PSI_TokenAlloc(PSI_Parser *P) { @@ -1317,11 +1320,10 @@ static inline PSI_Token *PSI_TokenAlloc(PSI_Parser *P) { T->size = token_len; T->text = &T->buf[0]; T->file = &T->buf[token_len + 1]; - T->line = (void *) &T->buf[fname_len + token_len + 2]; + T->line = P->line; memcpy(T->text, P->tok, token_len); memcpy(T->file, P->psi.file.fn, fname_len); - memcpy(T->line, &P->line, sizeof(unsigned)); return T; } @@ -1348,12 +1350,14 @@ static inline PSI_Token *PSI_TokenCat(unsigned argc, ...) { PSI_Token *arg = va_arg(argv, PSI_Token *); if (T) { - size_t fname_len = strlen(T->file); + size_t token_len = T->size, fname_len = strlen(T->file); - T = realloc(T, PSI_TokenAllocSize(T->size + arg->size, fname_len)); - memmove(&T->buf[T->size + 1], T->file, fname_len + 1); - memcpy(T->file - 1, arg->text, arg->size + 1); + T = realloc(T, PSI_TokenAllocSize(T->size += arg->size + 1, fname_len)); + T->text = &T->buf[0]; T->file = &T->buf[T->size + 1]; + T->buf[token_len] = ' '; + memmove(&T->buf[T->size + 1], &T->buf[token_len + 1], fname_len + 1); + memcpy(&T->buf[token_len + 1], arg->text, arg->size + 1); } else { T = PSI_TokenCopy(arg); T->type = PSI_T_NAME;