diff options
| author | Andi Gutmans <andi@php.net> | 2001-12-06 17:47:04 +0000 |
|---|---|---|
| committer | Andi Gutmans <andi@php.net> | 2001-12-06 17:47:04 +0000 |
| commit | 42486196ad5e92d248b62b9c0691969ab81ef453 (patch) | |
| tree | fb4f1d0c2afee6809baa07c67ea26730b4391e68 /Zend/zend_execute.c | |
| parent | fe94f594272f797c6bb66c3c5a4ad64bbb1d7c73 (diff) | |
| download | php-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.c | 12 |
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: |
