summaryrefslogtreecommitdiff
path: root/Zend/zend_execute.c
diff options
context:
space:
mode:
authorAndi Gutmans <andi@php.net>2001-12-06 17:47:04 +0000
committerAndi Gutmans <andi@php.net>2001-12-06 17:47:04 +0000
commit42486196ad5e92d248b62b9c0691969ab81ef453 (patch)
treefb4f1d0c2afee6809baa07c67ea26730b4391e68 /Zend/zend_execute.c
parentfe94f594272f797c6bb66c3c5a4ad64bbb1d7c73 (diff)
downloadphp-git-42486196ad5e92d248b62b9c0691969ab81ef453.tar.gz
- Initial work on changing namespace scope. Only methods & variables
- right now. <? $hey = "Global hey\n"; class foo { static $hey = "Namespace hey\n"; function bar() { print "in foo::bar()\n"; } } function bar() { print "in bar()\n"; } bar(); namespace foo; bar(); namespace; bar(); namespace foo; $bar_indirect = "bar"; $bar_indirect(); namespace; print $hey; namespace foo; print $hey; $hey = "Namespace hey #2\n"; namespace; print $hey; $hey = "Global hey #2\n"; namespace foo; print $hey; ?>
Diffstat (limited to 'Zend/zend_execute.c')
-rw-r--r--Zend/zend_execute.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index b0a4a685ba..72ad7aef59 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -532,7 +532,8 @@ static void zend_fetch_var_address(zend_op *opline, temp_variable *Ts, int type
switch (opline->extended_value) {
case ZEND_FETCH_LOCAL:
- target_symbol_table = EG(active_symbol_table);
+ //target_symbol_table = EG(active_symbol_table);
+ target_symbol_table = EG(namespace)?&EG(namespace)->static_members:EG(active_symbol_table);
break;
case ZEND_FETCH_GLOBAL:
if (opline->op1.op_type == IS_VAR) {
@@ -1608,7 +1609,7 @@ binary_assign_op_addr: {
}
} else { /* function pointer */
EX(object).ptr = NULL;
- active_function_table = EG(function_table);
+ active_function_table = EG(namespace)?&EG(namespace)->function_table:EG(function_table);
}
if (zend_hash_find(active_function_table, function_name->value.str.val, function_name->value.str.len+1, (void **) &function)==FAILURE) {
zend_error(E_ERROR, "Call to undefined function: %s()", function_name->value.str.val);
@@ -1625,7 +1626,7 @@ overloaded_function_call_cont:
case ZEND_DO_FCALL: {
zval *fname = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R);
- if (zend_hash_find(EG(function_table), fname->value.str.val, fname->value.str.len+1, (void **) &EX(function_state).function)==FAILURE) {
+ 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);
}
FREE_OP(EX(Ts), &EX(opline)->op1, EG(free_op1));
@@ -1806,6 +1807,11 @@ do_fcall_common:
NEXT_OPCODE();
case ZEND_NAMESPACE:
{
+ if (EX(opline)->op1.op_type == IS_UNUSED) {
+ EG(namespace) = NULL;
+ } else {
+ EG(namespace) = EX(Ts)[EX(opline)->op1.u.var].EA.class_entry;
+ }
NEXT_OPCODE();
}
case ZEND_SEND_VAL: