diff options
author | Andi Gutmans <andi@php.net> | 2001-12-13 16:55:04 +0000 |
---|---|---|
committer | Andi Gutmans <andi@php.net> | 2001-12-13 16:55:04 +0000 |
commit | f4b832d277390f1e20e38ed275f26867c7c6537c (patch) | |
tree | 91aac94c57214300836ce189a1d565493adf77b7 /Zend/zend_execute.c | |
parent | c55f8b96c9477c21b2d5033050d386a3d5a6807c (diff) | |
download | php-git-f4b832d277390f1e20e38ed275f26867c7c6537c.tar.gz |
- Fix crash bug in startup code.
- Start work on being able to reference global and local scope
Diffstat (limited to 'Zend/zend_execute.c')
-rw-r--r-- | Zend/zend_execute.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 1f029428c0..e9bc897b88 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -548,7 +548,7 @@ static void zend_fetch_var_address(zend_op *opline, temp_variable *Ts, int type target_symbol_table = EG(active_op_array)->static_variables; break; case ZEND_FETCH_STATIC_MEMBER: - target_symbol_table = &Ts[opline->op2.u.var].EA.class_entry->static_members; + target_symbol_table = Ts[opline->op2.u.var].EA.class_entry->static_members; break; EMPTY_SWITCH_DEFAULT_CASE() } @@ -1500,6 +1500,9 @@ binary_assign_op_addr: { } EX(Ts)[EX(opline)->result.u.var].EA.class_entry = EG(namespace); NEXT_OPCODE(); + } else if (EX(opline)->extended_value == ZEND_FETCH_CLASS_MAIN) { + EX(Ts)[EX(opline)->result.u.var].EA.class_entry = EG(main_class_ptr); + NEXT_OPCODE(); } class_name = get_zval_ptr(&EX(opline)->op2, EX(Ts), &EG(free_op2), BP_VAR_R); @@ -1621,7 +1624,7 @@ binary_assign_op_addr: { zval_copy_ctor(this_ptr); EX(object).ptr = this_ptr; } - active_function_table = &Z_OBJCE_P(EX(object).ptr)->function_table; + //active_function_table = &Z_OBJCE_P(EX(object).ptr)->function_table; EX(calling_namespace) = Z_OBJCE_P(EX(object).ptr); } if (zend_hash_find(active_function_table, function_name->value.str.val, function_name->value.str.len+1, (void **) &function)==FAILURE) { @@ -1657,6 +1660,7 @@ overloaded_function_call_cont: if (zend_hash_find(EG(namespace)?&EG(namespace)->function_table:EG(function_table), fname->value.str.val, fname->value.str.len+1, (void **) &EX(function_state).function)==FAILURE) { zend_error(E_ERROR, "Unknown function: %s()\n", fname->value.str.val); } + EX(calling_namespace) = EG(namespace); FREE_OP(EX(Ts), &EX(opline)->op1, EG(free_op1)); zend_ptr_stack_push(&EG(arg_types_stack), EX(object).ptr); EX(object).ptr = NULL; @@ -2101,6 +2105,16 @@ send_by_ref: ce = EX(Ts)[EX(opline)->op1.u.var].EA.class_entry; + if (&ce->constants_table == &EG(main_class_ptr)->constants_table) { + if (!zend_get_constant(EX(opline)->op2.u.constant.value.str.val, EX(opline)->op2.u.constant.value.str.len, &EX(Ts)[EX(opline)->result.u.var].tmp_var TSRMLS_CC)) { + zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'", + EX(opline)->op2.u.constant.value.str.val, + EX(opline)->op2.u.constant.value.str.val); + EX(Ts)[EX(opline)->result.u.var].tmp_var = EX(opline)->op2.u.constant; + zval_copy_ctor(&EX(Ts)[EX(opline)->result.u.var].tmp_var); + } + NEXT_OPCODE(); + } if (zend_hash_find(&ce->constants_table, EX(opline)->op2.u.constant.value.str.val, EX(opline)->op2.u.constant.value.str.len+1, (void **) &value) == SUCCESS) { zval_update_constant(value, (void *) 1 TSRMLS_CC); EX(Ts)[EX(opline)->result.u.var].tmp_var = **value; |