diff options
Diffstat (limited to 'Zend/zend_vm_execute.skl')
| -rw-r--r-- | Zend/zend_vm_execute.skl | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/Zend/zend_vm_execute.skl b/Zend/zend_vm_execute.skl index 911b01f7f3..9d86777219 100644 --- a/Zend/zend_vm_execute.skl +++ b/Zend/zend_vm_execute.skl @@ -37,10 +37,15 @@ ZEND_API void {%EXECUTOR_NAME%}(zend_op_array *op_array TSRMLS_DC) ZEND_VM_SET_OPCODE(op_array->opcodes); } - if (op_array->uses_this && EG(This) && EG(active_symbol_table)) { - Z_ADDREF_P(EG(This)); /* For $this pointer */ - if (zend_ascii_hash_add(EG(active_symbol_table), "this", sizeof("this"), &EG(This), sizeof(zval *), NULL)==FAILURE) { - Z_DELREF_P(EG(This)); + if (op_array->this_var != -1 && EG(This)) { + Z_ADDREF_P(EG(This)); /* For $this pointer */ + if (!EG(active_symbol_table)) { + EX(CVs)[op_array->this_var] = (zval**)EX(CVs) + (op_array->last_var + op_array->this_var); + *EX(CVs)[op_array->this_var] = EG(This); + } else { + if (zend_ascii_hash_add(EG(active_symbol_table), "this", sizeof("this"), &EG(This), sizeof(zval *), (void**)&EX(CVs)[op_array->this_var])==FAILURE) { + Z_DELREF_P(EG(This)); + } } } |
