From: Dmitry Stogov Date: Thu, 23 Apr 2015 00:41:50 +0000 (+0300) Subject: Make internal non-static methods to be executed in context of class. Set EG(scope... X-Git-Tag: PRE_PHP7_NSAPI_REMOVAL~178 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6d4da2db8a5e77391182db271e1ed8e4e56eca88;p=php Make internal non-static methods to be executed in context of class. Set EG(scope) accordingly. --- diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 16d3a23a16..9a50c9b7d5 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -3626,13 +3626,7 @@ ZEND_VM_HANDLER(60, ZEND_DO_FCALL, ANY, ANY) if (fbc->common.scope) { should_change_scope = 1; - /* TODO: we don't set scope if we call an object method ??? */ - /* See: ext/pdo_sqlite/tests/pdo_fetch_func_001.phpt */ -#if 1 - EG(scope) = object ? NULL : fbc->common.scope; -#else EG(scope) = fbc->common.scope; -#endif } else { call->called_scope = EX(called_scope); Z_OBJ(call->This) = Z_OBJ(EX(This)); @@ -7788,8 +7782,6 @@ ZEND_VM_HANDLER(158, ZEND_CALL_TRAMPOLINE, ANY, ANY) ZEND_ASSERT(!(fbc->common.fn_flags & ZEND_ACC_GENERATOR)); - /* This must be already set on invokation of trampoline function */ - /*EG(scope) = fbc->common.scope;*/ call->symbol_table = NULL; i_init_func_execute_data(call, &fbc->op_array, ret, (fbc->common.fn_flags & ZEND_ACC_STATIC) == 0); @@ -7805,7 +7797,6 @@ ZEND_VM_HANDLER(158, ZEND_CALL_TRAMPOLINE, ANY, ANY) ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION); - EG(scope) = object ? NULL : fbc->common.scope; EG(current_execute_data) = call; if (fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) { diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 0472feb379..9f224ee0dd 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -783,13 +783,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_HANDLER(ZEND_OPC if (fbc->common.scope) { should_change_scope = 1; - /* TODO: we don't set scope if we call an object method ??? */ - /* See: ext/pdo_sqlite/tests/pdo_fetch_func_001.phpt */ -#if 1 - EG(scope) = object ? NULL : fbc->common.scope; -#else EG(scope) = fbc->common.scope; -#endif } else { call->called_scope = EX(called_scope); Z_OBJ(call->This) = Z_OBJ(EX(This)); @@ -1814,8 +1808,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(Z ZEND_ASSERT(!(fbc->common.fn_flags & ZEND_ACC_GENERATOR)); - /* This must be already set on invokation of trampoline function */ - /*EG(scope) = fbc->common.scope;*/ call->symbol_table = NULL; i_init_func_execute_data(call, &fbc->op_array, ret, (fbc->common.fn_flags & ZEND_ACC_STATIC) == 0); @@ -1831,7 +1823,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(Z ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION); - EG(scope) = object ? NULL : fbc->common.scope; EG(current_execute_data) = call; if (fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) { diff --git a/ext/pdo_sqlite/tests/pdo_fetch_func_001.phpt b/ext/pdo_sqlite/tests/pdo_fetch_func_001.phpt index f7f3ce06bc..c8cdee6f69 100644 --- a/ext/pdo_sqlite/tests/pdo_fetch_func_001.phpt +++ b/ext/pdo_sqlite/tests/pdo_fetch_func_001.phpt @@ -102,7 +102,7 @@ bool(false) Warning: PDOStatement::fetchAll(): SQLSTATE[HY000]: General error: no array or string given in %s on line %d bool(false) -Warning: PDOStatement::fetchAll(): SQLSTATE[HY000]: General error: cannot access self:: when no class scope is active in %s on line %d +Warning: PDOStatement::fetchAll(): SQLSTATE[HY000]: General error: class 'PDOStatement' does not have a method 'foo' in %s on line %d bool(false) array(2) { [0]=>