@@ -1230,11 +1230,24 @@ binary_assign_op_addr: {
1230
1230
}
1231
1231
break ;
1232
1232
case ZEND_INIT_FCALL_BY_NAME : {
1233
- zval * function_name = get_zval_ptr ( & opline -> op2 , Ts , & free_op2 , BP_VAR_R ) ;
1233
+ zval * function_name ;
1234
1234
zend_function * function ;
1235
1235
HashTable * active_function_table ;
1236
1236
zval tmp ;
1237
1237
1238
+ if ((opline > EG (active_op_array )-> opcodes )
1239
+ && (opline - 1 )-> opcode == ZEND_JMP_NO_CTOR ) {
1240
+ /* constructor call */
1241
+ if (opline -> op1 .op_type == IS_VAR ) {
1242
+ EG (AiCount )++ ;
1243
+ }
1244
+ if (opline -> op2 .op_type == IS_VAR ) {
1245
+ EG (AiCount )++ ;
1246
+ }
1247
+ }
1248
+
1249
+ function_name = get_zval_ptr (& opline -> op2 , Ts , & free_op2 , BP_VAR_R );
1250
+
1238
1251
tmp = * function_name ;
1239
1252
zval_copy_ctor (& tmp );
1240
1253
convert_to_string (& tmp );
@@ -1255,12 +1268,6 @@ binary_assign_op_addr: {
1255
1268
} else { /* used for member function calls */
1256
1269
object_ptr = get_zval_ptr_ptr (& opline -> op1 , Ts , BP_VAR_R );
1257
1270
1258
- if (opline -> op1 .op_type == IS_VAR
1259
- && opline > EG (active_op_array )-> opcodes
1260
- && (opline - 1 )-> opcode == ZEND_JMP_NO_CTOR ) {
1261
- /* constructor call */
1262
- EG (AiCount )++ ;
1263
- }
1264
1271
1265
1272
if (!object_ptr || (* object_ptr )-> value .obj .ce -> handle_function_call ) { /* overloaded function call */
1266
1273
zend_overloaded_element overloaded_element ;
@@ -1804,9 +1811,10 @@ binary_assign_op_addr: {
1804
1811
}
1805
1812
break ;
1806
1813
case ZEND_JMP_NO_CTOR : {
1807
- zval * object = get_zval_ptr ( & opline -> op1 , Ts , & free_op1 , BP_VAR_R ) ;
1814
+ zval * object ;
1808
1815
1809
1816
EG (AiCount )++ ;
1817
+ object = get_zval_ptr (& opline -> op1 , Ts , & free_op1 , BP_VAR_R );
1810
1818
if (!object -> value .obj .ce -> handle_function_call
1811
1819
&& !zend_hash_exists (& object -> value .obj .ce -> function_table , object -> value .obj .ce -> name , object -> value .obj .ce -> name_length + 1 )) {
1812
1820
opline = op_array -> opcodes + opline -> op2 .u .opline_num ;
0 commit comments