Lines Matching refs:zv

91 #define IS_TOP(zv) (Z_TYPE_P(zv) == TOP)  argument
92 #define IS_BOT(zv) (Z_TYPE_P(zv) == BOT) argument
93 #define IS_PARTIAL_ARRAY(zv) (Z_TYPE_P(zv) == PARTIAL_ARRAY) argument
94 #define IS_PARTIAL_OBJECT(zv) (Z_TYPE_P(zv) == PARTIAL_OBJECT) argument
96 #define MAKE_PARTIAL_ARRAY(zv) (Z_TYPE_INFO_P(zv) = PARTIAL_ARRAY | (IS_TYPE_REFCOUNTED << Z_TYPE_F… argument
97 #define MAKE_PARTIAL_OBJECT(zv) (Z_TYPE_INFO_P(zv) = PARTIAL_OBJECT | (IS_TYPE_REFCOUNTED << Z_TYPE… argument
99 #define MAKE_TOP(zv) (Z_TYPE_INFO_P(zv) = TOP) argument
100 #define MAKE_BOT(zv) (Z_TYPE_INFO_P(zv) = BOT) argument
102 static void scp_dump_value(zval *zv) { in scp_dump_value() argument
103 if (IS_TOP(zv)) { in scp_dump_value()
105 } else if (IS_BOT(zv)) { in scp_dump_value()
107 } else if (Z_TYPE_P(zv) == IS_ARRAY || IS_PARTIAL_ARRAY(zv)) { in scp_dump_value()
108 fprintf(stderr, " %s[", IS_PARTIAL_ARRAY(zv) ? "partial " : ""); in scp_dump_value()
109 zend_dump_ht(Z_ARRVAL_P(zv)); in scp_dump_value()
111 } else if (IS_PARTIAL_OBJECT(zv)) { in scp_dump_value()
113 zend_dump_ht(Z_ARRVAL_P(zv)); in scp_dump_value()
116 zend_dump_const(zv); in scp_dump_value()
120 static void empty_partial_array(zval *zv) in empty_partial_array() argument
122 MAKE_PARTIAL_ARRAY(zv); in empty_partial_array()
123 Z_ARR_P(zv) = zend_new_array(8); in empty_partial_array()
132 static void empty_partial_object(zval *zv) in empty_partial_object() argument
134 MAKE_PARTIAL_OBJECT(zv); in empty_partial_object()
135 Z_ARR_P(zv) = zend_new_array(8); in empty_partial_object()
144 static inline zend_bool value_known(zval *zv) { in value_known() argument
145 return !IS_TOP(zv) && !IS_BOT(zv); in value_known()
304 zval zv; in try_replace_op1() local
305 ZVAL_COPY(&zv, value); in try_replace_op1()
306 if (zend_optimizer_update_op1_const(ctx->scdf.op_array, opline, &zv)) { in try_replace_op1()
317 if (Z_TYPE(zv) == IS_STRING) { in try_replace_op1()
318 zend_string_hash_val(Z_STR(zv)); in try_replace_op1()
320 opline->op1.constant = zend_optimizer_add_literal(ctx->scdf.op_array, &zv); in try_replace_op1()
324 zval_ptr_dtor_nogc(&zv); in try_replace_op1()
325 ZVAL_FALSE(&zv); in try_replace_op1()
328 opline->op1.constant = zend_optimizer_add_literal(ctx->scdf.op_array, &zv); in try_replace_op1()
340 zval_ptr_dtor_nogc(&zv); in try_replace_op1()
349 zval zv; in try_replace_op2() local
350 ZVAL_COPY(&zv, value); in try_replace_op2()
351 if (zend_optimizer_update_op2_const(ctx->scdf.op_array, opline, &zv)) { in try_replace_op2()
356 if (Z_TYPE(zv) == IS_STRING) { in try_replace_op2()
359 if (zend_optimizer_update_op2_const(ctx->scdf.op_array, opline + 1, &zv)) { in try_replace_op2()
373 zval_ptr_dtor_nogc(&zv); in try_replace_op2()
467 zval zv; in ct_eval_isset_isempty() local
474 } else if (ct_eval_bool_cast(&zv, op1) == SUCCESS) { in ct_eval_isset_isempty()
475 ZVAL_BOOL(result, Z_TYPE(zv) == IS_FALSE); in ct_eval_isset_isempty()
1027 #define SET_RESULT(op, zv) do { \ argument
1029 set_value(scdf, ctx, ssa_op->op##_def, zv); \
1039 zval *op1, *op2, zv; /* zv is a temporary to hold result values */ in sccp_visit_instr() local
1063 ZVAL_FALSE(&zv); in sccp_visit_instr()
1064 SET_RESULT(result, &zv); in sccp_visit_instr()
1068 ZVAL_TRUE(&zv); in sccp_visit_instr()
1069 SET_RESULT(result, &zv); in sccp_visit_instr()
1100 empty_partial_array(&zv); in sccp_visit_instr()
1101 SET_RESULT(op1, &zv); in sccp_visit_instr()
1102 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1120 empty_partial_array(&zv); in sccp_visit_instr()
1122 dup_partial_array(&zv, op1); in sccp_visit_instr()
1127 SET_RESULT(op1, &zv); in sccp_visit_instr()
1128 } else if (ct_eval_del_array_elem(&zv, op2) == SUCCESS) { in sccp_visit_instr()
1129 SET_RESULT(op1, &zv); in sccp_visit_instr()
1134 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1142 dup_partial_array(&zv, op1); in sccp_visit_instr()
1144 ZVAL_COPY(&zv, op1); in sccp_visit_instr()
1147 if (!op2 && IS_PARTIAL_ARRAY(&zv)) { in sccp_visit_instr()
1150 SET_RESULT(op1, &zv); in sccp_visit_instr()
1151 } else if (ct_eval_assign_dim(&zv, data, op2) == SUCCESS) { in sccp_visit_instr()
1154 MAKE_PARTIAL_ARRAY(&zv); in sccp_visit_instr()
1157 SET_RESULT(op1, &zv); in sccp_visit_instr()
1163 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1191 empty_partial_object(&zv); in sccp_visit_instr()
1192 SET_RESULT(op1, &zv); in sccp_visit_instr()
1193 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1204 empty_partial_object(&zv); in sccp_visit_instr()
1206 dup_partial_object(&zv, op1); in sccp_visit_instr()
1209 if (ct_eval_del_obj_prop(&zv, op2) == SUCCESS) { in sccp_visit_instr()
1210 SET_RESULT(op1, &zv); in sccp_visit_instr()
1214 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1222 dup_partial_object(&zv, op1); in sccp_visit_instr()
1224 ZVAL_COPY(&zv, op1); in sccp_visit_instr()
1227 if (ct_eval_assign_obj(&zv, data, op2) == SUCCESS) { in sccp_visit_instr()
1229 SET_RESULT(op1, &zv); in sccp_visit_instr()
1235 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1299 empty_partial_array(&zv); in sccp_visit_instr()
1300 SET_RESULT(result, &zv); in sccp_visit_instr()
1301 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1315 empty_partial_array(&zv); in sccp_visit_instr()
1318 ZVAL_COPY_VALUE(&zv, result); in sccp_visit_instr()
1323 SET_RESULT(result, &zv); in sccp_visit_instr()
1324 } else if (ct_eval_del_array_elem(&zv, op2) == SUCCESS) { in sccp_visit_instr()
1325 SET_RESULT(result, &zv); in sccp_visit_instr()
1329 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1338 ZVAL_COPY_VALUE(&zv, result); in sccp_visit_instr()
1341 array_init(&zv); in sccp_visit_instr()
1345 if (!op2 && IS_PARTIAL_ARRAY(&zv)) { in sccp_visit_instr()
1347 SET_RESULT(result, &zv); in sccp_visit_instr()
1348 } else if (ct_eval_add_array_elem(&zv, op1, op2) == SUCCESS) { in sccp_visit_instr()
1350 MAKE_PARTIAL_ARRAY(&zv); in sccp_visit_instr()
1352 SET_RESULT(result, &zv); in sccp_visit_instr()
1357 SET_RESULT(result, &zv); in sccp_visit_instr()
1360 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1367 empty_partial_object(&zv); in sccp_visit_instr()
1368 SET_RESULT(result, &zv); in sccp_visit_instr()
1369 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1410 if (ct_eval_binary_op(&zv, opline->opcode, op1, op2) == SUCCESS) { in sccp_visit_instr()
1411 SET_RESULT(result, &zv); in sccp_visit_instr()
1412 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1436 …if (ct_eval_binary_op(&zv, zend_compound_assign_to_binary_op(opline->opcode), op1, op2) == SUCCESS… in sccp_visit_instr()
1437 SET_RESULT(op1, &zv); in sccp_visit_instr()
1438 SET_RESULT(result, &zv); in sccp_visit_instr()
1439 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1454 dup_partial_array(&zv, op1); in sccp_visit_instr()
1455 ct_eval_del_array_elem(&zv, op2); in sccp_visit_instr()
1457 SET_RESULT(op1, &zv); in sccp_visit_instr()
1459 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1471 dup_partial_array(&zv, op1); in sccp_visit_instr()
1473 ZVAL_COPY(&zv, op1); in sccp_visit_instr()
1476 if (ct_eval_assign_dim(&zv, &tmp, op2) == SUCCESS) { in sccp_visit_instr()
1478 SET_RESULT(op1, &zv); in sccp_visit_instr()
1480 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1485 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1499 dup_partial_object(&zv, op1); in sccp_visit_instr()
1500 ct_eval_del_obj_prop(&zv, op2); in sccp_visit_instr()
1502 SET_RESULT(op1, &zv); in sccp_visit_instr()
1504 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1515 dup_partial_object(&zv, op1); in sccp_visit_instr()
1517 if (ct_eval_assign_obj(&zv, &tmp, op2) == SUCCESS) { in sccp_visit_instr()
1519 SET_RESULT(op1, &zv); in sccp_visit_instr()
1521 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1526 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1548 dup_partial_object(&zv, op1); in sccp_visit_instr()
1549 ct_eval_assign_obj(&zv, &tmp2, op2); in sccp_visit_instr()
1556 SET_RESULT(op1, &zv); in sccp_visit_instr()
1557 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1568 if (ct_eval_incdec(&zv, opline->opcode, op1) == SUCCESS) { in sccp_visit_instr()
1569 SET_RESULT(op1, &zv); in sccp_visit_instr()
1570 SET_RESULT(result, &zv); in sccp_visit_instr()
1571 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1581 if (ct_eval_incdec(&zv, opline->opcode, op1) == SUCCESS) { in sccp_visit_instr()
1582 SET_RESULT(op1, &zv); in sccp_visit_instr()
1583 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1595 if (zend_optimizer_eval_unary_op(&zv, opline->opcode, op1) == SUCCESS) { in sccp_visit_instr()
1596 SET_RESULT(result, &zv); in sccp_visit_instr()
1597 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1608 if (zend_optimizer_eval_cast(&zv, opline->extended_value, op1) == SUCCESS) { in sccp_visit_instr()
1609 SET_RESULT(result, &zv); in sccp_visit_instr()
1610 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1619 if (ct_eval_bool_cast(&zv, op1) == SUCCESS) { in sccp_visit_instr()
1620 SET_RESULT(result, &zv); in sccp_visit_instr()
1621 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1628 if (zend_optimizer_eval_strlen(&zv, op1) == SUCCESS) { in sccp_visit_instr()
1629 SET_RESULT(result, &zv); in sccp_visit_instr()
1630 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1638 ZVAL_LONG(&zv, zend_hash_num_elements(Z_ARRVAL_P(op1))); in sccp_visit_instr()
1639 SET_RESULT(result, &zv); in sccp_visit_instr()
1640 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1648 if (ct_eval_in_array(&zv, opline->extended_value, op1, op2) == SUCCESS) { in sccp_visit_instr()
1649 SET_RESULT(result, &zv); in sccp_visit_instr()
1650 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1661 if (ct_eval_fetch_dim(&zv, op1, op2, (opline->opcode != ZEND_FETCH_LIST_R)) == SUCCESS) { in sccp_visit_instr()
1662 SET_RESULT(result, &zv); in sccp_visit_instr()
1663 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1672 if (ct_eval_isset_dim(&zv, opline->extended_value, op1, op2) == SUCCESS) { in sccp_visit_instr()
1673 SET_RESULT(result, &zv); in sccp_visit_instr()
1674 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1685 if (ct_eval_fetch_obj(&zv, op1, op2) == SUCCESS) { in sccp_visit_instr()
1686 SET_RESULT(result, &zv); in sccp_visit_instr()
1687 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1698 if (ct_eval_isset_obj(&zv, opline->extended_value, op1, op2) == SUCCESS) { in sccp_visit_instr()
1699 SET_RESULT(result, &zv); in sccp_visit_instr()
1700 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1722 if (ct_eval_isset_isempty(&zv, opline->extended_value, op1) == SUCCESS) { in sccp_visit_instr()
1723 SET_RESULT(result, &zv); in sccp_visit_instr()
1724 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1731 ct_eval_type_check(&zv, opline->extended_value, op1); in sccp_visit_instr()
1732 SET_RESULT(result, &zv); in sccp_visit_instr()
1733 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1737 ZVAL_FALSE(&zv); in sccp_visit_instr()
1738 SET_RESULT(result, &zv); in sccp_visit_instr()
1746 if (zend_optimizer_eval_cast(&zv, IS_STRING, op2) == SUCCESS) { in sccp_visit_instr()
1747 SET_RESULT(result, &zv); in sccp_visit_instr()
1748 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1760 if (ct_eval_binary_op(&zv, ZEND_CONCAT, op1, op2) == SUCCESS) { in sccp_visit_instr()
1761 SET_RESULT(result, &zv); in sccp_visit_instr()
1762 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1816 if (ct_eval_func_call(&zv, Z_STR_P(name), call->num_args, args) == SUCCESS) { in sccp_visit_instr()
1817 SET_RESULT(result, &zv); in sccp_visit_instr()
1818 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1852 zval *op1, zv; in sccp_mark_feasible_successors() local
1888 if (ct_eval_bool_cast(&zv, op1) == FAILURE) { in sccp_mark_feasible_successors()
1893 s = Z_TYPE(zv) == IS_TRUE; in sccp_mark_feasible_successors()
1900 if (ct_eval_bool_cast(&zv, op1) == FAILURE) { in sccp_mark_feasible_successors()
1905 s = Z_TYPE(zv) == IS_FALSE; in sccp_mark_feasible_successors()
2461 zval *zv = &sccp.values[i]; in sccp_optimize_op_array() local
2463 if (IS_TOP(zv) || IS_BOT(zv)) { in sccp_optimize_op_array()
2475 scp_dump_value(zv); in sccp_optimize_op_array()