- // return darg->ptr = func->handler(darg->ptr, darg->type, func->var->arg, &darg->mem);
+static inline impl_val *psi_let_func(let_func *func, decl_arg *darg) {
+ impl_arg *iarg = func->var->arg;
+
+ if (func->outer && !iarg) {
+ impl_arg *outer_arg = locate_let_val_impl_var(func->outer)->arg;
+ iarg = init_impl_arg(
+ init_impl_type(PSI_T_MIXED, "mixed"),
+ copy_impl_var(func->var), NULL);
+
+
+ if (!(iarg->_zv = zend_hash_str_find(Z_ARRVAL_P(outer_arg->_zv), &iarg->var->name[1], strlen(iarg->var->name)-1))) {
+ iarg->_zv = zend_hash_str_add_empty_element(Z_ARRVAL_P(outer_arg->_zv), &iarg->var->name[1], strlen(iarg->var->name)-1);
+ }
+ }
+ return darg->ptr = psi_let_func_ex(func, darg->ptr, darg->type, iarg->type->type, &iarg->val, iarg->_zv, &darg->mem);