]> granicus.if.org Git - php/commitdiff
Use DO_UCALL for method calls
authorNikita Popov <nikic@php.net>
Tue, 28 Jun 2016 09:57:04 +0000 (11:57 +0200)
committerNikita Popov <nikic@php.net>
Tue, 28 Jun 2016 10:05:03 +0000 (12:05 +0200)
Zend/zend_compile.c

index f5f1999c646cee02a7593c8e3503b6c905149b16..144c2fb8740f74b6cbaea5b229fe24b88636611d 100644 (file)
@@ -3195,9 +3195,9 @@ uint32_t zend_compile_args(zend_ast *ast, zend_function *fbc) /* {{{ */
 
 ZEND_API zend_uchar zend_get_call_op(const zend_op *init_op, zend_function *fbc) /* {{{ */
 {
-       if (fbc && init_op->opcode == ZEND_INIT_FCALL) {
+       if (fbc) {
                if (fbc->type == ZEND_INTERNAL_FUNCTION) {
-                       if (!zend_execute_internal) {
+                       if (init_op->opcode == ZEND_INIT_FCALL && !zend_execute_internal) {
                                if (!(fbc->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED|ZEND_ACC_HAS_TYPE_HINTS|ZEND_ACC_RETURN_REFERENCE))) {
                                        return ZEND_DO_ICALL;
                                } else {
@@ -3205,7 +3205,7 @@ ZEND_API zend_uchar zend_get_call_op(const zend_op *init_op, zend_function *fbc)
                                }
                        }
                } else {
-                       if (zend_execute_ex == execute_ex) {
+                       if (zend_execute_ex == execute_ex && !(fbc->common.fn_flags & ZEND_ACC_ABSTRACT)) {
                                return ZEND_DO_UCALL;
                        }
                }