I support this patch 100%. I have a large application I'm rewriting to include namespaces, however now I can no longer use my script caching functionality (which improved performance literally about 500%) that compiled all of my includes into one file, because many of the files have namespaces.
On Tue, 2007-12-04 at 12:12 -0600, Gregory Beaver wrote: > 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 > plain text document attachment (multi.5.3.patch.txt) > 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 -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php