zend_compile_init_user_func(args->child[0], 0, lcname);
if (args->child[1]->kind == ZEND_AST_CALL
&& args->child[1]->child[0]->kind == ZEND_AST_ZVAL
+ && Z_TYPE_P(zend_ast_get_zval(args->child[1]->child[0])) == IS_STRING
&& args->child[1]->child[1]->kind == ZEND_AST_ARG_LIST) {
- zval *name = zend_ast_get_zval(args->child[1]->child[0]);
+ zend_string *orig_name = zend_ast_get_str(args->child[1]->child[0]);
zend_ast_list *list = zend_ast_get_list(args->child[1]->child[1]);
+ zend_bool is_fully_qualified;
+ zend_string *name = zend_resolve_function_name(orig_name, args->child[1]->child[0]->attr, &is_fully_qualified);
- if (Z_TYPE_P(name) == IS_STRING
- && zend_string_equals_literal_ci(Z_STR_P(name), "array_slice")
- && (!FC(current_namespace) || args->child[1]->child[0]->attr == ZEND_NAME_FQ)
+ if (zend_string_equals_literal_ci(name, "array_slice")
&& list->children == 3
&& list->child[1]->kind == ZEND_AST_ZVAL) {
zval *zv = zend_ast_get_zval(list->child[1]);
opline = zend_emit_op(NULL, ZEND_SEND_ARRAY, &arg_node, &len_node);
opline->extended_value = Z_LVAL_P(zv);
zend_emit_op(result, ZEND_DO_FCALL, NULL, NULL);
+ zend_string_release(name);
return SUCCESS;
}
}
+ zend_string_release(name);
}
zend_compile_expr(&arg_node, args->child[1]);
zend_emit_op(NULL, ZEND_SEND_ARRAY, &arg_node, NULL);
&& args->children == 2
&& args->child[0]->kind == ZEND_AST_CALL
&& args->child[0]->child[0]->kind == ZEND_AST_ZVAL
+ && Z_TYPE_P(zend_ast_get_zval(args->child[0]->child[0])) == IS_STRING
&& args->child[0]->child[1]->kind == ZEND_AST_ARG_LIST
&& args->child[1]->kind == ZEND_AST_ZVAL) {
- zval *name = zend_ast_get_zval(args->child[0]->child[0]);
+ zend_string *orig_name = zend_ast_get_str(args->child[0]->child[0]);
+ zend_bool is_fully_qualified;
+ zend_string *name = zend_resolve_function_name(orig_name, args->child[0]->child[0]->attr, &is_fully_qualified);
zend_ast_list *list = zend_ast_get_list(args->child[0]->child[1]);
zval *zv = zend_ast_get_zval(args->child[1]);
znode first;
- if (Z_TYPE_P(name) == IS_STRING
- && zend_string_equals_literal_ci(Z_STR_P(name), "func_get_args")
- && (!FC(current_namespace) || args->child[0]->child[0]->attr == ZEND_NAME_FQ)
+ if (zend_string_equals_literal_ci(name, "func_get_args")
&& list->children == 0
&& Z_TYPE_P(zv) == IS_LONG
&& Z_LVAL_P(zv) >= 0) {
first.op_type = IS_CONST;
ZVAL_LONG(&first.u.constant, Z_LVAL_P(zv));
zend_emit_op_tmp(result, ZEND_FUNC_GET_ARGS, &first, NULL);
+ zend_string_release(name);
return SUCCESS;
}
+ zend_string_release(name);
}
return FAILURE;
}