On Tue, Mar 24, 2015 at 2:51 PM, Nikita Popov <nikita....@gmail.com> wrote:
> On Tue, Mar 24, 2015 at 10:28 AM, Dmitry Stogov <dmi...@zend.com> wrote: > >> I thought about something like this :) >> In my opinion UString is really not a proper way to implement Unicoide, >> but I agree not break anything in current stage. >> Anyway, please review the first PR (in my opinion it is safe to commit), >> but you may find some other issues. >> >> Thanks. Dmitry. >> > > First PR looks okay to me. One question: Why the separate INIT and ADD > opcodes? They seem pretty much the same, just one using a hardcoded 0 > instead of ex_val. > Oh. It's historical, at first we allocated rope on heap. I'll check if INIT_ROPE is still necessary. Most probably we still need it, to know the size of rope vector. > Regarding exception-safety - is the problem that doing an EG(exception) > check and releasing the rope is too expensive? > No. It's a common problem. Because exception may be thrown in some other opcode and we don't clean IS_VAR/IS_TMP_VAR zvals. For example the following script leaks independently from the patch <?php function foo() { throw new Exception(); } try { $a = "a"; $a = $a . $a . $a . foo() . $a . "\n"; } catch (Exception $e) { } ?> Thanks. Dmitry. > > Nikita >