Lines Matching refs:opline

37 static void replace_by_const_or_qm_assign(zend_op_array *op_array, zend_op *opline, zval *result) {  in replace_by_const_or_qm_assign()  argument
38 if (opline->op1_type == IS_CONST) { in replace_by_const_or_qm_assign()
39 literal_dtor(&ZEND_OP1_LITERAL(opline)); in replace_by_const_or_qm_assign()
41 if (opline->op2_type == IS_CONST) { in replace_by_const_or_qm_assign()
42 literal_dtor(&ZEND_OP2_LITERAL(opline)); in replace_by_const_or_qm_assign()
44 …if (zend_optimizer_replace_by_const(op_array, opline + 1, opline->result_type, opline->result.var,… in replace_by_const_or_qm_assign()
45 MAKE_NOP(opline); in replace_by_const_or_qm_assign()
47 opline->opcode = ZEND_QM_ASSIGN; in replace_by_const_or_qm_assign()
48 opline->extended_value = 0; in replace_by_const_or_qm_assign()
49 SET_UNUSED(opline->op2); in replace_by_const_or_qm_assign()
50 zend_optimizer_update_op1_const(op_array, opline, result); in replace_by_const_or_qm_assign()
56 zend_op *opline = op_array->opcodes; in zend_optimizer_pass1() local
57 zend_op *end = opline + op_array->last; in zend_optimizer_pass1()
62 while (opline < end) { in zend_optimizer_pass1()
63 switch (opline->opcode) { in zend_optimizer_pass1()
66 if (opline->op1_type == IS_CONST && Z_TYPE(ZEND_OP1_LITERAL(opline)) != IS_STRING) { in zend_optimizer_pass1()
67 convert_to_string(&ZEND_OP1_LITERAL(opline)); in zend_optimizer_pass1()
69 if (opline->op2_type == IS_CONST && Z_TYPE(ZEND_OP2_LITERAL(opline)) != IS_STRING) { in zend_optimizer_pass1()
70 convert_to_string(&ZEND_OP2_LITERAL(opline)); in zend_optimizer_pass1()
94 if (opline->op1_type == IS_CONST && opline->op2_type == IS_CONST && in zend_optimizer_pass1()
95 …zend_optimizer_eval_binary_op(&result, opline->opcode, &ZEND_OP1_LITERAL(opline), &ZEND_OP2_LITERA… in zend_optimizer_pass1()
96 replace_by_const_or_qm_assign(op_array, opline, &result); in zend_optimizer_pass1()
101 if (opline->extended_value == ZEND_CONCAT && opline->op2_type == IS_CONST in zend_optimizer_pass1()
102 && Z_TYPE(ZEND_OP2_LITERAL(opline)) != IS_STRING) { in zend_optimizer_pass1()
103 convert_to_string(&ZEND_OP2_LITERAL(opline)); in zend_optimizer_pass1()
108 if (opline->op1_type == IS_CONST && in zend_optimizer_pass1()
109 … zend_optimizer_eval_cast(&result, opline->extended_value, &ZEND_OP1_LITERAL(opline)) == SUCCESS) { in zend_optimizer_pass1()
110 replace_by_const_or_qm_assign(op_array, opline, &result); in zend_optimizer_pass1()
116 if (opline->op1_type == IS_CONST && in zend_optimizer_pass1()
117 zend_optimizer_eval_unary_op(&result, opline->opcode, &ZEND_OP1_LITERAL(opline)) == SUCCESS) { in zend_optimizer_pass1()
118 replace_by_const_or_qm_assign(op_array, opline, &result); in zend_optimizer_pass1()
123 if (opline->op2_type == IS_CONST && in zend_optimizer_pass1()
124 Z_TYPE(ZEND_OP2_LITERAL(opline)) == IS_STRING && in zend_optimizer_pass1()
125 zend_string_equals_literal(Z_STR(ZEND_OP2_LITERAL(opline)), "__COMPILER_HALT_OFFSET__")) { in zend_optimizer_pass1()
136 literal_dtor(&ZEND_OP2_LITERAL(opline)); in zend_optimizer_pass1()
137 replace_by_const_or_qm_assign(op_array, opline, offset); in zend_optimizer_pass1()
143 if (opline->op2_type == IS_CONST && in zend_optimizer_pass1()
144 Z_TYPE(ZEND_OP2_LITERAL(opline)) == IS_STRING) { in zend_optimizer_pass1()
146 if (!zend_optimizer_get_persistent_constant(Z_STR(ZEND_OP2_LITERAL(opline)), &result, 1)) { in zend_optimizer_pass1()
147 …ts || !zend_optimizer_get_collected_constant(ctx->constants, &ZEND_OP2_LITERAL(opline), &result)) { in zend_optimizer_pass1()
154 replace_by_const_or_qm_assign(op_array, opline, &result); in zend_optimizer_pass1()
160 …const zend_class_constant *cc = zend_fetch_class_const_info(ctx->script, op_array, opline, &is_pro… in zend_optimizer_pass1()
175 replace_by_const_or_qm_assign(op_array, opline, &result); in zend_optimizer_pass1()
180 zend_op *send1_opline = opline - 1; in zend_optimizer_pass1()
227 if (RESULT_UNUSED(opline) && in zend_optimizer_pass1()
230 opline->opcode = ZEND_DECLARE_CONST; in zend_optimizer_pass1()
231 opline->op1_type = IS_CONST; in zend_optimizer_pass1()
232 opline->op2_type = IS_CONST; in zend_optimizer_pass1()
233 opline->result_type = IS_UNUSED; in zend_optimizer_pass1()
234 opline->op1.constant = send1_opline->op1.constant; in zend_optimizer_pass1()
235 opline->op2.constant = send2_opline->op1.constant; in zend_optimizer_pass1()
236 opline->result.num = 0; in zend_optimizer_pass1()
253 replace_by_const_or_qm_assign(op_array, opline, &result); in zend_optimizer_pass1()
262 if (opline->op1_type == IS_CONST && in zend_optimizer_pass1()
263 zend_optimizer_eval_strlen(&result, &ZEND_OP1_LITERAL(opline)) == SUCCESS) { in zend_optimizer_pass1()
264 replace_by_const_or_qm_assign(op_array, opline, &result); in zend_optimizer_pass1()
268 if (!zend_optimizer_get_persistent_constant(Z_STR(ZEND_OP1_LITERAL(opline)), &result, 0)) { in zend_optimizer_pass1()
272 literal_dtor(&ZEND_OP1_LITERAL(opline)); in zend_optimizer_pass1()
273 replace_by_const_or_qm_assign(op_array, opline, &result); in zend_optimizer_pass1()
277 Z_TYPE(ZEND_OP1_LITERAL(opline)) == IS_STRING && in zend_optimizer_pass1()
278 Z_TYPE(ZEND_OP2_LITERAL(opline)) != IS_CONSTANT_AST) { in zend_optimizer_pass1()
279 zend_optimizer_collect_constant(ctx, &ZEND_OP1_LITERAL(opline), &ZEND_OP2_LITERAL(opline)); in zend_optimizer_pass1()
287 if (opline->op1_type == IS_CONST) { in zend_optimizer_pass1()
288 if (zend_is_true(&ZEND_OP1_LITERAL(opline))) { in zend_optimizer_pass1()
289 if (opline->opcode == ZEND_JMPZ_EX) { in zend_optimizer_pass1()
290 opline->opcode = ZEND_QM_ASSIGN; in zend_optimizer_pass1()
291 zval_ptr_dtor_nogc(&ZEND_OP1_LITERAL(opline)); in zend_optimizer_pass1()
292 ZVAL_TRUE(&ZEND_OP1_LITERAL(opline)); in zend_optimizer_pass1()
293 opline->op2.num = 0; in zend_optimizer_pass1()
297 if (opline->opcode == ZEND_JMPNZ_EX) { in zend_optimizer_pass1()
298 opline->opcode = ZEND_QM_ASSIGN; in zend_optimizer_pass1()
299 zval_ptr_dtor_nogc(&ZEND_OP1_LITERAL(opline)); in zend_optimizer_pass1()
300 ZVAL_FALSE(&ZEND_OP1_LITERAL(opline)); in zend_optimizer_pass1()
301 opline->op2.num = 0; in zend_optimizer_pass1()
311 if (opline->op1_type == IS_CONST) { in zend_optimizer_pass1()
312 int should_jmp = zend_is_true(&ZEND_OP1_LITERAL(opline)); in zend_optimizer_pass1()
314 if (opline->opcode == ZEND_JMPZ) { in zend_optimizer_pass1()
317 literal_dtor(&ZEND_OP1_LITERAL(opline)); in zend_optimizer_pass1()
318 opline->op1_type = IS_UNUSED; in zend_optimizer_pass1()
320 opline->opcode = ZEND_JMP; in zend_optimizer_pass1()
321 COPY_NODE(opline->op1, opline->op2); in zend_optimizer_pass1()
322 opline->op2.num = 0; in zend_optimizer_pass1()
324 MAKE_NOP(opline); in zend_optimizer_pass1()
355 opline++; in zend_optimizer_pass1()