summaryrefslogtreecommitdiff
path: root/Zend/zend_vm_execute.skl
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2008-04-29 08:15:49 +0000
committerDmitry Stogov <dmitry@php.net>2008-04-29 08:15:49 +0000
commit1d0f893b491d925771f459351aed560f050edfb3 (patch)
treee88c78f4767c5a83f0e41fadb6d79c77c03ec382 /Zend/zend_vm_execute.skl
parentdf56e70e73d829d5f911e14e4aba7178e382448a (diff)
downloadphp-git-1d0f893b491d925771f459351aed560f050edfb3.tar.gz
Lazy EG(active_symbol_table) initialization
Diffstat (limited to 'Zend/zend_vm_execute.skl')
-rw-r--r--Zend/zend_vm_execute.skl6
1 files changed, 3 insertions, 3 deletions
diff --git a/Zend/zend_vm_execute.skl b/Zend/zend_vm_execute.skl
index dce15d9f4f..911b01f7f3 100644
--- a/Zend/zend_vm_execute.skl
+++ b/Zend/zend_vm_execute.skl
@@ -14,12 +14,12 @@ ZEND_API void {%EXECUTOR_NAME%}(zend_op_array *op_array TSRMLS_DC)
/* Initialize execute_data */
execute_data = (zend_execute_data *)zend_vm_stack_alloc(
sizeof(zend_execute_data) +
- sizeof(zval**) * op_array->last_var +
+ sizeof(zval**) * op_array->last_var * (EG(active_symbol_table) ? 1 : 2) +
sizeof(temp_variable) * op_array->T TSRMLS_CC);
EX(CVs) = (zval***)((char*)execute_data + sizeof(zend_execute_data));
memset(EX(CVs), 0, sizeof(zval**) * op_array->last_var);
- EX(Ts) = (temp_variable *)(EX(CVs) + op_array->last_var);
+ EX(Ts) = (temp_variable *)(EX(CVs) + op_array->last_var * (EG(active_symbol_table) ? 1 : 2));
EX(fbc) = NULL;
EX(called_scope) = NULL;
EX(object) = NULL;
@@ -37,7 +37,7 @@ 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)) {
+ 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));