+typedef union impl_val {
+ unsigned char bval;
+ char cval;
+ short sval;
+ int ival;
+ double dval;
+ zend_long lval;
+ zend_string *str;
+ void *ptr;
+} impl_val;
+
+static inline impl_val *deref_impl_val(unsigned level, impl_val *ret_val, decl_arg *darg) {
+ unsigned i;
+
+ for (i = level; i < darg->var->pointer_level && ret_val->ptr; ++i) {
+ ret_val = *(void **)ret_val;
+ }
+ return ret_val;
+}
+