]> granicus.if.org Git - php/commitdiff
Dynamic function call from object's property was fixed
authorDmitry Stogov <dmitry@php.net>
Wed, 17 Dec 2003 14:45:59 +0000 (14:45 +0000)
committerDmitry Stogov <dmitry@php.net>
Wed, 17 Dec 2003 14:45:59 +0000 (14:45 +0000)
(See "tests/lang/bug24926.phpt" and "tests/lang/bug25652.phpt")

Zend/zend_compile.c

index 7e7077a8724971d5a4ea8e884ed4c36e4e6b7e4c..a6f8ecd909c37196a4d2aaf41f4b69cf2d0f8405 100644 (file)
@@ -1194,9 +1194,16 @@ void zend_do_begin_method_call(znode *left_bracket TSRMLS_DC)
                return;
        }
 
-       last_op->opcode = ZEND_INIT_METHOD_CALL;
-
-       left_bracket->u.constant.value.lval = ZEND_INIT_FCALL_BY_NAME;
+       if (last_op->opcode == ZEND_FETCH_OBJ_R) {
+               last_op->opcode = ZEND_INIT_METHOD_CALL;
+               left_bracket->u.constant.value.lval = ZEND_INIT_FCALL_BY_NAME;
+       } else {
+               zend_op* opline = get_next_op(CG(active_op_array) TSRMLS_CC);
+               opline->opcode = ZEND_INIT_FCALL_BY_NAME;
+               opline->op2 = *left_bracket;
+               opline->extended_value = 0;
+               SET_UNUSED(opline->op1);
+       }
 
        zend_stack_push(&CG(function_call_stack), (void *) &ptr, sizeof(zend_function *));
        zend_do_extended_fcall_begin(TSRMLS_C);