long double calc
[m6w6/ext-psi] / src / parser.h
index b27fdafccbe96ec22286b64f83f3d39b117267a1..de5ba10fbdebede9a99037a54a0e393b121e834c 100644 (file)
@@ -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;
@@ -320,7 +323,7 @@ typedef struct decl_callinfo {
        void *info;
        size_t argc;
        void **args;
-       void *rval;
+       void **rval;
 } decl_callinfo;
 
 typedef struct decl {
@@ -377,6 +380,10 @@ typedef struct decl_struct {
        char *name;
        decl_args *args;
        size_t size;
+       struct {
+               void *type;
+               void (*dtor)(void *type);
+       } engine;
 } decl_struct;
 
 static inline decl_struct *init_decl_struct(const char *name, decl_args *args) {
@@ -393,6 +400,9 @@ static inline void free_decl_struct(decl_struct *s) {
        if (s->args) {
                free_decl_args(s->args);
        }
+       if (s->engine.type && s->engine.dtor) {
+               s->engine.dtor(s->engine.type);
+       }
        free(s->name);
        free(s);
 }
@@ -1206,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;
        }