Hi, There's been enough confusion, here's the patch again, this time against 5.3, no tests for clarity
http://pear.php.net/~greg/multi.5.3.patch.txt This patch allows: <?php namespace A; class a {} namespace B; class a {} namespace A; import B::a as b; class c extends b; ?> It doesn't allow: <?php $anycode = 1; namespace A; ?> so all code must have a namespace declaration. The sole purpose is to combine files containing namespace declarations. Greg
Index: Zend/zend_compile.c =================================================================== RCS file: /repository/ZendEngine2/zend_compile.c,v retrieving revision 1.647.2.27.2.41.2.28 diff -u -r1.647.2.27.2.41.2.28 zend_compile.c --- Zend/zend_compile.c 4 Dec 2007 12:38:42 -0000 1.647.2.27.2.41.2.28 +++ Zend/zend_compile.c 4 Dec 2007 17:24:34 -0000 @@ -4722,13 +4722,10 @@ CG(active_op_array)->opcodes[num-1].opcode == ZEND_TICKS)) { --num; } - if (num > 0) { + if (!CG(current_namespace) && num > 0) { zend_error(E_COMPILE_ERROR, "Namespace declaration statement has to be the very first statement in the script"); } } - if (CG(current_namespace)) { - zend_error(E_COMPILE_ERROR, "Namespace cannot be declared twice"); - } lcname = zend_str_tolower_dup(Z_STRVAL(name->u.constant), Z_STRLEN(name->u.constant)); if (((Z_STRLEN(name->u.constant) == sizeof("self")-1) && !memcmp(lcname, "self", sizeof("self")-1)) || @@ -4738,6 +4735,16 @@ } efree(lcname); + if (CG(current_namespace)) { + zval_dtor(CG(current_namespace)); + efree(CG(current_namespace)); + } + if (CG(current_import)) { + zend_hash_destroy(CG(current_import)); + efree(CG(current_import)); + } + CG(current_import) = NULL; + ALLOC_ZVAL(CG(current_namespace)); *CG(current_namespace) = name->u.constant; }
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php