zend_op *opline;
} zend_send_arg_info;
-typedef struct _zend_recv_arg_info {
- int ssa_var;
- zend_ssa_var_info info;
-} zend_recv_arg_info;
-
struct _zend_call_info {
zend_op_array *caller_op_array;
zend_op *caller_init_opline;
zend_call_info **call_map; /* Call info associated with init/call/send opnum */
int num_args; /* (-1 - unknown) */
int return_value_used; /* -1 unknown, 0 no, 1 yes */
- zend_recv_arg_info *arg_info;
zend_ssa_var_info return_info;
};
}
fprintf(stderr, " ; %s:%u-%u\n", op_array->filename->val, op_array->line_start, op_array->line_end);
- if (func_info && func_info->num_args > 0) {
- uint32_t j;
-
- for (j = 0; j < MIN(op_array->num_args, func_info->num_args ); j++) {
- fprintf(stderr, " ; arg %d ", j);
- zend_dump_type_info(func_info->arg_info[j].info.type, func_info->arg_info[j].info.ce, func_info->arg_info[j].info.is_instanceof, dump_flags);
- zend_dump_range(&func_info->arg_info[j].info.range);
- fprintf(stderr, "\n");
- }
- }
-
if (func_info) {
fprintf(stderr, " ; return ");
zend_dump_type_info(func_info->return_info.type, func_info->return_info.ce, func_info->return_info.is_instanceof, dump_flags);
case ZEND_RECV:
case ZEND_RECV_INIT:
if (ssa_op->result_def == var) {
- zend_func_info *func_info = ZEND_FUNC_INFO(op_array);
-
- if (func_info &&
- (int)opline->op1.num-1 < func_info->num_args &&
- func_info->arg_info[opline->op1.num-1].info.has_range) {
- *tmp = func_info->arg_info[opline->op1.num-1].info.range;
- return 1;
- } else if (op_array->arg_info &&
+ if (op_array->arg_info &&
opline->op1.num <= op_array->num_args) {
zend_type type = op_array->arg_info[opline->op1.num-1].type;
uint32_t mask = ZEND_TYPE_PURE_MASK_WITHOUT_NULL(type);
case ZEND_RECV_INIT:
{
/* Typehinting */
- zend_func_info *func_info;
zend_arg_info *arg_info = &op_array->arg_info[opline->op1.num-1];
ce = NULL;
tmp |= MAY_BE_REF;
}
- func_info = ZEND_FUNC_INFO(op_array);
- if (func_info && (int)opline->op1.num-1 < func_info->num_args) {
- tmp = (tmp & (MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF)) |
- (tmp & func_info->arg_info[opline->op1.num-1].info.type);
- }
-
UPDATE_SSA_TYPE(tmp, ssa_op->result_def);
- if (func_info &&
- (int)opline->op1.num-1 < func_info->num_args &&
- func_info->arg_info[opline->op1.num-1].info.ce) {
- UPDATE_SSA_OBJ_TYPE(
- func_info->arg_info[opline->op1.num-1].info.ce,
- func_info->arg_info[opline->op1.num-1].info.is_instanceof,
- ssa_op->result_def);
- } else if (ce) {
+ if (ce) {
UPDATE_SSA_OBJ_TYPE(ce, 1, ssa_op->result_def);
} else {
UPDATE_SSA_OBJ_TYPE(NULL, 0, ssa_op->result_def);