Re: multiple namespace per file patch

From: Date: Tue, 04 Dec 2007 20:32:44 +0000
Subject: Re: multiple namespace per file patch
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-33692@lists.php.net to get a copy of this message
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

« previous php.internals (#33692) next »