Skip to content

Commit 4ee6a9a

Browse files
committed
Merge branch 'master' of https://git.php.net/repository/php-src
2 parents 8c63d69 + b0174a1 commit 4ee6a9a

File tree

4 files changed

+438
-192
lines changed

4 files changed

+438
-192
lines changed

NEWS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ PHP NEWS
44

55
- Core:
66
. Fixed bug #70431 (Memory leak in php_ini.c). (Senthil, Laruence)
7+
. Fixed bug #70478 (**= does no longer work). (Bob)
78

89
- CLI server:
910
. Fixed bug #68291 (404 on urls with '+'). (cmb)

Zend/tests/bug70478.phpt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
--TEST--
2+
Bug #70478 (**= does no longer work)
3+
--FILE--
4+
<?php
5+
6+
class foo {
7+
public $a = 3;
8+
private $b = 4;
9+
10+
function __construct() {
11+
$this->a **= $this->b;
12+
}
13+
}
14+
15+
$a = new foo;
16+
var_dump($a->a);
17+
18+
?>
19+
--EXPECT--
20+
int(81)

Zend/zend_vm_def.h

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,21 @@ ZEND_VM_HANDLER(7, ZEND_SR, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
240240
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
241241
}
242242

243+
ZEND_VM_HANDLER(166, ZEND_POW, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
244+
{
245+
USE_OPLINE
246+
zend_free_op free_op1, free_op2;
247+
zval *op1, *op2;
248+
249+
SAVE_OPLINE();
250+
op1 = GET_OP1_ZVAL_PTR(BP_VAR_R);
251+
op2 = GET_OP2_ZVAL_PTR(BP_VAR_R);
252+
pow_function(EX_VAR(opline->result.var), op1, op2);
253+
FREE_OP1();
254+
FREE_OP2();
255+
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
256+
}
257+
243258
ZEND_VM_HANDLER(8, ZEND_CONCAT, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
244259
{
245260
USE_OPLINE
@@ -1083,6 +1098,26 @@ ZEND_VM_HANDLER(33, ZEND_ASSIGN_BW_XOR, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
10831098
#endif
10841099
}
10851100

1101+
ZEND_VM_HANDLER(167, ZEND_ASSIGN_POW, VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|CV)
1102+
{
1103+
#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
1104+
USE_OPLINE
1105+
1106+
# if !defined(ZEND_VM_SPEC) || (OP1_TYPE != IS_UNUSED)
1107+
if (EXPECTED(opline->extended_value == 0)) {
1108+
ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_helper, binary_op, pow_function);
1109+
}
1110+
# endif
1111+
if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
1112+
ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_dim_helper, binary_op, pow_function);
1113+
} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
1114+
ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_obj_helper, binary_op, pow_function);
1115+
}
1116+
#else
1117+
ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_dim_helper, binary_op, pow_function);
1118+
#endif
1119+
}
1120+
10861121
ZEND_VM_HELPER_EX(zend_pre_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV, int inc)
10871122
{
10881123
USE_OPLINE
@@ -7540,26 +7575,6 @@ ZEND_VM_HANDLER(163, ZEND_FAST_RET, ANY, ANY)
75407575
}
75417576
}
75427577

7543-
ZEND_VM_HANDLER(166, ZEND_POW, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
7544-
{
7545-
USE_OPLINE
7546-
zend_free_op free_op1, free_op2;
7547-
zval *op1, *op2;
7548-
7549-
SAVE_OPLINE();
7550-
op1 = GET_OP1_ZVAL_PTR(BP_VAR_R);
7551-
op2 = GET_OP2_ZVAL_PTR(BP_VAR_R);
7552-
pow_function(EX_VAR(opline->result.var), op1, op2);
7553-
FREE_OP1();
7554-
FREE_OP2();
7555-
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7556-
}
7557-
7558-
ZEND_VM_HANDLER(167, ZEND_ASSIGN_POW, VAR|CV, CONST|TMPVAR|CV)
7559-
{
7560-
ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_helper, binary_op,pow_function);
7561-
}
7562-
75637578
ZEND_VM_HANDLER(168, ZEND_BIND_GLOBAL, CV, CONST)
75647579
{
75657580
USE_OPLINE

0 commit comments

Comments
 (0)