X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fcall.c;h=22516c77cf7f2280d627fc6bffbd745f9b19868b;hp=015b626323484e5f01351a2653dd9d155f2616de;hb=2559f07a178b681dc240e20153ff5abdff54cb34;hpb=97c640850205296e225180b847716f9e55f0c622 diff --git a/src/call.c b/src/call.c index 015b626..22516c7 100644 --- a/src/call.c +++ b/src/call.c @@ -159,9 +159,9 @@ struct psi_call_frame_symbol *psi_call_frame_fetch_symbol( struct psi_call_frame *frame, struct psi_decl_var *dvar) { struct psi_call_frame_symbol *frame_sym; - frame_sym = zend_hash_str_find_ptr(&frame->symbols, dvar->fqn, strlen(dvar->fqn)); + frame_sym = zend_hash_find_ptr(&frame->symbols, dvar->fqn); if (!frame_sym) { - frame_sym = zend_hash_str_add_ptr(&frame->symbols, dvar->fqn, strlen(dvar->fqn), + frame_sym = zend_hash_add_ptr(&frame->symbols, dvar->fqn, psi_call_frame_symbol_init(dvar)); } return frame_sym; @@ -173,17 +173,16 @@ zval *psi_call_frame_new_argument(struct psi_call_frame *frame, /* varargs are just appended with numeric indices */ return zend_hash_next_index_insert_ptr(&frame->arguments, frame_arg); } else { - return zend_hash_str_add_ptr(&frame->arguments, - frame_arg->spec->var->name, strlen(frame_arg->spec->var->name), - frame_arg); + return zend_hash_add_ptr(&frame->arguments, + frame_arg->spec->var->name, frame_arg); } } zval *psi_call_frame_sub_argument(struct psi_call_frame *frame, - struct psi_impl_var *inner_var, zval *outer_zval, const char *name) { + struct psi_impl_var *inner_var, zval *outer_zval, zend_string *name) { struct psi_call_frame_argument *iarg; zval *inner_zval = zend_symtable_str_find(Z_ARRVAL_P(outer_zval), - &inner_var->name[1], strlen(&inner_var->name[1])); + &inner_var->name->val[1], inner_var->name->len - 1); if (!inner_zval) { zval empty_zval; @@ -191,7 +190,7 @@ zval *psi_call_frame_sub_argument(struct psi_call_frame *frame, SEPARATE_ZVAL(outer_zval); ZVAL_NULL(&empty_zval); inner_zval = zend_symtable_str_update(Z_ARRVAL_P(outer_zval), - &inner_var->name[1], strlen(&inner_var->name[1]), + &inner_var->name->val[1], inner_var->name->len - 1, &empty_zval); } @@ -200,21 +199,23 @@ zval *psi_call_frame_sub_argument(struct psi_call_frame *frame, if (!iarg) { struct psi_call_frame_argument *frame_arg; impl_val empty_val = {0}; + zend_string *type_str = zend_string_init_interned(ZEND_STRL("mixed"), 1); struct psi_impl_arg *carg_spec = psi_impl_arg_init( - psi_impl_type_init(PSI_T_MIXED, "mixed"), + psi_impl_type_init(PSI_T_MIXED, type_str), psi_impl_var_copy(inner_var), NULL); psi_call_frame_push_auto_ex(frame, carg_spec, (void(*)(void*)) psi_impl_arg_free); frame_arg = psi_call_frame_argument_init(carg_spec, &empty_val, inner_zval, 0); - zend_hash_str_add_ptr(&frame->arguments, name, strlen(name), frame_arg); + zend_hash_add_ptr(&frame->arguments, name, frame_arg); + zend_string_release(type_str); } return inner_zval; } struct psi_call_frame_argument *psi_call_frame_get_argument( - struct psi_call_frame *frame, const char *name) { - return zend_hash_str_find_ptr(&frame->arguments, name, strlen(name)); + struct psi_call_frame *frame, zend_string *name) { + return zend_hash_find_ptr(&frame->arguments, name); } size_t psi_call_frame_num_var_args(struct psi_call_frame *frame) { @@ -546,8 +547,7 @@ void psi_call_frame_free(struct psi_call_frame *frame) { memcpy(temp, &frame->temp, sizeof(*temp)); ZVAL_OBJ(&zlocal, psi_object_init_ex(NULL, temp, psi_call_frame_local_auto_dtor)); - zend_set_local_var_str(frame->impl->func->name, - strlen(frame->impl->func->name), &zlocal, /* force */ 1); + zend_set_local_var(frame->impl->func->name, &zlocal, /* force */ 1); } else { zend_llist_destroy(&frame->temp); }